USB over IP (Ubuntu)
Что делать если к удаленной или виртуальной машине необходимо подключить какое-то USB устройство, например, USB-ключ или веб-камеру? Тут на помощь приходит технология “USB over IP”, которя в системах Linux доступна почти из коробки. Алгоритм настройки достаточно примитивен и содержит в себе всего несколько шагов, которые будут перечислены ниже.
Базовая настройка (на всех хостах)
- Установить пакеты:
1apt install linux-modules-extra-`uname -r` linux-tools-`uname -r` hwdata - Добавить в файл
/etc/modules-load.d/modules.confстроки:1 2 3vhci_hcd usbip_core usbip_hostМодуль
usbip_hostнужен только с отдающей стороны (хоста куда подключено устройство) - Перезагрузить систему
В системе может отсутствовать определение сервиса usbipd для systemd, который должен находиться по пути /usr/lib/systemd/system/usbipd.service, либо /etc/systemd/system/usbipd.service. Чтобы это исправить, нужно:
-
создать файл запуска сервиса
/etc/systemd/system/usbipd.service, со следующим содержимым:1 2 3 4 5 6 7 8 9[Unit] Description=USB/IP server After=network.target [Service] ExecStart=/usr/bin/usbipd [Install] WantedBy=multi-user.target -
Включить и запустить сервис:
1 2systemctl enable usbipd.service systemctl start usbipd.service
С отдающей стороны
- Просмотр доступных для раздачи локальных устройств:
Вывод должен быть примерно таким:
1usbip list -l1 2 3 4 5 6 7 8- busid 1-1 (046d:0843) Logitech, Inc. : Webcam C930e (046d:0843) - busid 1-5 (0458:0186) KYE Systems Corp. (Mouse Systems) : Genius DX-120 Mouse (0458:0186) - busid 1-6 (03ee:8801) Mitsumi : unknown product (03ee:8801) - Подключение устройства к раздаче:
1usbip bind -b [busid] - Отключение от раздачи:
1usbip unbind -b [busid]
С принимающей стороны
- Просмотр доступных для подключения удаленных устройств:
1usbip list -r [remote_IP] - Подключение устройства:
1usbip attach -r [remote_IP] -b [busid] - Просмотр подключенных устройств:
Если есть подключенные устройства, то вывод должен быть примерно таким:
1usbip portТак же, при успешном подключении устройства, оно должно появиться в списке1 2 3 4 5 6Imported USB devices ==================== Port 00: <Port in Use> at High Speed(480Mbps) Logitech, Inc. : Webcam C930e (046d:0843) 2-1 -> usbip://192.168.122.1:3240/1-1 -> remote bus/dev 001/002lsusb. Например, так:1 2 3 4Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 002: ID 046d:0843 Logitech, Inc. Webcam C930e Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub - Отключение устройства:
1usbip detach -p [port_number]