香橙派5plus上跑雲手機方案二 waydroid

Python成长路發表於2024-07-09

前言

上篇文章香橙派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=gbmro.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.imgsystem.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 holdlinux-image-5.10.0-1009-rockchiplinux-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 釋出!

相關文章