快轉到主要內容

Windows 11用WSL跑Linux的Android容器「Waydroid」

Linux系統 虛擬機與容器技術 Waydroid Windows Subsystem for Linux
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

2024年 Microsoft宣佈,將於2025年中止支援WSA子系統,正式宣告系統內建的Android模擬器流產。

我想尋找一些替代方案,因為WSA系統相對其他模擬器還滿乾淨的,沒有太多商業廣告置入。之前我在Windows跑過雲手機為基礎的 ReDroid,這篇文章我要試試在Windows跑「Waydroid」。

Waydroid running on WSL on Windows 11

Waydroid在概念上很像Windows的WSA Android子系統,目的是要讓Linux電腦能夠無縫執行Android APP。

Microsoft有給WSL實現 WSLg的圖形介面,背後使用的是Wayland合成器,所以理論上可以跑Waydroid。

WSL本質上是虛擬機,因此WSL跑Waydroid跟在Virtualbox裡面的Ubuntu跑Waydroid其實沒什麼區別,但是WSL啟動速度比較快。

但,我測試WSLg無法啟動LXC容器,所以只好將其停用了,或許未來可以藉WSLg搞正式的3D加速。因此Waydroid目前是半殘的狀態,沒有GPU加速,virglrenderer亦幫不上忙。

1. 更換特製WSL核心
#

首先, 安裝WSL,目前版本是WSL 2 2.0.14。

接著,Waydroid需要特定的Linux核心模組才能運作。

Waydroid開發者有提供預先編譯好的核心可以直接用,但不知道為什麼他們只把編譯好的核心放在Telegram頻道?

如果怕有問題的話也可以參考 Arch Linux Wiki了解Waydroid的依賴項目,並 自行編譯WSL核心。Waydroid依賴的核心模組主要是binderfs,這個得在kconfig選單開啟。

  1. 我們還是使用現成的吧,加 Waydroid的Telegram頻道,於聊天欄輸入指令/get wsl取得核心檔案kernel

  2. 把kernle檔案放到Windows的C:\Users\使用者名稱\customwslkernel資料夾

  3. 之後切換到Windows的C槽使用者家目錄C:\Users\使用者名稱,新增設定檔.wslconfig

  4. 編輯該檔案,輸入以下內容,使用自訂核心,並停用WSLg

[wsl2]
kernel=C:\\Users\\使用者名稱\\wslcustomkernel\\kernel
guiApplications=false
  1. 重新啟動WSL
wsl --shutdown
wsl -d Ubuntu

2. 設定X伺服器和Weston
#

假如未來WSLg下的Waydroid正常運作,那麼這段就可以跳過。

  1. 登入WSL,確認WSL的圖形驅動有載入。WSL應該會偵測到你實體機的GPU,例如Intel。
sudo apt install mesa-utils

glxinfo | grep OpenGL
  1. 設定 VcXsrv和PulseAudio

  2. 安裝Wayland合成器Weston

sudo apt install weston
  1. 啟動Weston工作階段,VcXsrv應該會看到Weston視窗
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

export LIBGL_ALWAYS_INDIRECT=1

weston &

3. 安裝Waydroid
#

  1. 回到終端機,加入官方套件庫,安裝Waydroid套件
sudo apt install curl ca-certificates lzip python3 python3-pip
curl https://repo.waydro.id | sudo bash
sudo apt install waydroid
sudo waydroid init -s GAPPS -f
sudo systemctl start waydroid-container
  1. 啟動Waydroid前需要手動啟動dbus服務
sudo service dbus start
export XDG_RUNTIME_DIR=/run/user/$(id -u)
sudo mkdir $XDG_RUNTIME_USER
sudo chmod 700 $XDG_RUNTIME_DIR
sudo chown $(id -un):$(id -gn) $XDG_RUNTIME_DIR
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
dbus-daemon --session --address=$DBUS_SESSION_BUS_ADDRESS --nofork --nopidfile --syslog-only &
  1. 在Weston的視窗開啟終端機,啟動Waydroid主界面,視窗應該會跑到Weston那邊。
export XDG_SESSION_TYPE=wayland

waydroid session start

waydroid show-full-ui
  1. 參照 Ubuntu設定Waydroid的過程,把linhoudini和Google Play認證完成。

參考資料
#

相關文章

啟用巢狀Hyper-V,讓Windows 11 QEMU/KVM虛擬機支援WSL與WSA
Linux系統 虛擬機與容器技術 Libvirt Windows Subsystem for Linux QEMU Windows
Windows 11 WSL2跑Linux桌面環境與圖形程式的方法,使用WSLg XWayland
Linux系統 虛擬機與容器技術 Windows Subsystem for Linux KDE Plasma GNOME
如何編譯與更換WSL核心 (custom WSL kernel)
Linux系統 虛擬機與容器技術 Linux Windows Subsystem for Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。