KVM 穿透板载蓝牙和无线网卡

我的Host一直是Linux,但是偶尔会打游戏,因此有一台 Windows 虚拟机,最近想要把板载蓝牙和无线网卡穿透进去,但是都遇到了一些 小困难需要解决,因此记录成文。

穿透无线网卡

无线网卡穿透起来和穿透显卡等硬件是一样的,由于无线网卡在一个单独的IOMMU组,直接加到 /etc/modprobe.d/vfio.conf 中即可,此外,我发现我本地的无线网卡总是被 igb 驱动优先占用导致 vfio-pci 无法占用网卡,我在 /etc/modprobe.d/vfio.conf 中加上:

softdep igb pre: vfio-pci
options vfio-pci ids=...无线网卡的硬件ID

然后重启以后,就可以穿透了。

穿透蓝牙

一开始我以为蓝牙是和无线网卡在一起的,后来发现蓝牙是和USB控制器在一起的,在 virt-manager 中,点击 Add Hardware - USB Host Device, 选择带 Intl...Bluetooth 的那个,穿透进去以后,如果直接开机的话,会发现这样的现象:

  • Windows 可以发现蓝牙硬件,但是无法使用,安装驱动以后,点开 “我的电脑” 查看硬件详情,驱动里报错 “code: 10”

经过搜索发现,这是 libvirt 的一个改动导致的问题,要解决这个问题,还需要编辑XML:

$ sudo virsh edit --domain windows

</domain> 上面加上 <qemu:capabilities> 这一节:

<domain>
    <devices>
        ...
    </devices>

    <qemu:capabilities>
        <qemu:del capability="usb-host.hostdevice"/>
    </qemu:capabilities>

...
</domain>

此时如果保存你会发现无法通过xml校验,还需要跳到顶部,在 <domain type='kvm'> 改成

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

然后保存,然后重启以后,就可以穿透蓝牙了。


参考文档: