Ubuntu 18.04 升级后 QEMU USB 直通中断

Ubuntu 18.04 升级后 QEMU USB 直通中断

在过去的两年里,我一直在运行 Windows 虚拟机,并通过 USB 设备连接到该虚拟机。在虚拟机运行时连接设备,使用virsh attach-device vm_name config_file.xml,其中config_file.xml例如:

<!-- Logitech Internet Navigator -->
<hostdev mode='subsystem' type='usb' managed='yes'>
  <source>
    <vendor id='0x046d'/>
    <product id='0xc308'/>
  </source>
</hostdev>

这一切都很顺利,直到昨天我决定是时候将我的 Ubuntu 16.04 升级到 18.04 了。现在,将 USB 设备连接到 VM 不再起作用。

这是我看到的输出:

$ virsh attach-device windows-gaming-uefi config/keyboard-white.xml 
error: Failed to attach device from config/keyboard-white.xml
error: internal error: unable to execute QEMU command 'device_add': failed to open host usb device 1:3

该设备肯定存在,这是一些lsusb输出:

Bus 001 Device 003: ID 046d:c308 Logitech, Inc. Internet Navigator Keyboard

我查看了一下kern.logAppArmor 是否与此有关,但情况似乎并非如此。为了确保它不会干扰任何事情,我暂时完全禁用了 AppArmor。

有谁知道如何解决这个问题?

编辑chmod -R go+rw /dev/bus/usb在尝试连接 USB 设备之前执行 a 也没有帮助。

答案1

我设法通过首先从源代码重新安装 QEMU 来解决我的问题(请参阅https://askubuntu.com/questions/1067722/how-do-i-install-qemu-3-0-on-ubuntu-18-04):

sudo apt-get purge "qemu*"
sudo apt-get autoremove
sudo apt-get build-dep qemu

wget https://download.qemu.org/qemu-3.1.0.tar.xz
tar -xf qemu-3.1.0.tar.xz
rm qemu-3.1.0.tar.xz
cd qemu-3.1.0
./configure
make

sudo apt-get install checkinstall
sudo checkinstall make install

然后通过添加以下内容来确保 QEMU 以 root 身份运行/etc/libvirt/qemu.conf

user = "root"
group = "root"

最后重新加载 KVM 模块:

sudo rmmod kvm_intel
sudo rmmod kvm
sudo modprobe kvm
sudo modprobe kvm_intel
sudo systemctl restart libvirtd.service

在我看来,以 root 身份运行 QEMU 并不是绝对必要的,但我只是想让它正常工作。

答案2

感谢 Darhuuk 的回答,我能够自己完成此工作,然后将其修改为不以 root 身份运行 qemu。这就是我所做的:

在 中/etc/libvirt/qemu.conf,设置:

user = "qemu"
group = "qemu"

创建/lib/udev/rules.d/51-qemu-usb-passthrough.rules包含

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="XXXX" ATTRS{idProduct}=="YYYY" GROUP="qemu"

其中XXXXYYYY是我要转发的设备的供应商和产品 ID。 (如果您想转发特定的物理 USB 端口,无论插入什么,也可以通过其他 sysfs 属性进行设置,例如总线和端口)

运行udevadm control --reload-rulessudo systemctl restart libvirtd.service.

相关内容