Установил себе на 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
и у машины обязательно должен быть 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).
Картинка есть:
Теперь надо туда передать USB, в моем случае я решил пробросить гарнитуру.
Сперва, согласно документации надо в конфиге виртуальной машины настроить редирект USB, добавив тег <redirdev>
Делаем на хосте:
virsh edit имя_виртуалки
и дописываем строки по инструкции. Я решил использовать контроллер USB2:
просто потому, что в документации написано, что он лучше протестирован, чем USB3.
Запускаем remote-viewer, выбираем устройство для проброса:
и через секунду 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 никто так и не удосужился исправить данный баг в дистрибутиве.