快轉到主要內容

在Linux X11桌面用Weston啟動Waydroid,不依賴Wayland協定桌面

· 民國114年乙巳年
·
切換繁體/簡體
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid X Window Wayland
目錄

Running Waydroid on Linux X11 desktop using nested Weston seesion.

Waydroid可以讓我們在Linux系統跑Android APP,但不幸的是,這個技術需要用到Wayland協定的桌面。如何確認自己的桌面是Wayland還是X11?使用指令echo $XDG_SESSION_TYPE檢視。

有種種原因你可能無法使用Wayland:

  • 有些Linux發行版對Wayland支援度不佳,譬如Linux Mint 24.04、Ubuntu 24.04、Debian 12,仍在使用X11協定(X.org)的桌面。
  • 你使用的桌面不是GNOME、KDE Plasma,而是XFCE、LXQT、Cinammon、i3wm這類的,而他們對Wayland支援度不佳
  • 你認為Wayland沒有X11穩定,無法放棄X11。

非Wayland協定的桌面,會連啟動都不能啟動Waydroid。這個時候我們有一個辦法解決這個問題,那就是啟動巢狀(nested)的Wayland工作階段,在X11桌面開一個小型Wayland合成器的視窗,專門用來跑Waydroid就行啦!以X11當作後端來顯示Wayland合成器,連GPU加速也吃得到喔!

示意圖:Waydroid執行於KDE Plasma X11工作階段,你看到中間那個xeyes了吧。不需要進入KDE Plasma Wayland工作階段也可以操作Waydroid裡面的APP。

本篇文章Ivon將討論如何在X11協定的桌面啟動Waydroid,並設定一鍵啟動法。

1. 可用的巢狀Wayland合成器方案
#

巢狀Wayland合成器的方案有「Weston」和「Cage」。

Cage似乎比Weston難以操作,它沒辦法用指定的視窗大小啟動。因為Waydroid目前不能動態變更解析度,假若一開始啟動的視窗解析度較小,視窗放大後Waydroid畫面不會跟著放大,反之則會被切半。

我有注意到這個專案:SteamOS-Waydroid-Installer的作者採用了Cage來啟動Waydroid,並且能夠全螢幕。不過這樣做的先決條件是合成器必須支援wlroots標準,才能用wlr-randr控制全螢幕解析度。SteamOS 3.0的Big Picture Mode是跑在X11,搭配一個迷你Wayland工作階段Gamescope進入遊戲的。它這個操作僅適用Steam Gamescope,不能用在GNOME Mutter和KDE Plasma Kwin。

所以就用Weston吧,當你啟動Weston之後會進入一個獨立的Wayland桌面,只要在裡面的終端機啟動Waydroid,它就會認為自己跑在Wayland環境。

此外Weston具有定義啟動時視窗大小,以及自動啟動特定應用程式的能力。將二者組合在一起,再手動新增Desktop Entry,就能做到點個按鈕一鍵啟動Weston + Waydroid的操作。

2. 初始化Waydroid
#

即使沒法顯示Waydroid畫面,也可以事先把它裝好再來操作。

參見Ubuntu安裝Waydroid。只要下載好系統映像檔就夠了,先不要進入Android畫面。

3. 手動啟動Weston + Waydroid
#

  1. 安裝Weston套件
sudo apt install weston
  1. 輸入指令啟動Weston
weston
  1. 此時會跳出一個Weston視窗,把它最大化

  2. 在Weston的視窗裡面,點選畫面左上角,開啟Weston終端機。

  3. 輸入指令啟動Waydroid。這樣應該就會顯示Android桌面了。

waydroid show-full-ui

下面我們將把這個過程自動化。

4. 一鍵啟動Weston + Waydroid
#

就在Ivon想分享手動設定Weston + Waydroid的啟動程序的時候,發現Github已經有人寫好自動指令稿能直接用了。

1999AZZAR設計的use-waydroid-on-x11指令稿會自動安裝好Waydroid,修改Weston設定檔,以及新增Dekstop Entry。

  1. 執行以下指令安裝:
curl -sSL https://raw.githubusercontent.com/1999AZZAR/use-waydroid-on-x11/master/install.sh | sudo bash
  1. 這個指令稿是專為APT套件管理器的發行版寫的,可能無法適用其他Linux發行版。你需要參考作者的Github指示手動安裝對應的設定檔。

  2. 這個作者似乎漏了一個東西,Weston預設啟動的時候不會以最大化視窗開啟,這會導致Waydroid的畫面被切掉。因此需要編輯Weston設定檔:

vim ~/.config/weston.ini
  1. 加入以下內容,設定Weson解析度為1920x1080(依照具體顯示器數值而定)讓視窗能夠自動最大化。
[output]
name=X1
mode=1920x1080
  1. 如此一來,點選應用程式列表的Weston Session圖示,就會自動啟動Weston視窗並開啟Waydroid了。

  2. 依照指令稿作者設計的邏輯,在你關閉Weston視窗之後,Waydroid也會跟著「關機」。這點務必注意。

  3. 我注意到有時候重新調整Weston視窗大小會導致Waydroid崩潰?這時請用以下指令強制重新啟動Waydroid:

sudo systemctl restart waydroid-container

5. 無法解決的問題
#

因為Waydroid是針對Wayland開發的,透過Weston在X11桌面間接執行Waydroid會造成一些問題:

  • 無法在Linux與Android之間共享剪貼簿,即使安裝wl-clipboard、xclip、pyclip也無效。
  • 不可點選桌面的Waydroid圖示啟動APP,只能在Weston裡面使用。
  • 不能將Android APP視窗化,並列懸浮操作。

參考資料
#

相關文章

Waydroid + Weston + Scrcpy以headless模式執行Android APP
分類   資訊科技 虛擬機與容器技術
標籤   Raspberry Pi Waydroid Cloud Gaming Wayland
Fedora跑Android APP ~ 安裝Waydroid容器,解決SELinux問題
分類   資訊科技 虛擬機與容器技術
標籤   Waydroid Fedora Android
Linux跑Android APP,Ubuntu安裝Waydroid教學
分類   資訊科技 虛擬機與容器技術 Linux玩遊戲
標籤   Waydroid Ubuntu Android

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

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