前言
上篇文章香橙派5plus上跑雲手機方案一 redroid(帶硬體加速)說了怎麼跑帶GPU加速的redroid方案,這篇說下怎麼在香橙派下使用Waydroid。
溫馨提示
雖然能執行,但是體驗下來只能用軟體加速,無法使用GPU加速,所有會很卡。而且Waydroid還依賴於桌面環境wayland,要麼插上顯示器使用,要麼利用遠端桌面使用。測試adb雖然能連線,但無法使用scrcpy這種遠端工具,看錯誤提示是無法使用硬體解碼。
所以這個方案只做瞭解吧,我更傾向於使用redroid。不過x86下的Waydroid體驗應該會好很多,支援的GPU也多,用來日常體驗的話可以推薦,但我是用來做逆向,需要arm下的so就無法滿足要求了。
帶GPU加速的映象
有人提到可以在rk3588的環境下使用Waydroid並呼叫GPU渲染,看影片裡操作非常流暢(比redroid流暢的多),aida64顯示的重新整理率是144hz。不過可惜的是我在Ubuntu22,5.10的核心下沒測試成功,應該是需要升級6.8的核心,github還提供了對應的armbian的映象刷機包,但是我刷到固態硬碟無法正常啟動(有時候有成功啟動了),大家如果有興趣的自己測試一下
參考連結
https://www.bilibili.com/video/BV1TH4y1T723/
https://forum.armbian.com/topic/38184-waydroid-for-rk3588-with-armbian-edge-panthor-kernel-68/
https://github.com/WillzenZou/armbian_fork_build/releases
準備工作
安裝pyclip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python3 get-pip.py
sudo pip install pyclip --break-system-packages
切換到wayland
不切換的話會出現下面的錯誤
[15:45:37] WAYLAND_DISPLAY is not set, defaulting to "wayland-0"
[15:45:37] Wayland socket '/run/user/1000/wayland-0' doesn't exist; are you running a Wayland compositor?
sudo vim /etc/gdm3/custom.conf
修改WaylandEnable=true
,
sudo systemctl restart gdm3
然後登出重新進入
echo $XDG_SESSION_TYPE
如果顯示是wayland就可以
如果想在x11裡執行也可以,需要使用weston
,使用的步驟看:https://github.com/waydroid/waydroid/issues/195
,具體我就不測試了,我使用wayland也沒啥問題。
參考連結:
https://github.com/waydroid/waydroid/issues/771
https://linuxconfig.org/how-to-enable-disable-wayland-on-ubuntu-22-04-desktop
啟用psi
這個不確定是否是必須的,不過看到有其他文章(Linux最強安卓模擬器Waydroid最新版!Magisk+Xposed折騰教程)也提到了要開啟,所以建議開啟。
注意核心引數CONFIG_PSI=y
需要開啟,如果刷的跟我一樣的Ubuntu22系統,這個引數是已經開啟的:
sudo vim /boot/extlinux/extlinux.conf
在啟用的label的引數後面加一個psi=1
接著重啟後檢視sudo cat /proc/cmdline
檔案內容,可以看到核心啟動引數多了psi=1
參考連結
https://github.com/waydroid/waydroid/issues/136
禁用GPU渲染
Waydroid的issue裡提到mesa並不支援rk3588的GPU,所以需要修改配置強制使用軟體渲染。
sudo vim /var/lib/waydroid/waydroid_base.prop
將這個檔案裡的ro.hardware.gralloc=gbm
和ro.hardware.egl=mesa
修改成
ro.hardware.gralloc=default
ro.hardware.egl=swiftshader
好像重啟wayroid服務,這個就會被改回來,使用的時候注意一下。
參考連結
https://github.com/waydroid/waydroid/issues/282
https://github.com/waydroid/waydroid/issues/776
https://github.com/waydroid/waydroid/issues/760
安裝
根據官方文件,安裝倒是不麻煩,只需要下面幾行命令:
sudo apt install curl ca-certificates -y
curl https://repo.waydro.id | sudo bash
sudo apt install waydroid -y
參考連結
- 官方安裝文件
https://docs.waydro.id/usage/install-on-desktops
初始化
安裝完成後會提示先讓你用waydroid init
初始化映象,我測試映象下載不下來,還是得自己去網站下載映象放到指定目錄下再進行初始化。
先去sourceforge
下載需要的system和vendor映象,選最新的即可
下載完成後解壓會得到vendor.img
和system.img
兩個檔案,一起放到/usr/share/waydroid-extra/images
目錄下,在執行sudo waydroid init -f
初始化一下
參考連結
https://sourceforge.net/projects/waydroid/files/images/
遠端桌面
正常安裝完Waydroid服務是已經啟動的,如果沒有啟動可以手動啟動一下。
sudo systemctl status waydroid-container.service
然後就得在桌面環境下操作了,先用echo $XDG_SESSION_TYPE
確認一下當前桌面是否使用的wayland
,如果顯示的x11請按上面的說明切換到wayland。
這裡也可以在遠端桌面的環境下操作,可以先在介面設定裡開啟遠端桌面
然後就能在Windows的遠端桌面連線用ip連線到香橙派的Ubuntu,這裡有些小問題,比如香橙派鎖屏就會斷開連線,可以看下面參考連結裡的那篇文章,有提到怎麼避免這個問題。
啟動session
然後使用waydroid session start
啟動,注意這裡不需要加sudo,如果出現Android with user - is ready
說明啟動成功。
新開啟一個控制檯視窗,用waydroid show-full-ui
就能看到桌面環境了,解析度有點問題,懶得修改了。測試體驗下來確實卡,而且cpu佔用很高。
參考連結
https://losst.pro/en/how-to-enable-remote-desktop-in-ubuntu-22-04-23-10#toc-3-install-the-allow-locked-remote-desktop-extension
開啟adb
adb連線的ip就是waydroid session start
啟動時提示的ip,也可以去設定-》關於裡檢視,埠是5555。
adb connect 192.168.240.112:5555
,scrcpy確實是連不上,錯誤如下:
參考連結
https://docs.waydro.id/faq/using-adb-with-waydroid
錯誤
錯誤資訊1
RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
檢視錯誤日誌waydroid log
(024569) [18:03:09] RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
(027247) [18:10:48] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(027247) [18:10:48] *** output passed to waydroid stdout, not to this log ***
(027672) [18:12:07] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(027672) [18:12:07] *** output passed to waydroid stdout, not to this log ***
(044863) [18:17:38] % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
vnic is waydroid0
iptables v1.8.7 (legacy): can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Failed to setup waydroid-net.
iptables v1.8.7 (legacy): can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
(044863) [18:17:39] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(044863) [18:17:39] NOTE: The failed command's output is above the ^^^ line in the log file: /var/lib/waydroid/waydroid.log
(029602) [18:17:39] org.freedesktop.DBus.Python.RuntimeError: Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/dbus/service.py", line 715, in _message_cb
retval = candidate_method(self, *args, **keywords)
File "/usr/lib/waydroid/tools/actions/container_manager.py", line 34, in Start
do_start(self.args, session)
File "/usr/lib/waydroid/tools/actions/container_manager.py", line 138, in do_start
tools.helpers.run.user(args, command)
File "/usr/lib/waydroid/tools/helpers/run.py", line 58, in user
return tools.helpers.run_core.core(args, msg, cmd, working_dir, output,
File "/usr/lib/waydroid/tools/helpers/run_core.py", line 343, in core
check_return_code(args, code, log_message)
File "/usr/lib/waydroid/tools/helpers/run_core.py", line 219, in check_return_code
raise RuntimeError("Command failed: " + log_message)
RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
(029602) [18:17:39] RuntimeError: Command failed: % /usr/lib/waydroid/data/scripts/waydroid-net.sh start
(029666) [18:17:42] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(029666) [18:17:42] *** output passed to waydroid stdout, not to this log ***
(029848) [18:18:00] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(029848) [18:18:00] *** output passed to waydroid stdout, not to this log ***
這個錯誤是由於我用apt-mark hold
讓linux-image-5.10.0-1009-rockchip
和 linux-headers-5.10.0-1009-rockchip
不要被apt更新,但是linux-modules-5.10.0-1009-rockchip
確被更新了,所以不匹配。
只需要重新安裝一遍核心,然後全部設定不更新重啟即可。
sudo apt-mark hold linux-image-5.10.0-1009-rockchip linux-headers-5.10.0-1009-rockchip linux-modules-5.10.0-1009-rockchip linux-rockchip-headers-5.10.0-1009
錯誤資訊2
如果在執行waydroid session start
的時候一直卡在下面這行,可能就是你沒有修改為軟體渲染, 具體方法見上面的禁用GPU渲染
排查啟動失敗
如果啟動失敗可以看報錯資訊,沒有具體的報錯,就看日誌資訊waydroid log
,一般哪一行停止了就是哪個錯誤日誌引起的。
本文由部落格一文多發平臺 OpenWrite 釋出!