安装
1 | sudo pacman -S --needed qemu-desktop virt-manager dnsmasq swtpm |
- qemu-desktop: 与 kvm 搭配使用, kvm 只负责 cpu 和 内存的虚拟化, 其他虚拟化 qemu 负责. 相比 qemu-base 补充了图形相关内容, 相比 qemu-full 削减了不必要的其他 cpu 架构的模拟. 包含了 edk2-ovmf 软件包
- virt-manager: libvirt 的 gui 前端, 包含了 libvirt 软件包
- dnsmasq: nat 模式下提供 dhcp 和 dns 服务
- swtpm: tpm 模拟, windows 11 可能需要
配置
自启动 libvirt 服务
根据 libvirt 官方说明, 此方法未来会被弃用, 转变为模块化守护进程
启动模块化守护进程命令:
1
2
3
4
5 for drv in qemu interface network nodedev nwfilter secret storage
do
systemctl enable virt${drv}d.service
systemctl enable virt${drv}d{,-ro,-admin}.socket
done
1 | sudo systemctl enable libvirtd.service |
启动默认 nat 网卡
1 | sudo virsh net-start default |
如果默认 nat 网卡无法联网, 则可能是防火墙阻拦了流量转发, 需要防火墙放行
ufw需要添加如下规则:
1 | 1. 允许虚拟机通过 virbr0 向宿主机发送请求(如获取 DHCP 的 IP、DNS 解析) |
或者防火墙换用 firewalld, libvirt 会自动进行配置
配置完后建议重启
创建虚拟机
通常配置
固件选择 UEFI
所有硬件部分若能选择 Virtio 就选择这个
virtio gpu 配置
由于 nvidia 显卡驱动的特殊性, 常规配置方法无法正常启用 virtio gpu 的 3d 加速, 具体配置如下:
显示协议 Spice 修改:
1 | <graphics type="spice"> |
添加 egl-headless 显示协议如下, rendernode 的值要选择 nvidia 显卡对应的值:
1 | <graphics type="egl-headless"> |
显卡 Virtio 修改:
1 | <video> |
仅修改 xml 后的 virtio gpu 3d 加速, 由于权限问题, 只能在 QEMU/KVM 用户会话创建的虚拟机使用, 在系统会话下使用会报错 EGL_NOT_INITIALIZED, 还需如下配置:
修改 /etc/libvirt/qemu.conf, 取消注释 cgroup_device_acl 变量, 增加 /dev/kvm, /dev/dri/renderD129 (具体为 rendernode 的值), 以及执行 ls /dev | grep nvidia 的所有结果, 具体内容如下 (具体内容可能会不同):
1 | cgroup_device_acl = [ |
将 qemu 加入 render 和 kvm 组确保有访问显卡的权限:
1 | sudo usermod -aG render,kvm qemu |
最后重启 libvirtd 服务
1 | sudo systemctl restart libvirtd.service |
一些问题
虚拟机自动调节分辨率失效
官方为了 vnc 的兼容性, 通过 virtio-win.iso 安装驱动时, 默认不会安装 vgpu 相关服务, 安装时要额外勾选相关内容, 或者单独执行 virtio-win.iso 里面的 vgpusrv.exe -i, vgpusrv 位于 viogpudo 目录
虚拟机内分辨率要明显大于实际窗口对应的分辨率, 导致的显示异常
kde 桌面缩放不为 100% 就会出现这个问题, 临时解决方法是设置相关环境变量 GDK_BACKEND=x11, GDK_SCALE=1, GDK_DPI_SCALE=0, 由于 kde
桌面相关功能的缺陷暂无较好的解决办法
无法启用系统托盘图标
安装 libayatana-appindicator (其他应用若缺失系统托盘图标也会依赖该软件包, 建议在 arch linux 安装时就安装)
无法启用 libguestfs 虚拟机自检
安装 libguestfs (暂时可能用不到)





