Ubuntu 18.04 업그레이드 후 QEMU USB 패스스루가 중단되었습니다.

Ubuntu 18.04 업그레이드 후 QEMU USB 패스스루가 중단되었습니다.

지난 2년 동안 저는 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

AppArmor가 이것과 관련이 있는지 확인했지만 kern.log그렇지 않은 것 같습니다. 방해가 되지 않도록 일시적으로 AppArmor를 완전히 비활성화했습니다.

이 문제를 해결하는 방법을 아는 사람이 있나요?

편집하다: chmod -R go+rw /dev/bus/usbUSB 장치를 연결하기 전에 작업을 수행하는 것도 도움이 되지 않습니다.

답변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가 루트로 실행되고 있는지 확인하십시오 /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

제 생각에는 QEMU를 루트로 실행하는 것이 꼭 필요한 것은 아니지만 단지 그것이 작동하기를 바랍니다.

답변2

Darhuuk의 답변 덕분에 저는 이 작업을 직접 수행한 다음 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"

전달하려는 장치의 공급업체 및 제품 ID는 어디에 있고 XXXX는 무엇입니까? YYYY(연결된 항목에 관계없이 특정 물리적 USB 포트를 전달하려는 경우 버스 및 포트와 같은 다른 sysfs 속성을 통해 설정할 수도 있습니다)

실행 udevadm control --reload-rules하고 sudo systemctl restart libvirtd.service.

관련 정보