Найти в Дзене
mamaich

Подключение к QEMU KVM с Windows ПК с пробросом USB

Установил себе на Raspberry PI4 QEMU-KVM, для управления им использую virt-manager, и в качестве виртуалки поднял Ubuntu под AARCH64.

Решил поиграться - могу ли я подключиться к этой виртуалке со стороны Windows и пробросить туда USB устройство c компа с Windows 11. При этом я не планирую использовать дополнительные решения, а обойтись только теми средствами, которые идут в комплекте c qemu, libvirt, virt-manager.

В качества протокола "проброса" использую SPICE - так как просто не существует, либо я не нашел, альтернатив.

Сперва требуется установить пакеты: virt-viewer, UsbDk с сайта spice (usbredirect - не нужен).

Драйвер UsbDk теоретически может конфликтовать с драйверами WinUSB/libusb, поэтому я их на всякий случай удалил.

В настройках виртуалки проверяем, что тип Display выбран SPICE:

Видеоадаптер - virtio

-2

и у машины обязательно должен быть USB контроллер.

Сперва удостоверяемся, что к машине удается просто подключиться. Для этого из папки "C:\Program Files\VirtViewer v11.0-256\bin" запускаем:

remote-viewer.exe spice://192.168.1.3:5911

Здесь 192.168.1.3 - адрес хоста с QEMU-KVM, порт 5911 выбран в настройках вручную, см скрины выше (лень было гуглить, какой порт является стандартным для SPICE).

Картинка есть:

-3

Теперь надо туда передать USB, в моем случае я решил пробросить гарнитуру.

Сперва, согласно документации надо в конфиге виртуальной машины настроить редирект USB, добавив тег <redirdev>

Делаем на хосте:

virsh edit имя_виртуалки

и дописываем строки по инструкции. Я решил использовать контроллер USB2:

-4

просто потому, что в документации написано, что он лучше протестирован, чем USB3.

Запускаем remote-viewer, выбираем устройство для проброса:

-5

и через секунду remote-viewer без каких-либо сообщений закрывается!

К счастью, на реддите описано, как устранять проблему - требуется откатиться на версию 10.0. Либо, так как в версии 11.0 исправлены проблемы с редиректом звука, требуется взять libusb-1.0.dll (версия 1.0.22.11312) из версии 10, поставить 11ую версию remote-viewer и заменить ей libusb-1.0.dll (версия 1.0.24.11584) в каталоге с установленной 11ой.

Я проверил - оба способа работают, но остановился на втором, с заменой DLLки на более старую. Очень неприятно, что за 2 года, прошедших с выпуска 11ой версии remote-viewer никто так и не удосужился исправить данный баг в дистрибутиве.