需求是在Arch Linux(Wayland/KDE)上用安卓模拟器运行プロセカ等游戏,并尝试使用独显。此外还尝试了使用独显跑其他Electron程序。
首先安装waydroid和相关的便利脚本:
paru -S waydroid waydroid-script-git
后者是一个可以方便地给waydroid安装各种常用组件的脚本,也可以直接在github上找到它自己配置运行,从aur安装就是省事一些。
waydroid的相关常用指令如下:
waydroid init # 第一次启动时的初始化
waydroid init -s GAPPS # 初始化并自动安装GApps,如果是为了运行游戏推荐安装
waydroid # 直接启动
waydroid session start/stop/restart # 管理waydroid会话,基本上等同于模拟器的开关机
sudo waydroid container start/stop/restart # 管理容器,在waydroid会话起不来、修改waydroid配置等之后重启
sudo systemctl start/stop/restart waydroid-container.service # 管理服务,上述两个都起不来的时候重启
waydroid upgrade -o # 更新配置文件之后应用
waydroid shell # 进客户机的shell
如果是从aur安装的waydroid-script,可以使用sudo waydroid-extras 启动,安装相关扩展。第一步直接选安卓13就行。
libndk / libhoudini 用于在x86设备上运行arm应用的转译层,几乎必安。后者似乎对游戏的兼容性比较好,反正对プロセカ前者跑不起来,只能用后者。magisk 无痛rootgapps 第一步没有安GApps的可以在这里安如果你使用dae或者其他透明代理工具,务必在其配置文件(例如/etc/dae/dae.config)中绑定waydroid的网口,否则安卓设备会无法联网。例如:
global {
lan_interface: waydroid0 # 绑定waydroid网口
wan_interface: auto # 使用 "auto" 自动侦测 WAN 接口。
}
接下来修改waydroid的配置文件 /var/lib/waydroid/waydroid.cfg,在[properties] 段落添加内容。
先添加这两行模拟WIFI和触摸事件。如果需要对特定包启用而不是全部包,将*替换为包名,允许*的通配。
persist.waydroid.fake_touch = *
persist.waydroid.fake_wifi = *
然后修改渲染设置,如果希望使用集成显卡(我是Intel):
persist.waydroid.gpu_mode = vd
ro.hardware.vulkan = lvp # 此处似乎可选lvp和swiftshader,需要根据waydroid设备中的驱动决定。我使用了lvp
如果希望使用nvidia显卡:
ro.hardware.gralloc = gbm
ro.hardware.egl = mesa
ro.hardware.vulkan = nvidia
ro.hardware.opengl = mesa
一般来说 nvidia-drm 应该已经启用了。最后重载Waydroid配置、重启容器应该就可以了。
waydroid upgrade -o
sudo systemctl restart waydroid-container.service
waydroid session start
electron的渲染压力对集成显卡来说还是有点高了,好在对electron应用来说启用N卡很简单:
DRI_PRIME=1 MESA_LOADER_DRIVER_OVERRIDE=nvidia electron . --enable-features=VaapiVideoDecoder --enable-unsafe-swiftshader --disable-gpu-sandbox --enable-gpu-rasterization
设置两个环境变量,传点参数就好了。总之这个也是LLM给的,能用就行。