Невозможность пробросить подключенное USB устройство с хоста Hyper-V в виртуальную машину является одним из существенных недостатков гипервизора Microsoft. Для решения этой проблемы можно использовать open-source проект usbipd-win (https://github.com/dorssel/usbipd-win). Утилита usbipd-win позволяет пробросить по сети любое USB устройство или ключ (в том числе HASP) с хоста Windows в любую виртуальную машину Hyper-V, удаленный компьютер с Linux, Windows или в WSL2.
Утилита usbipd-win реализует протокол USB over IP для перенаправления USB устройств по сети.
Вы можете установить серверную часть usbipd-win на компьютере Windows с помощью менджера пакетов WinGet:
winget install --id=dorssel.usbipd-win -e
Также можно скачать и установить MSI пакет вручную. Например, usbipd-win_2.4.1.msi (https://github.com/dorssel/usbipd-win/releases).
После установки в Windows появится служба usbipd (USBIP Device Host).
Откройте командную строку и выведите список доступных USB устройств:
usbipd list
Чтобы предоставить общий доступ к USB устройству, выполните команду:
usbipd bind --busid <busid>
Например:
usbipd bind --busid=7-1
Теперь вы можете получить доступ к этому USB устройству по сети с другого Linux или Windows хоста. Для подключения используется порт TCP 3240 (проверьте, что он открыт в Windows Defender Firewall).
Если вы хотите пробросить USB устройства с Windows хоста на Linux, нужно установить пакеты: ():
$ sudo apt install usbip hwdata usbutils
(для Ubuntu и Debian)$ sudo yum install kmod-usbip usbip-utils hwdata
(для RPM дистрибутивов CentOS/RHEL/Oracle Linux)
Теперь вы можете вывести список USB устройств, опубликованных на удаленном компьютере:
$ usbip list --remote=192.168.0.10
Чтобы подключить (пробросить) определенное устройство USB устройство по сети на ваш хост, выполните:
$ sudo usbip attach -remote=192.168.0.10 --busid=7-1
Если вам нужно пробросить USB устройство в WSL 2, сначала установите необходимые пакеты в вашем дистрибутиве WSL (например для Ubuntu):
$ sudo apt install linux-tools-5.4.0-77-generic hwdata
$ sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20
используйте команды:
usbipd wsl list
usbipd wsl attach --busid 7-1
Проверьте, что USB устройство доступно:
$ lsusb
Чтобы отключить USB устройство:
usbipd wsl detach --busid 7-1
Если нужно пробросить USB устройство по сети на другой Windows хост, нужно установить на нем специальный агент usbip.exe
(https://github.com/cezanne/usbip-win)
Для автоматического подключение USB устройства по сети при загрузке Windows, добавьте в планировщик Windows Scheduler команду:
usbip.exe attach -r 192.168.0.10 -b 7-1