主力使用Linux已一月有余,逐渐探索出了最适合自己工作流与现有硬件的使用姿势,这篇博客将介绍本人目前在使用的Linux+Windows双系统终极解决方案

概要

参考:ArchWiki:PCI passthrough via OVMFLooking Glass B6 documentation

本方案需要占用海量硬盘空间与内存,若与我有相同需求且有相似的硬件环境欢迎尝试与改进

本方案为在Linux下使用libvirtqemu-kvm运行Windows虚拟机,透传显卡并通过HDMI假负载Looking Glass实现低延迟画面传输,使用SPICE协议与USB 重定向实现外设共享,本方案未实现剪贴板共享

软硬件需求

  • 双显卡的笔记本/台式机
  • 支持虚拟化的CPU
  • 支持iommu的主板
  • 建议不低于32GB内存,实际内存大小可取决于需求
  • 原生支持UEFI的显卡
  • 直连独立显卡的HDMI接口
  • HDMI假负载 淘宝 3¥ 左右
  • 一个临时使用的HDMI显示设备用于检测显卡透传是否成功(可选)
  • 带有kvmiommuvfio模块的Linux内核 (实测 Arch 主线内核可用

软件准备

本博客基于 Arch Linux 进行演示

安装AUR软件包gpu-passthrough-manager, 它会自行设置内核参数并根据需求设置iommu分组隔离

界面如图,选择需要透传的设备并LOAD_VFIO

1-12-gpupass.png

重启后运行lspci -nnk检查相应设备是否加载了vfio-pci驱动

1
2
3
4
5
6
7
8
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2560] (rev a1)
Subsystem: Lenovo Device [17aa:3831]
Kernel driver in use: vfio-pci
Kernel modules: nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228e] (rev a1)
Subsystem: Lenovo Device [17aa:3831]
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel

运行lsmod | grep kvm,若有kvm_intel/kvm_amd则证明kvm正常开启

安装虚拟机

安装软件包qemu-desktop, libvirt, edk2-ovmf, swtpm, 与 virt-manager

启用libvirtd.servicevirtlogd.socket并重启

virt-manager中新建QEMU/KVM虚拟机,系统选择为Windows11,CPU核心与内存大小按需分配,启动前编辑设置添加对应的PCI设备,如下图

1-12-virtmanager.png

正常启动,安装系统,进入系统,激活系统,安装nvidia显示驱动,驱动安装完成后即可在设置中看到两个显示器,一个为QXL显卡SPICE协议的qemu监视器,另一个为直连透传显卡的HDMI假负载显示器

配置Looking Glass

关闭虚拟机,启用virt-manager的xml编辑选项

1-12-xml.png

编辑虚拟机的xml配置文件,在<device>段内添加以下内容,添加ivshmem设备

1
2
3
4
<shmem name='looking-glass'>
<model type='ivshmem-plain'/>
<size unit='M'>32</size>
</shmem>

其中<size>大小需根据自身需求调整,可参考官网表格

Resolution Size (M)
1920x1080 32
3840x2160 128

现阶段不推荐使用Looking Glass显示HDR,以上数据均不含HDR元数据

使用systemd-tmpfiles设置权限,新建/etc/tmpfiles.d/10-looking-glass.conf并填入以下内容

1
2
3
#Type Path               Mode UID             GID Age Argument

f /dev/shm/looking-glass 0660 <your username> kvm -

确保有一个<graphics type='spice'>设备来使用外设透传与USB重定向

<video>设备更改为<model type=vga/>

删除<input type='tablet'/>设备

添加<input type='mouse' bus='virtio'/><input type='keyboard' bus='virtio'/>两个输入设备

添加Intel HDA音频设备

1
2
3
4
<sound model='ich9'>
<audio id='1'/>
</sound>
<audio id='1' type='spice'/>

保存xml,重启宿主机

启动虚拟机,下载安装Looking Glass Windows Host服务端 Looking Glass - Downloads

在宿主机安装Looking Glass Client, Arch Linux可直接在AUR下载安装

重启虚拟机,在宿主机终端中运行looking-glass-client -a,即可自动连接虚拟机并自动适应分辨率

最终实现效果:

1-12-final.png.png

还可根据文首的Looking Glass官方文档进行个性化设置,如剪贴板共享等