探討如何將Linux的Waydroid視窗化,同時執行多個遊戲,與多開遊戲的可能性。
如果說要把Waydroid當成Windows的Android模擬器使用,任其可以像Bluestacks自由縮放視窗大小,恐怕有困難。
Bleustacks的多開畫面示意圖,取自官網
因為目前Waydroid的畫布大小在啟動LXC容器的時候就判定了,預設會以桌面環境大小為基準。之後Android端的畫面就會是那個時候所取得的解析度。
如果改用Waydroid多視窗懸浮(multi window mode)模式來縮放APP呢?多視窗就能讓多個APP同時執行了?不好,目前Waydroid對多視窗的支援度不佳,常常跑版,且許多遊戲APP依然會強制進入全螢幕。
我可以想到的一個解方,就是用同一部電腦的Scrcpy去連Waydroid,這樣一來這個Android畫面的視窗就是可以縮放的。再搭配waydroid shell wm size指令即時修改Waydroid畫面解析度即可。
用Scrcpy控制Waydroid還有個好處,那就是對模擬觸控的支援度更好。有些APP只認觸控點擊事件,如果Waydroid的Fake Touch功能無效的話,通常可以用Scrcpy解決。
1. Scrcpy搭配Waydroid的用法#
本文所有的操作都是在Scrcpy視窗進行的,並非Waydroid自身的視窗。
在Linux安裝Waydroid
安裝Scrcpy
開啟Waydroid系統設定,到「關於手機」查找IP位址,通常是192.168開頭
使用以下指令啟動Scrcpy,連線到Waydroid,解析度設定1920。不用傳輸音效,Waydroid視窗不開,聲音也會一直輸出到Linux的PipeWire。
scrcpy -s 192.168.240.112 -m 1920 --no-audio
Scrcpy視窗執行的時候,Waydroid的視窗可以最小化或者關閉,但有時候會造成Waydroid重開機的樣子?
Scrcpy視窗縮放之後,Waydroid解析度不會變化,而是啟動時就固定了,若太高會導致UI元素變小,此時可以用ADB的wm指令,動態修改Android端的解析度和DPI,而不用重啟Waydroid容器。
sudo waydroid shell wm size 1280x720
sudo waydroid shell wm density 240
這樣能讓APP的UI元素大一些。
另一種永久修改Waydroid解析度的方式是改設定檔,不過修改後需要重啟Waydroid容器。
waydroid prop set persist.waydroid.width 1280
waydroid prop set persist.waydroid.height 720
- 修改的DPI的話則是要編輯Waydroid設定檔,填入數值
ro.sf.lcd_density=240
sudo vim /var/lib/waydroid/waydroid_base.prop
- 然後重啟容器。
sudo systemctl restart waydroid-container
- 不過我注意到強制改解析度,雖然Scrcpy可以正常操作,但Waydroid原本視窗滑鼠DPI會跑掉導致點選錯亂。如果要重置解析度的話:
sudo waydroid shell wm size reset
sudo waydroid shell wm dpi reset
waydroid prop set persist.waydroid.width ""
waydroid prop set persist.waydroid.height ""
sudo systemctl restart waydroid-container
2. Waydroid同時執行多個遊戲#
「多開」遊戲,一個畫面同時執行多款不同的遊戲。
前文已經說過,Waydroid的多視窗懸浮模式雖然能夠把APP視窗化,在一個畫面同時執行多個APP,但是Waydroid的視窗管理非常不穩定,畫面常常亂跑或者大小錯亂。
講到多開問題,只要這樣做就好了吧:利用Scrcpy的Virtual Display功能建立虛擬顯示器,每個顯示器執行一個遊戲,就能同時在Waydroid裡面執行多個遊戲了…但是我執行後是黑螢幕,看來Android 11做不到這點。
那就只能利用Android內建的分割螢幕功能了,假設要同時執行兩個橫向遊戲,應該要先把Waydroid變成「直向」的解析度,我這裡是參考Samsung平板的解析度:
sudo waydroid shell wm size 1600x2560
然後再進入多工界面,上下分割遊戲。遊戲無法分割的話,到Android開發人員選項開啟強制可調整大小。
3. 多開遊戲帳號#
雖然基於LXC,可Waydroid不支援多重實例,不過有的是辦法。
要一個遊戲兩個帳號,使用Shelter的工作設定檔切開,分開登入就好。