В инструкции описан процесс настройки бесплатного решения для редиректа USB устройства с сервера на любой другой компьютер сети. Это может пригодиться, например, для проброса USB токена на виртуальную машину или несетевого принтера. В рамках примера сервер будет на Linux Ubuntu, клиент — на Windows (проверено на 7, 10, Server 2008 и 2012).
В Ubuntu установка инструмента проброса USB выполняется следующей командой:
apt-get install linux-tools-`uname -r`
* в моем случае была выполнена установка linux-tools-4.4.0-128-generic, где 4.4.0-128-generic — версия ядра, используемого в Ubuntu.
Подгружаем модули драйверов USB:
modprobe usbip-core
modprobe usbip-host
modprobe vhci-hcd
Запускаем usbip в качестве демона:
Смотрим список подключенных USB устройств:
usbip list -l
Пример ответа:
[email protected]:/usr/src# usbip list -l – busid 2-1.3 (8564:1000) Transcend Information, Inc. : JetFlash (8564:1000)
– busid 2-1.4 (1c4f:0026) SiGma Micro : Keyboard (1c4f:0026)
Теперь можно расшарить флешку:
usbip bind -b 2-1.3
Должны увидеть на подобие:
usbip: info: bind device on busid 2-1.3: complete
Выполним настройку на базе операционной системы Windows.
Скачиваем драйвер и утилиту для Windows. Распаковываем архив usbip.zip.
Открываем диспетчер устройств (команда devmgmt.msc или правой кнопкой по Этот компьютер в проводнике – Управление – Диспетчер устройств).
Кликаем по Действие – Установить старое устройство:
Выбираем ручную установку устройства – показать все устройства – Установка с диска и выбираем файл USBIPEnum.inf (находится в каталоге usbip, который мы распаковали ранее).
Будет обнаружено устройство USB/IP Enumerator – кликаем Далее, чтобы его установить. Мы должны его увидеть среди системных устройств.
Теперь открываем командную строку (cmd.exe) и переходим в распакованный каталог, например:
cd C:\Users\user\Downloads\usbip
* где C:\Users\user\Downloads\usbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
usbip -l 192.168.0.15
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
C:\Users\user\Downloads\usbip>usbip -l 192.168.0.15– 192.168.0.15 2-1.3: unknown vendor : unknown product (8564:1000) : /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3 : (Defined at Interface level) (00/00/00)
Теперь можно примонтировать устройство:
usbip.exe -a 192.168.0.15 2-1.3
* если увидим ошибку …cannot find device, переходим к решению.
Данная инструкция предполагала разовый запуск как сервера, так и клиента. После перезапуска системы, работоспособность будет потеряна до повторного ввода команд. Попробуем настроить автоматический запуск сервера и клиента.
Добавляем модули в автозапуск:
vi /etc/modules
usbip-coreusbip-hostvhci-hcd
Создаем юнит в systemd:
vi /etc/systemd/system/usbipd.service
[Unit]Description=USBIPd
[Service]ExecStart=/scripts/usbipdType=oneshotRemainAfterExit=yes
[Install]WantedBy=multi-user.target
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl daemon-reload
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
mkdir /scripts
vi /scripts/usbipd
#!/bin/shPATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
bindID=’2-1.3′
usbipd -Dusbip bind -b $bindID
usbip attach –remote=localhost –busid=$bindIDsleep 2usbip detach –port=00
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
Запускаем демона:
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Пишем небольшой батник:
@echo off
cd C:\Users\user\Downloads\usbipusbip.exe -a 192.168.0.15 2-1.3
* C:\Users\user\Downloads\usbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Ошибка появляется при попытке выполнить usbipd -D.
Причина: был установлен пакет usbip вместо linux-tools-<версия ядра>.
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
Данная ошибка также появляется при попытке выполнить usbipd -D.
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
ln -s /usr/bin/usbipd /usr/sbin/usbipd
Выскакивает при попытке посмотреть список устройств командой usbip list -l.
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
mkdir /usr/share/hwdata
Создаем симлинк на существующий файл:
ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
При попытке запустить утилиту в командной строке Windows получаем ошибки:
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1usbip err: usbip.c: 216 (query_exported_devices) recv op_commonusbip err: usbip.c: 288 (show_exported_devices) query
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
* было
* стало
При попытке монтирования устройства в Windows, выскакивает ошибка с похожим текстом:
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Причина: недоработка серверного ПО — при расшаривании USB не считывается количество дескрипторов.
Решение: примонтировать устройство на сервере с последующим отмонтированием:
usbip attach –remote=localhost –busid=2-1.3
* в моем случае устройство имеет идентификатор 2-1.3.
usbip port
* смотрим номер порта, на котором висит наше примонтированное устройство.
usbip detach –port=00
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failedusbip: error: open vhci_driverusbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
и добавляем в файл /etc/modules строку vhci-hcd.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies