Published Document

Libvirt 开启 NVIDIA VirGL 3D 加速

本文主要记录:

  • Libvirt 固定 IP
  • NVIDIA VirGL 3D 加速
  • Wayland + VirtIO GPU 配置
  • NixOS 更新后 edk2 修复
  • 虚拟机常用工具安装

适用于:

  • QEMU
  • Libvirt
  • Virt-Manager
  • Hyprland
  • NixOS
  • Arch Linux

本文主要针对 Wayland 环境下的 VirtIO + VirGL 方案,而不是 GPU Passthrough。


固定 IP 设置

为了方便:

  • SSH
  • VSCode Remote
  • 文件共享
  • 端口映射

建议为虚拟机设置固定 IP。

编辑默认网络:

sudo EDITOR=nvim virsh net-edit default

添加:

<network>
  <name>default</name>

  <forward mode='nat'/>

  <bridge name='virbr0'/>

  <ip address='192.168.122.1'
      netmask='255.255.255.0'>

    <dhcp>
      <host mac='52:54:00:b7:a4:16'
            name='nixos-live'
            ip='192.168.122.88'/>
    </dhcp>

  </ip>
</network>

参数说明:

参数作用
mac虚拟机网卡 MAC
name主机名
ip固定 IP

重启网络

sudo virsh net-destroy default
sudo virsh net-start default

查看 DHCP:

virsh net-dhcp-leases default

安装 virglrenderer

VirGL 是:

  • VirtIO GPU 的 OpenGL 加速方案
  • Wayland 下推荐方案
  • 比传统 QXL 更现代

安装:

sudo pacman -S virglrenderer

NixOS:

nix-env -iA nixpkgs.virglrenderer

开启 NVIDIA VirGL 3D 加速

编辑虚拟机 XML:

sudo virsh edit 虚拟机名称

修改 graphics 节点

替换:

<graphics type="spice" autoport="yes">
  <listen type="address"/>
</graphics>

<graphics type="egl-headless">
  <gl rendernode="/dev/nvidia0"/>
</graphics>

推荐:

/dev/dri/renderD128

兼容性通常更好。


修改 video 节点

替换:

<video>
  <model type="virtio"
         heads="1"
         primary="yes">

    <acceleration accel3d="yes"/>

  </model>

  <address type="pci"
           domain="0x0000"
           bus="0x00"
           slot="0x01"
           function="0x0"/>
</video>

关键参数

参数作用
type="virtio"VirtIO GPU
accel3d="yes"开启 3D 加速
egl-headlessWayland OpenGL 渲染

如果 PCI 地址冲突,可以直接删除 <address /> 节点。


验证 VirGL 是否成功

安装:

sudo pacman -S mesa-utils

检查:

glxinfo | grep OpenGL

以及:

glxinfo | grep renderer

正常情况下会看到:

virgl

或者:

NVIDIA

Wayland 下推荐配置

推荐组合:

组件推荐
显示协议SPICE
GPUVirtIO
渲染VirGL
桌面Hyprland
后端Wayland
OpenGLEGL

NixOS 更新后 edk2 找不到

NixOS 更新后:

  • /nix/store hash 会变化
  • qemu 路径失效

可能导致:

edk2-x86_64-code.fd not found

修复方法

编辑 XML:

sudo virsh edit 虚拟机名称

删除:

<loader readonly="yes"
        type="pflash"
        format="raw">
/nix/store/xxxx-qemu/share/qemu/edk2-x86_64-code.fd
</loader>

<nvram template="/nix/store/xxxx-qemu/share/qemu/edk2-i386-vars.fd"
       templateFormat="raw"
       format="raw">
/var/lib/libvirt/qemu/nvram/archlinux_VARS.fd
</nvram>

libvirt 会自动重新生成。

不建议在 NixOS 中手动写死 /nix/store 路径。

虚拟机推荐安装的软件

qemu-guest-agent

安装:

sudo pacman -S qemu-guest-agent

启用:

sudo systemctl enable --now qemu-guest-agent

作用:

  • 获取 IP
  • 文件系统同步
  • Virt-Manager 状态同步

spice-vdagent

安装:

sudo pacman -S spice-vdagent

启用:

sudo systemctl enable --now spice-vdagentd

作用:

  • 自动分辨率调整
  • 剪贴板共享
  • 鼠标同步

总结

功能推荐
VirtIO GPU推荐
VirGL推荐
egl-headless推荐
SPICE推荐
qemu-guest-agent必装
spice-vdagent必装
End of document
Loading Comments...