快轉到主要內容

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

分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Windows Subsystem for Linux
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

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

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

Waydroid running on WSL on Windows 11

Waydroid基於LXC容器技術實現,在概念上很像Windows的WSA Android子系統,目的是要讓Linux電腦能夠無縫執行Android APP。

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

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

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

環境
#

  • Windows 11 23H2
  • 顯示卡Nvidia GTX1050Ti
  • WSL 2.3.13
  • Ubuntu 22.04
  • 使用自訂Linux核心

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 systemctl start dbus

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
分類   資訊科技 虛擬機與容器技術
標籤   Libvirt Windows Subsystem for Linux QEMU-KVM Windows Hyper-V
Windows 11 WSL2跑Linux桌面環境與圖形程式的方法,使用WSLg XWayland
分類   資訊科技 虛擬機與容器技術
標籤   Windows Subsystem for Linux KDE Plasma GNOME
如何編譯與更換WSL核心 (custom WSL kernel)
分類   資訊科技 虛擬機與容器技術
標籤   Linux Windows Subsystem for Linux

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。