USB over IP (Ubuntu)
Что делать если к удаленной или виртуальной машине необходимо подключить какое-то USB устройство, например, USB-ключ или веб-камеру? Тут на помощь приходит технология “USB over IP”, которя в системах Linux доступна почти из коробки. Алгоритм настройки достаточно примитивен и содержит в себе всего несколько шагов, которые будут перечислены ниже.
Базовая настройка (на всех хостах)
- Установить пакеты:
1
apt install linux-modules-extra-`uname -r` linux-tools-`uname -r` hwdata
- Добавить в файл
/etc/modules-load.d/modules.conf
строки:1 2 3
vhci_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 2
systemctl enable usbipd.service systemctl start usbipd.service
С отдающей стороны
- Просмотр доступных для раздачи локальных устройств:
Вывод должен быть примерно таким:
1
usbip list -l
1 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)
- Подключение устройства к раздаче:
1
usbip bind -b [busid]
- Отключение от раздачи:
1
usbip unbind -b [busid]
С принимающей стороны
- Просмотр доступных для подключения удаленных устройств:
1
usbip list -r [remote_IP]
- Подключение устройства:
1
usbip attach -r [remote_IP] -b [busid]
- Просмотр подключенных устройств:
Если есть подключенные устройства, то вывод должен быть примерно таким:
1
usbip port
Так же, при успешном подключении устройства, оно должно появиться в списке1 2 3 4 5 6
Imported 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/002
lsusb
. Например, так:1 2 3 4
Bus 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
- Отключение устройства:
1
usbip detach -p [port_number]