我一直想嘗試在Raspberry Pi 5跑雲手機的方案,並希望能跟Linux共存。
ARM版的ReDroid是值得考慮的方案之一,它對headless環境的適應性較強。
本篇要測試Waydroid在headless環境的執行效果。
之前寫過一篇在Raspberry Pi 5安裝Waydroid跑Android的操作,但那是接上實體螢幕才做到的。其實Waydroid不用接螢幕也能跑,只是設定就會變很複雜了。
它可以在headless模式執行,只要Wayland合成器支援虛擬輸出就行,這樣我們就能用Scrcpy遠端存取Waydroid的畫面。什麼合成器支援healdess模式?Weston、Kwin、Sway都有支援。
1. 環境#
- Raspberry Pi 5
- Raspberry Pi OS Bookworm
- Waydroid Android 11
- Arch Linux GNOME Wayland 用於遠端操控
參見 這篇了解如何在Raspberry Pi 5安裝Waydroid,必須接實體螢幕設定好Waydroid,確認GPU加速一切正常後再往下。
2. 嘗試用Scrcpy連線到Waydroid畫面#
此時的樹莓派是沒有接任何實體螢幕的
安裝Weston
sudo apt install weston
- 以headless後端啟動Weston
weston --backend=headless-backend.so --use-gl &
export WAYLAND_DISPLAY="wayland-1"
- 在Weston的DISPLAY啟動Waydroid
sudo systemctl start waydroid-container
waydroid show-full-ui
- 使用指令查看Waydroid IP
sudo waydroid shell
ip addr
- 在樹莓派開啟ADB連線,連接到同一個裝置的Waydroid
adb connect 192.168.1.240:5555
- 再啟動Scrcpy。因為Waydroid無法讓外網連接,我使用的是架設個網頁版 ws-scrcpy。ADB顯示有連線,理論上應該看得到Waydroid畫面。但…黑螢幕,可能是Scrcpy本身有問題?
3. 改用WayPipe存取Waydroid畫面#
此時的樹莓派是沒有接任何實體螢幕的。不存取Android畫面,而是將整個Weston畫面拉過來。
這個比較技術性一點,因為要先取得Waydroid真正的畫面,所以我們得使用WayPipe。又WayPipe使用不是很友善,因其要求兩邊都得是Wayland,之後我們會把WayPipe的操作轉為X11 Forwarding。
- 設定 WayPipe,將遠端的Weston視窗拉到本機Linux
waypipe ssh -C user@樹莓派IP weston
- 這樣我們就可以存取Raspberry Pi的Weston,再從中啟動Waydroid畫面
waydroid show-full-ui
因為SSH加密,延遲有點高,不過GPU加速有成功!
Weston本身可在X11環境使用,所以使用X11的用戶可擺脫WayPipe,改用X11 Forwarding了來開啟Waydroid視窗了。
ssh -X user@樹莓派IP weston
4. 結論#
headless的設定還不如HDMI欺騙器要簡單高效。