在virt-manager中配置VirGL GPU加速以启动Waydroid

在虚拟机中启用GPU虚拟化并套娃使用Waydroid

Posted by wszqkzqk on June 12, 2025
本文字数:1601

前言

Waydroid是一个在Linux上运行Android容器的项目,在Arch Linux下可以很方便得通过AUR或者archlinuxcn软件源安装。(Arch Linux的官方内核均已启用binder模块,因此Waydroid开箱即用)笔者并不经常使用Waydroid,而且也不喜欢Waydroid将大量启动文件放到KDE Plasma的起动器中,因此笔者选择将Waydroid运行在virt-manager管理的QEMU虚拟机中,虚拟机事实上是直通笔者的移动硬盘块设备作为存储,没有使用虚拟机镜像文件。

然而,笔者发现直接在QEMU虚拟机中运行Waydroid时,只有底栏图标显示,却没有任何界面显示;而直接在裸机上运行完全相同的系统环境时Waydroid则可以正常显示界面。因此,笔者推断是Waydroid需要依赖OpenGL等GPU加速。根据Waydroid的官方文档,Waydroid默认需要启用GPU虚拟化才能正常工作,当然,也可以通过在/var/lib/waydroid/waydroid.cfg[properties]中设置ro.hardware.gralloc=defaultro.hardware.egl=swiftshader来禁用GPU加速,但这会导致Waydroid的性能大幅下降。

笔者之前的虚拟机配置中并没有启用GPU虚拟化,这也导致即使是在虚拟机中运行KDE Plasma桌面环境时,桌面环境的性能也不够好,Konsole的日志输出甚至肉眼可见一行一行地刷新。可见,虚拟机的GPU虚拟化配置是有必要的。因此,笔者不推荐在Waydroid中禁用GPU加速,应当尽量启用GPU虚拟化以满足Waydroid的需求。

宿主机配置

安装

在Arch Linux下,安装virt-manager和QEMU的相关软件包:

sudo pacman -S --needed qemu-full virt-manager

如果不需要qemu-full的所有功能,可以只安装qemu-desktop

配置

安装完成后,启动virt-manager程序。可以参考笔者之前的博客中的方法完成基本配置。

这样按照默认方式配置完成后,还需要额外配置GPU虚拟化。

virt-manager中,选择要配置的虚拟机,点击右键,选择打开,然后在虚拟机窗口中点击右上角的显示按钮,选择显卡,型号选择virtio,并勾选下方的3D加速选项,点击应用

#~/img/qemu/gpu-3d-virtio.webp
在显卡配置中启用3D加速

随后,配置显示协议。类型选择为Spice 服务器,监听类型选择为,并勾选下方的OpenGL选项,选择对应的宿主显卡设备。

#~/img/qemu/spice-opengl.webp
在显示协议中启用OpenGL

完成上述配置后,点击应用保存配置。

虚拟机配置

进入虚拟机。在Arch Linux下,可以通过AUR或者archlinuxcn软件源安装Waydroid:

paru -S --needed waydroid waydroid-image

如果需要使用GApps,可以使用waydroid-image-gapps镜像:

paru -S --needed waydroid waydroid-image-gapps

启用Waydroid服务:

sudo systemctl enable --now waydroid-container.service

随后,初始化Waydroid:

sudo waydroid init

如果需要使用GApps,可以使用sudo waydroid init -s GAPPS命令。

现在,Waydroid已经可以在虚拟机中运行了。首次启动Waydroid时,会运行Android系统的开机动画,随后会进入Android系统的桌面界面,而这些过程需要依赖GPU虚拟化。

可以使用命令启动GUI:

waydroid show-full-ui
#~/img/qemu/waydroid-in-linux-in-virt-manager.webp
在virt-manager的虚拟机Linux中“套娃”运行的Waydroid

也可以从启动器中选择Android应用。