Обновлено: 19.09.2018
Опубликовано: 22.06.2018
В инструкции описан процесс настройки бесплатного решения для редиректа USB устройства с сервера на любой другой компьютер сети. Это может пригодиться, например, для проброса USB токена на виртуальную машину или несетевого принтера. В рамках примера сервер будет на Linux Ubuntu, клиент — на Windows (проверено на 7, 10, Server 2008 и 2012).
Устанавливаем usbip
Настраиваем клиента
Настраиваем автоматический запуск
USB-сервера
Клиента Windows
Решение проблем
usbip_common_mod.ko and usbip.ko must be loaded
/usr/sbin/usbipd: No such file or directory
failed to open /usr/share/hwdata//usb.ids
recv op_common
cannot find device
udev_device_new_from_subsystem_sysname failed
Установка и запуск
В 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 в качестве демона:
usbipd -D
Смотрим список подключенных USB устройств:
usbip list -l
Пример ответа:
root@usb:/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:UsersuserDownloadsusbip
* где C:UsersuserDownloadsusbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
usbip -l 192.168.0.15
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
C:UsersuserDownloadsusbip>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-core
usbip-host
vhci-hcd
Создаем юнит в systemd:
vi /etc/systemd/system/usbipd.service
[Unit]
Description=USBIPd
[Service]
ExecStart=/scripts/usbipd
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl daemon-reload
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
mkdir /scripts
vi /scripts/usbipd
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
bindID=’2-1.3′
usbipd -D
usbip bind -b $bindID
usbip attach —remote=localhost —busid=$bindID
sleep 2
usbip detach —port=00
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
Запускаем демона:
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Автозапуск клиента Windows
Пишем небольшой батник:
@echo off
cd C:UsersuserDownloadsusbip
usbip.exe -a 192.168.0.15 2-1.3
* C:UsersuserDownloadsusbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Возможные проблемы
1. usbip_common_mod.ko and usbip.ko must be loaded
Ошибка появляется при попытке выполнить usbipd -D.
Причина: был установлен пакет usbip вместо linux-tools-<версия ядра>.
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
apt-get install linux-tools-`uname -r`
2. /usr/sbin/usbipd: No such file or directory
Данная ошибка также появляется при попытке выполнить usbipd -D.
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
ln -s /usr/bin/usbipd /usr/sbin/usbipd
3. usbip: error: failed to open /usr/share/hwdata//usb.ids
Выскакивает при попытке посмотреть список устройств командой usbip list -l.
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
mkdir /usr/share/hwdata
Создаем симлинк на существующий файл:
ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
4. usbip err … recv op_common
При попытке запустить утилиту в командной строке Windows получаем ошибки:
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip.c: 216 (query_exported_devices) recv op_common
usbip err: usbip.c: 288 (show_exported_devices) query
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
* было
* стало
5. (attach_device) cannot find device
При попытке монтирования устройства в 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
6. udev_device_new_from_subsystem_sysname failed
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
modprobe vhci-hcd
и добавляем в файл /etc/modules строку vhci-hcd.
Содержание
- Устанавливаем USB/IP
- Установка usbp/ip на сервере
- Настраиваем клиентскую часть usb/ip
- Нюансы при работе с usb/ip
- Настройка USB-сервера Ubuntu на базе usbip
- Установка и запуск
- Настройка клиента
- Автозапуск
- Автозапуск сервера
- Автозапуск клиента Windows
- Возможные проблемы
- 1. usbip_common_mod.ko and usbip.ko must be loaded
- 2. /usr/sbin/usbipd: No such file or directory
- 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
- 4. usbip err . recv op_common
- 5. (attach_device) cannot find device
- 6. udev_device_new_from_subsystem_sysname failed
- ITСooky
- IT-рецепты съедобные и не очень!
- Делаем не сетевой принтер-сканер — сетевым с USBIP для одного ПК на Ubuntu!
Устанавливаем USB/IP
Written by on 16.03.2017 . Posted in KVM, Linux
Данный проект позволяет пробросить usb устройства через сеть ethernet. Установку USB/IP производил на ubuntu-server 16.04(14.04) lts. Данной темой пришлось озадачиться т.к приходится пробрасывать usb ключи (eToken) и другие устройства в виртуальные машины у которых нет физических подключений. Можно пробросить usb устройство используя средства виртуализации, в kvm проброс USB это можно сделать так, но тогда возникает вопрос. Как делать живую миграцию виртуальной машины между серверами? Установив USB/IP решил все эти задачи.
Установка usbp/ip на сервере
Все бинарные файлы и модули входят в пакет linux-tools, вот его и поставим.
Сначала посмотрим информацию о нашем установленном ядре uname -r, а потом ставим linux-tools-X.XX
для ubuntu-server 14.04 lts
Все необходимые бинарные файлы для запуска будут находится в /usr/lib/linux-tools/3.19.0-59-generic/ usbip и usbipd
После установки необходимо подгрузить модули и запустить сервер командой:
usbipd -D
Не забудьте добавить загрузку модулей в файл /etc/modules
Запускаем сервер usbipd
Если при запуске usbipd -D получили ошибку:
Скорее всего вы по ошибке инсталировали пакет apt-get install usbip. Удалите его и поставьте linux-tools…
С установкой и запуском серверной части все. Теперь необходимо раздать в доступ usb устройства подключенные к данному серверу (192.168.10.200).
usbip bind — необходимо выполнять для каждого устройства
Посмотреть расшариные usb устройства можно следующей командой:
Настраиваем клиентскую часть usb/ip
Установка ни чем не отличается от серверной части. Устанавливаем тот же пакет linux-tools.X-XX-….
Подгружаем модули: usbip-core и usbip-host
Смотрим доступные usb устройства на удаленном сервере:
Если получили ошибку:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Мы забыли подключить модуль vhci-hcd
Вот теперь все должно сработать без ошибок. Не забудьте подгрузить все необходимые модули на клиенте в /etc/modules
usbip-core
usbip-host
vhci-hcd
Нюансы при работе с usb/ip
В процессе эксплуатации выяснились следующе моменты. Если клиентскую машину перегрузить или выключить, то подключение usb устройства командой usbip attach -r 192.168.10.200 —busid=4-1 может завершится ошибкой:
Но при этом если посмотреть с клиентской машины доступные usb устройства на сервере, то все usb видятся прекрасно. Видимо серверная часть хранит информацию о подключенных клиентах.
В качестве решения этой проблемы необходимо на сервере отключить usb устройство и заново расшарить. Делается примерно так.
Поэтому преждем чем перегружать или выключать клиентскую машину необходимо сначала отключать usb.
1. Смотрим на каком порту подключен usb
2. Отключаем устройство
Все теперь можно перегружать, выключать и т. д. это все можно автоматизировать создав исполняемый файл положив в /etc/init.d/. update-rc.d — в помощь.
В моей сети нет необходимости пробрасывать usb на клиентскую машину с windows. Но судя по отзывам пользователей в интернете тоже все работает.
Источник
Настройка USB-сервера Ubuntu на базе usbip
В инструкции описан процесс настройки бесплатного решения для редиректа 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:
Запускаем usbip в качестве демона:
Смотрим список подключенных USB устройств:
root@usb:/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) и переходим в распакованный каталог, например:
* где C:UsersuserDownloadsusbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
usbip -l 192.168.0.15
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
C:UsersuserDownloadsusbip>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, переходим к решению.
Автозапуск
Данная инструкция предполагала разовый запуск как сервера, так и клиента. После перезапуска системы, работоспособность будет потеряна до повторного ввода команд. Попробуем настроить автоматический запуск сервера и клиента.
Автозапуск сервера
Добавляем модули в автозапуск:
usbip-core
usbip-host
vhci-hcd
Создаем юнит в systemd:
[Service]
ExecStart=/scripts/usbipd
Type=oneshot
RemainAfterExit=yes
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
usbipd -D
usbip bind -b $bindID
usbip attach —remote=localhost —busid=$bindID
sleep 2
usbip detach —port=00
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Автозапуск клиента Windows
Пишем небольшой батник:
cd C:UsersuserDownloadsusbip
usbip.exe -a 192.168.0.15 2-1.3
* C:UsersuserDownloadsusbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Возможные проблемы
1. usbip_common_mod.ko and usbip.ko must be loaded
Ошибка появляется при попытке выполнить usbipd -D.
Причина: был установлен пакет usbip вместо linux-tools- .
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
apt-get install linux-tools-`uname -r`
2. /usr/sbin/usbipd: No such file or directory
Данная ошибка также появляется при попытке выполнить usbipd -D.
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
ln -s /usr/bin/usbipd /usr/sbin/usbipd
Выскакивает при попытке посмотреть список устройств командой usbip list -l.
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
Создаем симлинк на существующий файл:
ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
4. usbip err . recv op_common
При попытке запустить утилиту в командной строке Windows получаем ошибки:
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip.c: 216 (query_exported_devices) recv op_common
usbip err: usbip.c: 288 (show_exported_devices) query
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
5. (attach_device) cannot find device
При попытке монтирования устройства в 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 detach —port=00
6. udev_device_new_from_subsystem_sysname failed
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
и добавляем в файл /etc/modules строку vhci-hcd.
Источник
ITСooky
IT-рецепты съедобные и не очень!
Делаем не сетевой принтер-сканер — сетевым с USBIP для одного ПК на Ubuntu!
У меня принтер Kyocera FS-1125MFP нельзя сказать что он не сетевой, надо сказать что он хреновый сетевой принтер, и вообще не сетевой сканер(не выпендривайтесь покупайте всегда HP)! Ну что есть то есть, не покупать же каждый год новую модель принтера! Рядом с ним стоит старый ноутбук только ради сканирования, вот от него буду избавляться, чтобы по сети прокинуть USB порт с Kyocera FS-1125MFP на ПК с Ubuntu. Можно былобы и на Windows 10 сделать, тоже что и на Ubuntu — но Windows на столько не подходящая для этого ОС что даже пытаться не буду!
Отталкиваться буду от этой инструкции habr.com/ru/post/308860/ шикарно — понятно написано, думал это все что надо и не надо ничего дописывать мне, но как обычно всплывают нюансы!
Иду на свой домашний Linux сервер, им все еще работает Orange PI PC PLUS, и будет работать пока Raspberry не начнут ставить eMMC в себя!
На нем крутится Armbian
Делаю
sudo apt-get update
sudo apt-get upgrade
И ставлю
sudo apt-get install usbip
Запускам
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo usbipd -D
Смотрим что есть на USB, перед этим я подключил принтер к апельсинке по USB
sudo usbip list -l
Есть! Теперь поделимся им
sudo usbip bind —busid=4-1
Смотрим что у нас повесилось на USBIP
usbip list -r localhost
То что надо было!
Чтобы нужные модули грузились сами добавляем в
vi /etc/modules
вот это
И добавляем в cron команду
sudo crontab -e
вот эту
Теперь сервер можно безболезненно перезагружать, а вот клиента…
Настраиваем USBIP на Ubuntu
Идем на клиентский Ubuntu и ставим
sudo apt install linux-tools-common
В этом сборнике есть USBIP, напрмяую однако не ставится, как на апельсинке
Активируем, тут нужен еще модуль vhci-hcd
sudo modprobe usbip-core
sudo modprobe usbip-host
sudo modprobe vhci-hcd
sudo usbipd -D
Подключаем
sudo usbip attach —remote=192.168.1.209 —busid=4-1
Смотрим что появилось
sudo usbip port
Оно! А тут вообще как родной по usb показывается!
lsusb
Принтер, кстати после attach сразу появился в Ubuntu, только драйвер неправильный, надо будет скачивать!
Принтер начинает печатать после того как даю ему правильный PPD файл. Причем если раньше по сети из под Ubuntu нельзя было напечатать файлы с названием на русском — теперь они стали печататься.
Драйверы для сканера устанавливаю кликом на kyocera-sane_1.1.0228_amd64.deb
После этого сканер начинает определятся
sudo scanimage -L
Simple Scan все равно не видит принтер, перезагружаюсь!
И тут вскрылся нюанс! После перезагрузки клиента Ubuntu не могу подключиться к принтеру по USBIP, порт на сервере как бы занят как бы завис, чтобы его освободить на сервере надо пере подключить!
sudo usbip unbind —busid=4-1
sudo usbip bind —busid=4-1
На клиенте Ubuntu надо повторить все шаги выше, чтобы подсоединить USBIP!
И после этого Simple Scan начинает сканировать
Заставляем USBIP работать автоматом на Ubuntu
Надеемся что IP USBIP сервера меняться не будет, и USB там никто не будет передергивать! Поэтому надо решить одну проблему — чтобы Ubuntu клиент перед выключением или перезагрузкой, отключался от USBIP сервера и после загрузки подключался!
crontab не поможет, будем делать через systemd
Идем в свою папку у меня это /home/alexandr
Делаем скрипт
vi .usbip_script_start
с текстом
Делаем его исполняемым
sudo chmod +x .usbip_script_start
Еще делаем скрипт
vi .usbip_script_stop
С текстом
Тут порт немного интерактивно определяем, но надеемся что одно всего у нас подключение USBIP
делаем его исполняемым
sudo chmod +x .usbip_script_stop
Теперь делаем вот тут
sudo vi /etc/systemd/system/usbip_start_and_stop.service
Скрипт с таким текстом с текстом
Тут пишите свою папку, и тут есть указания на то чтобы network был жив когда скрипт запускается
Запускаем его
sudo systemctl start usbip_start_and_stop.service
и ставим на автозапуск
sudo systemctl enable usbip_start_and_stop.service
Теперь можно спокойно выключаться и перезагружаться, порт на USBIP сервере не будет блокироваться!
UPD: Ubuntu обновился и перестал покдлючасять к сканеру
Неожиданно видимо сменилась версия ядря, надо ставить
sudo apt install linux-tools-generic
sudo apt install linux-tools-5.4.0-45-generic
И опять работает, надо только переподключить на сервере сканер, а то завис в этой связи
Ошибку не ошибку (потому что ни на что не влияет)
Источник
- Печать
Страницы: [1] Вниз
Тема: USBIP (Прочитано 6282 раз)
0 Пользователей и 1 Гость просматривают эту тему.

RW1R
Всем доброго времени суток!
Столкнулся с проблемой проброса USB over IP, а если точнее, то с настройкой/установкой USBIP. Гуглеж ответов на мои вопросы не нашел, поэтому обращаюсь к Вам, коллеги!
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
Устанавливаю USBIP следующим образом:
1)
sudo modprobe usbip-host
2)
sudo modprobe usbip-core
3) стартую демон
sudo usbipd -D
и тут вылазит вот это:
usbip err: stub_driver.c: 33 (open_sysfs_stub_driver) usbip_common_mod.ko and usbip.ko must be loaded
** (process:20029): ERROR **: driver open failed
Ловушка трассировки/останова
Соответственно дальше все тщетно…
Подскажите куда пихать когда первый раз, что делать?
Punko
насколько я могу понять, не хватает нужных модулей ядра.

RW1R
Насколько я понял, в репах лежит битая (или нерабочая) версия usbip. Гуглеж вывел меня вот на это: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/898003, пост № 34. Запустил — работает, во всяком случае ошибок не вылезает, но теперь другая проблема:
usbip list -r Х.Х.Х.Х
Пытался посмотреть девайсы на удаленной машине через Хамачи, возможно дело в нем, вечером проверю по локалке.
usbip: error: could not connect to Х.Х.Х.Х:3240: System error
« Последнее редактирование: 08 Сентября 2016, 12:09:02 от RW1R »
Punko
RW1R,
Насколько я понял, в репах лежит битая (или нерабочая) версия usbip
возможно, баг даже не присоединили ни к кому, хотя он уже и старый.
Возможно, надо мейнтейнеров пинать, чтоб что-то изменилось.

RW1R
По локалке, к сожалению, та же беда. Подскажите, нужно ли конфигурировать клиента, для того, чтобы расшарить usb?
Пользователь добавил сообщение 08 Сентября 2016, 22:14:52:
Разобрался! It works!))
Делал так:
1)
usbipd -D
— Стартанул демона
2)
netstat -alpt | grep usbipd
ответ:
tcp 0 0 *:3240 *:* LISTEN 25989/usbipd
tcp6 0 0 [::]:3240 [::]:* LISTEN 25989/usbipd
3) Открыл порт в фаерволле (иначе не заработает):
iptables -I INPUT -p tcp -m tcp --dport 3240 -j ACCEPT
4)
usbip list -l
Ответ:
- busid 3-2 (0951:1665)
Kingston Technology : Digital DataTraveler SE9 64GB (0951:1665)
...
5) На клиенте и сервере делаем так:
sudo modprobe vhci-hcd
6) Биндим нужный девайс:
usbip bind -b 3-2
Ответ:
usbip: info: bind device on busid 3-2: complete
7) С удаленной машины делаем так:
usbip list -r Х.Х.Х.Х
« Последнее редактирование: 11 Сентября 2016, 13:55:33 от RW1R »

jester81
День добрый, принимайте еще одного новичка )))
у меня так жене получалось эту программу настроить
строил немного иначе:
Мне нужно пробросить по сети ЮЗБ с ЛИНУКСОВОЙ МАШИНЫ ( Xubuntu 12) на виндовую машину, Чтоб работать
виндовыми программами с устройствами на ЛИНУКС машине
Устанавливаю USBIP по вот этой инструкции(ниже):
**************************************************
https://m.habrahabr.ru/post/177647/?mobile=yes
1. Установка серверной части USBIP.
Шаги установки/настройки ubuntu 12.04 server я пропущу.
1.1 Для начала требуется обновить систему.
sudo apt-get update && sudo apt-get dist-upgrade -y
1.2 Добавим репозиторий с usbip. Пакет есть и в стандартном репозитории, но там он оказался не рабочим.
sudo add-apt-repository ppa:whoopie79/ppa
1.3 Установим пакет usbip и включим нужные модули.
sudo apt-get install usbip -y
modprobe usbip-core
modprobe usbip-host
(можно и sudo modprobe vhci-hcd) тоже работает
1.4 Добавим нужные модули в автозагрузку. Для этого откроем файл /etc/modules в редакторе
sudo nano /etc/modules
и в конец добавим
usbip-core
usbip-host
можно и vhci-hcd
1.5 Создадим init.d скрипт. Для этого скопируем /etc/init.d/skeleton
cp /etc/init.d/skeleton /etc/init.d/usbip
Далее отредактируем строки в /etc/init.d/usbip
DESC=»usbip»
NAME=»usbipd» (иногда на форумах видел без кавычек в этой строке)
DAEMON_ARGS=»-D»
После этого дадим права файлу
sudo chmod 755 /etc/init.d/usbipd
1.6 Добавим init.d скрипт в автозагрузку.
sudo update-rc.d usbipd defaults
1.7 Пришло время запустить usbip на сервере, для этого запустим команду в консоли
sudo /etc/init.d/usbipd start
Если команда не выдала ошибок, то все прошло удачно и можно приступать к пробросу usb устройства.
Вот тут у меня проблема, не стартует.
Пишет вот что:
/usr/sbin/usbipd: symbol lookup error: /usr/sbin/usbipd: undefined symbol: stub_driver
А если запустить так:
usbipd -D — то вроде бы как запускается и в пямяти висит даже(TOP запускаю и смотрю)
команда: lsof -i:3240
выдает:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
usbipd 3082 root 4u IPv4 18171 0t0 TCP *:3240 (LISTEN)
usbipd 3082 root 5u IPv6 18172 0t0 TCP *:3240 (LISTEN)
видимо порт3240 открыт и случается
Команда: usbip list -l
ВЫДАЛА устройства:
usbip: error: failed to open /usr/share/hwdata//usb.ids
Local USB devices
=================
— busid 1-1 (8087:0024)
unknown vendor : unknown product (8087:0024)
1-1:1.0 -> hub
— busid 1-1.1 (079b:0028)
unknown vendor : unknown product (079b:0028)
1-1.1:1.0 -> cdc_acm
1-1.1:1.1 -> cdc_acm
— busid 1-1.2 (15d9:0a4f)
unknown vendor : unknown product (15d9:0a4f)
1-1.2:1.0 -> usbhid
— busid 1-1.3 (03eb:6119)
unknown vendor : unknown product (03eb:6119)
1-1.3:1.0 -> cdc_acm
1-1.3:1.1 -> cdc_acm
— busid 2-1 (8087:0024)
unknown vendor : unknown product (8087:0024)
2-1:1.0 -> hub
ВОТ МОИ УСТРОЙСТВА В РЕАЛЕ: # lsusb
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 03eb:6119 Atmel Corp. AT91SAM CDC Demo Application
Bus 001 Device 004: ID 15d9:0a4f Trust International B.V.
Bus 001 Device 003: ID 079b:0028 Sagem
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
мне бы достучаться хотя бы до …. Bus 001 Device 005: ID 03eb:6119 Atmel Corp. AT91SAM CDC Demo Application
но винда так подключится и не смогла по сети к линукс машине (но это позже)
Откуда вот эта ошибка ?
ПРИ ЗАПУСКЕ: sudo /etc/init.d/usbipd start
Пишет вот что:
/usr/sbin/usbipd: symbol lookup error: /usr/sbin/usbipd: undefined symbol: stub_driver
При попытке расшарить: sudo usbip bind -b 1-1.3
выдает: usbip: error: could not bind device to usbip-host
даю команду на флешку: usbip —debug bind —busid=2-1.1
получаю:
usbip: debug: usbip.c:135:[run_command] running command: `bind’
usbip: debug: usbip_bind.c:162:[unbind_other] 2-1.1:1.0 -> unknown
usbip: debug: utils.c:65:[modify_match_busid] write «add 2-1.1» to /sys/bus/usb/drivers/usbip-host/match_busid
usbip: debug: usbip_bind.c:101:[bind_usbip] bind driver at 2-1.1:1.0 failed
usbip: error: could not bind device to usbip-host
usbip: debug: utils.c:65:[modify_match_busid] write «del 2-1.1» to /sys/bus/usb/drivers/usbip-host/match_busid
« Последнее редактирование: 12 Октября 2016, 11:39:54 от jester81 »

RW1R
Попробуй пойти по другому пути:
Насколько я понял, в репах лежит битая (или нерабочая) версия usbip. Гуглеж вывел меня вот на это: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/898003, пост № 34. Запустил — работает, во всяком случае ошибок не вылезает, но теперь другая проблема:
Попробуй так. Я сам новичок в линухе, но чем смогу — помогу)
« Последнее редактирование: 13 Октября 2016, 23:12:41 от RW1R »

jester81
Переустановил линуху наново.
Выполнил АПГРЕЙД и АПДЕЙТ системы (пакетов).
Установил СИНАПТИК (установщик пакетов)
С помощью СИНАПТИКА установил linux-tools-generic и linux-tools-3.13.0-24, думал поможет перед установкой USBIP
После этого начал установку USBIP из консоли.
Установил как обычно, начинаю запуск:
sudo /etc/init.d/usbipd start
и получаю ошибку:
usbip err: stub_driver.c: 33 (open_sysfs_stub_driver) usbip_common_mod.ko and usbip.ko must be loaded
** (process:3351): ERROR **: driver open failed
Trace/breakpoint trap (core dumped)
Решаю установить некоторые необходимые вещи (с другого форума прочитал)
apt-get install libncurses5-dev build-essential linux-source dh-autoreconf libsysfs-dev
В папке /usr/src
появляется файл-архив: linux-source-3.13.0.tar.bz2 и рядом папка: linux-source-3.13.0
В папке нет того, что мне надо — распаковываю архив.
В нем есть много чего:
arch
CREDITS
debian.master
dropped.txt
include
Kbuild
lib
Makefile
README
scripts
tools
virt
block
crypto
Documentation
firmware
init
Kconfig
linux-source-3.13.0.tar.bz2
mm
REPORTING-BUGS
security
ubuntu
COPYING
debian
drivers
fs
ipc
kernel
MAINTAINERS
net
samples
sound
usr
Перехожу в папку:
/usr/src/linux-source-3.13.0/drivers/staging/usbip/userspace
вижу файл: autogen.sh
запускаю на выполнение.
Проверяю наличие файла нужного мне (срочно): locate usbip_common_mod.ko — не нашло
Появились новые файлы, среди них появился: configure
Запускаю его тоже на выполнение….
После проверяю — файла «usbip_common_mod.ko» все еще нет.
При запуске службы ошибка осталась та же (((
Делаю:
make
make install
Файла пока нет …..
По совету с инпортного форума сделал:
apt-get install linux-tools-generic-lts-utopic
После этого в папке: /usr/lib/linux-tools/3.16.0-77-generic
нашел файлы: usbip and usbipd
Копирую их вместо старых (находясь в папке /usr/lib/linux-tools/3.16.0-77-generic):
/usr/lib/linux-tools/3.16.0-77-generic# cp usbip /usr/sbin/usbip
(в обе папки, потому как не уверен от куда запуск идет)
/usr/lib/linux-tools/3.16.0-77-generic# cp usbipd /usr/sbin/usbipd
/usr/lib/linux-tools/3.16.0-77-generic# cp usbip /usr/local/sbin/usbip
/usr/lib/linux-tools/3.16.0-77-generic# cp usbipd /usr/local/sbin/usbipd
Запускаю опять злощастную службу ))))
sudo /etc/init.d/usbipd start
ииииииииииииии
КРАСОТИЩА !!!
ЗАПУСТИЛОСЬ )))
Проверяю, есть ли в памяти:
Код
ps aux | grep usbip*
root 6819 0.0 0.1 3000 1616 ? Ss 19:57 0:00 /usr/sbin/usbipd -D
root 6860 0.0 0.1 6164 2012 pts/4 S+ 20:03 0:00 grep —color=auto usbip*
Вау — есть !!!!!!
Типа запустилось ))))
Код
# usbip list -l
usbip: error: failed to open /usr/share/hwdata//usb.ids
- busid 4-1 (093a:2510)
unknown vendor : unknown product (093a:2510)
- busid 1-8 (05e3:0723)
unknown vendor : unknown product (05e3:0723)
ВИДИТ устройства, но не понимает их, пока….
Исправляем это:
Код
mkdir /usr/share/hwdata
cp /var/lib/usbutils/usb.ids /usr/share/hwdata/usb.ids
usbip list -l
- busid 4-1 (093a:2510)
Pixart Imaging, Inc. : Optical Mouse (093a:2510)
- busid 1-8 (05e3:0723)
Genesys Logic, Inc. : GL827L SD/MMC/MS Flash Card Reader (05e3:0723)
Получилось !!!!!
Пробуем расшарить устройство (скрещиваем пальцы)
Код
usbip bind -b 1-8
usbip: info: bind device on busid 1-8: complete
ВАУ — получилось, расшарило без ошибки )))))
Дальше дело за КЛИЕНТОМ.
Клиент стоит на ВИНДОВСЕ, ухожу мучать его )))
Скоро отпишусь
Добавлено через 3 часа 18 минут
WINDOWS 7 x 64
Запускаю командную строку
набираю:
c:USB_IP_2>usbip 192.168.1.5 -l -D
ПОЛУЧАЮ ОТВЕТ:
usbip dbg: usbip_network.c: 236 (tcp_connect ) trying
usbip dbg: usbip_network.c: 256 (tcp_connect ) connect
— 192.168.1.5
usbip dbg: usbip.c: 227 (query_exported_devices)
1-8: Genesys Logic, Inc. : unknown product (05e3:
: /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-
: (Defined at Interface level) (00/00/00)
— Видит расшаренное устройство.
Пробую присоединить к себе под виндой:
c:USB_IP_2>usbip 192.168.1.5 --attach 1-8 -D
usbip dbg: usbip_network.c: 236 (tcp_connect ) trying 192.168.1.5 port 3240
usbip dbg: usbip_network.c: 256 (tcp_connect ) connected to 192.168.1.5:3240
usbip dbg: usbip_windows.c: 837 (query_interface0) exportable 1 devices
usbip dbg: usbip_windows.c: 854 (query_interface0) 1-8: Genesys Logic, Inc.
: unknown product (05e3:0723)
usbip dbg: usbip_windows.c: 855 (query_interface0) : /sys/devices/pci000
0:00/0000:00:1d.7/usb1/1-8
usbip dbg: usbip_windows.c: 856 (query_interface0) : (Defined at Interfa
ce level) (00/00/00)
usbip dbg: usbip_windows.c: 879 (query_interface0)
usbip err: usbip_windows.c: 899 (attach_device) cannot find device
ОБЛОМ ПОКА!!! (ушел рыдать)

RW1R
На стороне сервера порт открыт?

jester81
ДА , порт открыт, файервол отключен
Телнетом с Винды проверял
- Печать
Страницы: [1] Вверх
Содержание
- Настройка USB-сервера Ubuntu на базе usbip
- Установка и запуск
- Настройка клиента
- Автозапуск
- Автозапуск сервера
- Автозапуск клиента Windows
- Возможные проблемы
- 1. usbip_common_mod.ko and usbip.ko must be loaded
- 2. /usr/sbin/usbipd: No such file or directory
- 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
- 4. usbip err . recv op_common
- 5. (attach_device) cannot find device
- 6. udev_device_new_from_subsystem_sysname failed
- Как расшарить USB по сети в Linux
- Usb Network Gate
- Установка Usb Newtork Gate
- Раздача USB устройств по сети
- USBIp
- Установка usbip
- Настройка сервера
Настройка USB-сервера Ubuntu на базе usbip
В инструкции описан процесс настройки бесплатного решения для редиректа 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:
Запускаем usbip в качестве демона:
Смотрим список подключенных USB устройств:
root@usb:/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) и переходим в распакованный каталог, например:
* где C:UsersuserDownloadsusbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
usbip -l 192.168.0.15
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
C:UsersuserDownloadsusbip>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, переходим к решению.
Автозапуск
Данная инструкция предполагала разовый запуск как сервера, так и клиента. После перезапуска системы, работоспособность будет потеряна до повторного ввода команд. Попробуем настроить автоматический запуск сервера и клиента.
Автозапуск сервера
Добавляем модули в автозапуск:
usbip-core
usbip-host
vhci-hcd
Создаем юнит в systemd:
[Service]
ExecStart=/scripts/usbipd
Type=oneshot
RemainAfterExit=yes
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
usbipd -D
usbip bind -b $bindID
usbip attach —remote=localhost —busid=$bindID
sleep 2
usbip detach —port=00
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Автозапуск клиента Windows
Пишем небольшой батник:
cd C:UsersuserDownloadsusbip
usbip.exe -a 192.168.0.15 2-1.3
* C:UsersuserDownloadsusbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Возможные проблемы
1. usbip_common_mod.ko and usbip.ko must be loaded
Ошибка появляется при попытке выполнить usbipd -D.
Причина: был установлен пакет usbip вместо linux-tools- .
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
apt-get install linux-tools-`uname -r`
2. /usr/sbin/usbipd: No such file or directory
Данная ошибка также появляется при попытке выполнить usbipd -D.
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
ln -s /usr/bin/usbipd /usr/sbin/usbipd
Выскакивает при попытке посмотреть список устройств командой usbip list -l.
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
Создаем симлинк на существующий файл:
ln -s /usr/share/misc/usb.ids /usr/share/hwdata/usb.ids
4. usbip err . recv op_common
При попытке запустить утилиту в командной строке Windows получаем ошибки:
usbip err: usbip_network.c: 121 (usbip_recv_op_common) recv op_common, -1
usbip err: usbip.c: 216 (query_exported_devices) recv op_common
usbip err: usbip.c: 288 (show_exported_devices) query
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
5. (attach_device) cannot find device
При попытке монтирования устройства в 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 detach —port=00
6. udev_device_new_from_subsystem_sysname failed
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
и добавляем в файл /etc/modules строку vhci-hcd.
Источник
Как расшарить USB по сети в Linux
Иногда бывает необходимо получить доступ к USB устройству подключенному к одному из компьютеров сети. Это может быть флешка данные из которой нужно скопировать на один из компьютеров или в виртуальную машину или же, как более сложный вариант — usb принтер который нужно сделать доступным по сети для нескольких устройств.
В этой статье мы рассмотрим несколько программ позволяющих реализовать такую возможность. Одной из них будет USB Network Gate. Это платная программа, но она позволяет расшарить устройства usb по сети в Linux очень быстро и просто. У программы удобный графический интерфейс и очень простая настройка. Также рассмотрим свободную альтернативу usbip, с помощью которой можно расшарить usb по сети в терминале. Начнем с коммерческой программы.
Usb Network Gate
Usb Network Gate — это программа от Elitma Software, позволяющая получить доступ к любым USB устройствам подключенным к вашему компьютеру через сеть. При чем это может быть не только локальная сеть но и интернет.
У программы кроме версии для Linux есть версии для Windows, Mac и даже приложение для Android. Лицензия с возможностью передать по сети один USB порт стоит $89.99 но у нее есть пробный период размером 14 дней. После окончанию пробного периода вы не можете расшаривать свои устройства, но зато можете подключать уже розданные.
Установка Usb Newtork Gate
Установка USB Network Gate в Linux выполняется очень просто. Скачать установочный пакет для своего дистрибутива можно на официальном сайте.
Здесь достаточно просто нажать кнопку скачать, а затем выбрать версию для своего дистрибутива:
После завершения загрузки, для установки перейдите в папку с файлом и выполните:
dpkg -i usb_network_gate.deb
rpm -i usb_network_gate.rpm
Для RedHat и других использующих rpm систем. Возможно для работы программы понадобится библиотека libudev.so.0, если такой версии библиотеки нет в вашей системе создайте ссылку на libudev.so.1 следующей командой:
ln -s /usr/lib/libudev.so.1 /usr/lib/libudev.so.0
Раздача USB устройств по сети
Запустить программу можно из главного меню или выполнив в терминале:
Главное окно программы выглядит вот так:
Чтобы расшарить USB устройство по сети достаточно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Share.
В открывшимся окне можно увидеть информацию об устройстве и указать дополнительные настройки, например стоит ли использовать шифрование, сжатие или пароль для аутентификации соединения:
На удаленной машине, чтобы подключить наше устройство, сначала нужно его найти. Для этого перейдите на вкладку Remote USB Devices и нажмите кнопку Find:
В открывшимся окне, если компьютеры находятся в локальной сети можно просто нажать Find All, если же нет нужно указать ip адрес компьютера на котором расшаренно USB устройство, а затем нажать кнопку Find:
Дальше остается только добавить выбранное устройство с помощью кнопку Add remote device.
Чтобы подключить USB просто выберите в контекстном меню опцию Connect:
Дальше вы увидите, что состояние изменилось на Connected, а к системе было подключено новое USB устройство:
Чтобы его отключить просто выберите опцию Disconnect.
USBIp
Это бесплатная утилита с открытым исходным кодом для доступа к USB устройствам по сети. Она во многом проигрывает USB Network Gate, в основном через отсутствие графического интерфейса и сложной настройки.
Установка usbip
Устанавливается программа из официальных репозиториев:
sudo apt install linux-tools-generic
Или для Red Hat:
sudo yum install usbip
Нужно следить чтобы версия программы подходила к вашему ядру, потому что новые версии обычно не совсем совместимы со старыми версиями ядра. Например на данный момент для ядра 4.2 актуальна версия 2.0. Поэтому соблюдайте совместимость и все будет работать, а если не работает вы уже знаете в чем проблема.
Настройка сервера
Загрузим нужные модули ядра:
sudo modprobe usbip-host
sudo modprobe usbip-core
Программа готова к использованию. Теперь с помощью lsusb находим наше устройство:
Bus 002 Device 014: ID 13fe:5500 Kingston Technology Company Inc
Нам нужна пара VendorID:DeviceID, вот она: 13fe:5500. Теперь выполните:
sudo usbip list -l
— busid 2-2 (13fe:5500)
2-2:1.0 -> usb-storage
— busid 4-1 (0458:0708)
4-1:1.0 -> usbhid
4-1:1.1 -> usbhid
— busid 4-3 (09da:9090)
4-3:1.0 -> usbhid
4-3:1.1 -> usbhid
Программа просканирует все подключенные устройства и покажет и в нужном формате, вместе с их busid. Опция -l указывает что нужно сканировать локальные устройства. Как видите наше USB устройство первое в списке.
Теперь, когда мы знаем busid можно расшарить USB устройство по сети в Linux:
usbip bind -b 2-2
usbip: info: bind device on busid 2-2: complete
Готово, наше USB устройство расшарено, осталось подключить его на клиентской машине. Смотрим список доступных устройств:
sudo usbip list -r 192.168.56.1
Exportable USB devices
======================
— 192.168.56.1
2-2: Kingston Technology Company Inc. : unknown product (13fe:5500)
: /sys/devices/pci0000:00/0000:00:13.2/usb2/2-1
: (Defined at Interface level) (00/00/00)
После -r нужно указать ваш IP адрес. Осталось подключить наше устройство:
sudo usbip attach -r 192.168.56.1 -b 2-2
Чтобы отключить устройство нужно сначала узнать его порт:
sudo usbip port
sudo usbip detach 00
И прекращаем шаринг устройства по сети на сервере:
sudo usbip unbind -b 2-2
Вот и все. Как видите работать с консольной программой намного сложнее, но для тех кто не хочет тратить деньги на лицензию, она станет отличным решением. Теперь вы сможете без проблем например расшарить принтер по сети в Linux или любое другое USB устройство не зависимо от используемого дистрибутива.
Источник
Данный проект позволяет пробросить usb устройства через сеть ethernet. Установку USB/IP производил на ubuntu-server 16.04(14.04) lts. Данной темой пришлось озадачиться т.к приходится пробрасывать usb ключи (eToken) и другие устройства в виртуальные машины у которых нет физических подключений. Можно пробросить usb устройство используя средства виртуализации, в kvm проброс USB это можно сделать так, но тогда возникает вопрос. Как делать живую миграцию виртуальной машины между серверами? Установив USB/IP решил все эти задачи.
Установка usbp/ip на сервере
Все бинарные файлы и модули входят в пакет linux-tools, вот его и поставим.
Сначала посмотрим информацию о нашем установленном ядре uname -r, а потом ставим linux-tools-X.XX
для ubuntu-server 14.04 lts
sudo uname -r 3.19.0-59-generic sudo apt-get install linux-tools-3.19.0-59-generic
Все необходимые бинарные файлы для запуска будут находится в /usr/lib/linux-tools/3.19.0-59-generic/ usbip и usbipd
После установки необходимо подгрузить модули и запустить сервер командой:
usbipd -D
sudo modprobe usbip-core sudo modprobe usbip-host
Не забудьте добавить загрузку модулей в файл /etc/modules
Запускаем сервер usbipd
sudo usbipd -D
Если при запуске usbipd -D получили ошибку:
$ sudo usbipd -D usbip err: stub_driver.c: 33 (open_sysfs_stub_driver) usbip_common_mod.ko and usbip.ko must be loaded ** (process:11490): ERROR **: driver open failed
Скорее всего вы по ошибке инсталировали пакет apt-get install usbip. Удалите его и поставьте linux-tools…
С установкой и запуском серверной части все. Теперь необходимо раздать в доступ usb устройства подключенные к данному серверу (192.168.10.200).
Посмотреть список usb устройств: usbip list -l, --local (Список локальных USB устройств) usbip list -r, --remote=<host> (Список расшариных USB устройств на удаленном хосте) Подключить usb устройство для раздачи по сети usbip bind -b, --busid=<busid> Обратное действие для bind — unbind отключить устройство. usbip unbind -b, --busid=<busid>
Пример:
admin@srv1404:~#sudo usbip list -l usbip: error: failed to open /usr/share/hwdata//usb.ids - busid 4-1 (0529:0620) unknown vendor : unknown product (0529:0620) - busid 5-1 (046b:ff10) unknown vendor : unknown product (046b:ff10) admin@srv1404:~# sudo usbip bind --busid=4-1 usbip: info: bind device on busid 4-1: complete
usbip bind — необходимо выполнять для каждого устройства
Посмотреть расшариные usb устройства можно следующей командой:
admin@srv1404:~#sudo usbip list -r localhost usbip: error: failed to open /usr/share/hwdata//usb.ids Exportable USB devices ====================== - localhost 4-1: unknown vendor : unknown product (0529:0620) : /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1 : (Defined at Interface level) (00/00/00) : 0 - unknown class / unknown subclass / unknown protocol (0b/00/00)
Настраиваем клиентскую часть usb/ip
Установка ни чем не отличается от серверной части. Устанавливаем тот же пакет linux-tools.X-XX-….
Подгружаем модули: usbip-core и usbip-host
Смотрим доступные usb устройства на удаленном сервере:
sudo usbip list -r 192.168.10.200 usbip: error: failed to open /usr/share/hwdata//usb.ids Exportable USB devices ====================== - 192.168.10.200 4-1: unknown vendor : unknown product (0529:0620) : /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1 : (Defined at Interface level) (00/00/00) : 0 - unknown class / unknown subclass / unknown protocol (0b/00/00)
Подключаем устройство:
admin@client1404:~#sudo usbip attach -r 192.168.10.200 --busid=4-1 admin@client1404:~#
Если получили ошибку:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Мы забыли подключить модуль vhci-hcd
sudo modprobe vhci-hcd
Вот теперь все должно сработать без ошибок. Не забудьте подгрузить все необходимые модули на клиенте в /etc/modules
usbip-core
usbip-host
vhci-hcd
Нюансы при работе с usb/ip
В процессе эксплуатации выяснились следующе моменты. Если клиентскую машину перегрузить или выключить, то подключение usb устройства командой usbip attach -r 192.168.10.200 —busid=4-1 может завершится ошибкой:
usbip: error: recv op_common usbip: error: query
Но при этом если посмотреть с клиентской машины доступные usb устройства на сервере, то все usb видятся прекрасно. Видимо серверная часть хранит информацию о подключенных клиентах.
В качестве решения этой проблемы необходимо на сервере отключить usb устройство и заново расшарить. Делается примерно так.
sudo usbip list -r localhost usbip: error: failed to open /usr/share/hwdata//usb.ids Exportable USB devices ====================== - localhost 4-1: unknown vendor : unknown product (0529:0620) : /sys/devices/pci0000:00/0000:00:1a.1/usb4/4-1 : (Defined at Interface level) (00/00/00) : 0 - unknown class / unknown subclass / unknown protocol (0b/00/00) sudo usbip unbind --busid=4-1 usbip: info: unbind device on busid 4-1: complete sudo usbip bind -b 4-1 usbip: info: bind device on busid 4-1: complete
Поэтому преждем чем перегружать или выключать клиентскую машину необходимо сначала отключать usb.
1. Смотрим на каком порту подключен usb
admin@client1404:~# /usr/lib/linux-tools/3.19.0-64-generic/usbip port Imported USB devices ==================== Port 00: at Full Speed(12Mbps) unknown vendor : unknown product (0529:0620) 2-1 -> usbip://192.168.10.200:3240/4-1 -> remote bus/dev 004/003
2. Отключаем устройство
sudo usbip detach -p 00
Все теперь можно перегружать, выключать и т. д. это все можно автоматизировать создав исполняемый файл положив в /etc/init.d/. update-rc.d — в помощь.
В моей сети нет необходимости пробрасывать usb на клиентскую машину с windows. Но судя по отзывам пользователей в интернете тоже все работает.
Содержание
- Установка и настройка usb-redirector-linux в CentOS
- Подготовка сервера
- Настройка сервера
- Проброс USB устройства
- Настройка клиента
- Настройка USB-сервера Ubuntu на базе usbip
- Установка и запуск
- Настройка клиента
- Автозапуск
- Автозапуск сервера
- Автозапуск клиента Windows
- Возможные проблемы
- 1. usbip_common_mod.ko and usbip.ko must be loaded
- 2. /usr/sbin/usbipd: No such file or directory
- 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
- 5. (attach_device) cannot find device
- 6. udev_device_new_from_subsystem_sysname failed
- Проброс USB устройств по сети при помощи USBIP
- Установка Linux
- Установка сервера USBIP
- Установка USBIP клиента под Windows
- Подключаем удаленное USB устройство
- Пробрасываем USB–ключ в облако (Linux клиент — Linux сервер)
- Установка и настройка USB Redirector на сервере с подключенным ключом USB
- Установка клиента USB Redirector в облаке
- Как расшарить USB по сети в Linux
- Usb Network Gate
- Установка Usb Newtork Gate
- Раздача USB устройств по сети
- USBIp
- Установка usbip
- Настройка сервера
Установка и настройка usb-redirector-linux в CentOS
В статье пойдет речь о настройке сервера для сетевой передачи устройства USB на другой компьютер. Подобная конструкция, как правило, необходима для проброса различных USB-ключей на виртуальные машины. Серверная часть будет настраиваться на базе Linux CentOS 7, клиентская — Windows. В качестве серверного ПО будем использовать usb-redirector-linux. Внимание — данный продукт нельзя использовать бесплатно, если раздача USB устройства идет с сервера Linux. В большей степени, инструкция предназначена для тех, кто планирует купить данных продукт.
Подготовка сервера
Для корректной установки программы, необходимо обновить систему:
После сервер необходимо перезагрузить:
Настройка сервера
usb-redirector-linux собирается из исходников. Для начала ставим пакеты, необходимые для сборки:
yum install wget gcc kernel-devel
Переходим на страницу загрузки программы и копируем ссылку на ее скачивание:
Используя ссылку, скачиваем исходник на сервер:
Распаковываем скачанный архив и переходим в каталог исходников модулей:
Собираем исходник с указанием исходника ядра:
* каталог 3.10.0-862.3.3.el7.x86_64, скорее всего, будет другим — это зависит от версии ядра.
Возвращаемся в корень каталога, который появился после распаковывания архива:
Устанавливаем usb-redirector следующей командой:
Проброс USB устройства
Переходим в каталог, куда была установлена программа:
Отображаем список подключенных USB устройств:
Получим что-то на подобие:
================= USB SERVER OPERATION SUCCESSFUL ===============
List of local USB devices:
1: USB Keyboard SIGMACHIP Composite USB Device
Vid: 1c4f Pid: 0026 Port: 2-1.4
Status: plugged
2: ET99 Token OEM USB Human Interface Device
Vid: 096e Pid: 0303 Port: 2-1.3
Status: plugged
Чтобы расшарить токен ET99, вводим:
Настройка клиента
Заходим на страницу загрузки USB Redirector и скачиваем клиентскую часть — в нашем случае для Windows:
Скачанный архив распаковываем и запускаем установщик. Отвечаем на все вопросы мастера нажатием Далее.
Появится список расшаренных устройств — просто нажимаем правой кнопкой мыши на необходимый и кликаем Connect USB Device.
Источник
Настройка USB-сервера Ubuntu на базе usbip
В инструкции описан процесс настройки бесплатного решения для редиректа USB устройства с сервера на любой другой компьютер сети. Это может пригодиться, например, для проброса USB токена на виртуальную машину или несетевого принтера. В рамках примера сервер будет на Linux Ubuntu, клиент — на Windows (проверено на 7, 10, Server 2008 и 2012).
Установка и запуск
В Ubuntu установка инструмента проброса USB выполняется следующей командой:
* в моем случае была выполнена установка linux-tools-4.4.0-128-generic, где 4.4.0-128-generic — версия ядра, используемого в Ubuntu.
Подгружаем модули драйверов USB:
Запускаем usbip в качестве демона:
Смотрим список подключенных USB устройств:
— busid 2-1.4 (1c4f:0026)
SiGma Micro : Keyboard (1c4f:0026)
Теперь можно расшарить флешку:
Должны увидеть на подобие:
usbip: info: bind device on busid 2-1.3: complete
Настройка клиента
Выполним настройку на базе операционной системы Windows.
Скачиваем драйвер и утилиту для Windows. Распаковываем архив usbip.zip.
Теперь открываем командную строку (cmd.exe) и переходим в распакованный каталог, например:
* где C:UsersuserDownloadsusbip — полный путь до папки.
Смотрим список расшаренных USB устройств на сервере:
* где 192.168.0.15 — IP-адрес сервера USB.
Мы получим ответ, на подобие этого:
Теперь можно примонтировать устройство:
* если увидим ошибку . cannot find device, переходим к решению.
Автозапуск
Данная инструкция предполагала разовый запуск как сервера, так и клиента. После перезапуска системы, работоспособность будет потеряна до повторного ввода команд. Попробуем настроить автоматический запуск сервера и клиента.
Автозапуск сервера
Добавляем модули в автозапуск:
usbip-core
usbip-host
vhci-hcd
Создаем юнит в systemd:
[Service]
ExecStart=/scripts/usbipd
Type=oneshot
RemainAfterExit=yes
Перечитываем конфигурацию systemd и разрешаем запуск созданного нами юнита:
systemctl enable usbipd
Создаем каталог хранения скрипта и сам скрипт:
Разрешаем запуск скрипта:
chmod +x /scripts/usbipd
systemctl start usbipd
systemctl status usbipd
Для окончательного тестирования можно перезагрузить сервер.
Автозапуск клиента Windows
Пишем небольшой батник:
* C:UsersuserDownloadsusbip — путь, где хранится распакованная утилита; 192.168.0.15 — адрес сервера USB; 2-1.3 — идентификатор USB устройства на сервере.
Сохраняем скрипт с расширением bat или cmd. Запускаем планировщик заданий и добавляем новую задачу.
На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:
В триггерах выбираем При запуске системы:
На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:
На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:
Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.
Возможные проблемы
1. usbip_common_mod.ko and usbip.ko must be loaded
Решение: удаляем usbip:
apt-get remove usbip
Ставим нужный пакет:
2. /usr/sbin/usbipd: No such file or directory
Причина: Нужный бинарник для запуска находится по другому пути — /usr/bin/usbipd.
Решение: создаем симлинк:
Причина: необходимый файл usb.ids находится в другой директории.
Решение: создаем каталог /usr/share/hwdata:
Создаем симлинк на существующий файл:
При попытке запустить утилиту в командной строке Windows получаем ошибки:
Причина: ошибка в бинарном файле для Windows.
Решение: открыть exe-файл в HEX редакторе, например, HxD. И в адресах смещения 00000CBC и 00000E0A заменить 06 на 11:
5. (attach_device) cannot find device
При попытке монтирования устройства в Windows, выскакивает ошибка с похожим текстом:
usbip err: usbip_windows.c: 829 (attach_device) cannot find device
Причина: недоработка серверного ПО — при расшаривании USB не считывается количество дескрипторов.
Решение: примонтировать устройство на сервере с последующим отмонтированием:
* в моем случае устройство имеет идентификатор 2-1.3.
* смотрим номер порта, на котором висит наше примонтированное устройство.
6. udev_device_new_from_subsystem_sysname failed
При попытке монтирования устройства на клиенте получаем ошибку с текстом:
libusbip: error: udev_device_new_from_subsystem_sysname failed
usbip: error: open vhci_driver
usbip: error: query
Причина: не подключен модуль vhci-hcd.
Решение: разово выполняем команду:
и добавляем в файл /etc/modules строку vhci-hcd.
Источник
Проброс USB устройств по сети при помощи USBIP
В процессе переезда серверов нашей компании в облачную инфрастуктуру провайдера, возникла необходимость найти способ проброса USB устройств по сети. Для работы некоторых программ используются USB ключи защиты, заменить которые на программные нельзя, подключить свои ключи у провайдера также не представляется возможным, поэтому ключи будут устанавливаться в офисе, а сервера будут получать к ним доступ по сети при помощи технологии проброса USB устройств по сети.
Итак, давайте рассмотрим по порядку процесс настройки и проброса USB устройств по сети при помощи USBIP.
Установка Linux
Для настройки серверной части USBIP, понадобится установить Linux. Разработчики проекта ограничились написанием серверной части только для Linux. Клиентская часть есть как для Linux, так и для Windows.
В даной статье я буду устанавливать Debian 7.9, так как после долгих разбирательств удалось получить рабочее решение на базе Дебиана, а дальше тратить время не было возможности, потому остановился на том что есть. Рассказывать как устанавливать Linux не буду, есели вы интересуетесь вопросом проброса USB устройств по сети на базе USBIP, процедура установки Linux должна быть для вас также прозрачна. В случае, если ищете решение, устанавливаемое нажатием пары кнопок мыши, следует повернуть свой взор в сторону платных продуктов, но там уже нужно платить денежки.
Установка сервера USBIP
Обновляем систему, устанавливаем пакет USBIP и загружаем модули ядра, необходимые для работы программы:
Теперь, нужно сделать так, чтоб эти модули загружаилсь при старте системы. В файл /etc/modules и добавьте две строчки, по одной для каждого загружаемого модуля:
Для того, чтоб после запуска системы сервер USBIP стартовал автоматом, нужно добавить init.d скрипт. Для этого скопируйте файл /etc/init.d/skeleton:
Далее отредактируйте файл /etc/init.d/usbipd, поменяйте параметры описание, имя демона и аргументы, как приведено ниже:
Сделайте файл исполняемым:
Ну и на последок запустите команду update-rc.d, после чего usbip готов для атоматического запуска. Запускаем программу:
Если нет ошибок, то все настроено правильно и сервер готов расшаривать USB девайсы
Если устройств перечислено несколько, определите какое именно устройство вам нужно проброить по сети и запомите его идентификатор, в моем случае, мне нужно пробросить устройство с идентификатором 1-4. Далее, выполняем команду:
Если на вашем компьютере настроена фильтрация пакетов, то добавьте порт 3240 в разрешенные для подключения извне:
Установка USBIP клиента под Windows
Откройте странцу USBIP на сайте Sourceforge, и загрузите клиент USBIP последней версии. Распакуйте содержимое архива, например в папку c:usbip
Установка драйвера.
Откройте диспетчер устройств, выберите корневой элемент дерева, нажмите правой кнопкой мыши и в контекстном меню выберите пункт Установить старое устройство.
Первый шаг пропускаем
На втором шаге устанавливаем радио переключатель в положение Установка оборудования, выбранного из списка вручную
Следующий шаг пропускаем, просто нажимаем Далее
На следующем шаге нажимаем кнопку Установить с диска, выбираем файл драйвера устройства USBIPEnum.inf.
В итоге видим драйвер USB/IP Enumerator, выбираем его и нажимаем кнопку Далее
Соглашаемся с предложением установить новое оборудование и нажимаем кнопку Далее.
На вопрос об установке программного обеспечения отвечаем утвердительно, дожидаемся завершения работы мастера, и нажимем кнопку Готово.
В Диспетчере устройств появилось новое системное устройство USB/IP Enumerator.
После установки драйвера, нужно загрузить еще один архивчик. Я столкнулся с проблемой, что при попытке подключения к серверу, выдается ошибка, сообщающая об отличии версий клиента и сервера. В процессе поиска решения проблемы, вот здесь на форуме, я нашел что один хороших человек выложил ссылку на архив, в котором лежит скомпилированный usbip.exe правильной версии, подключаясь с помощью которого к серверу никаких ошибок не выдается.
Может со временем, если дойдут руки, я попробую сам скомпилировать загруженный проект, но сейчас времени нет разбираться со всеми зависимостями и буду пользоваться тем что есть.
Подключаем удаленное USB устройство
Открываем командную строку, устанавливаем текущей директорию, c:usbip. Если выполнить команду без параметров, будет выведена справка.
После непродолжительного ожидания (все-таки подключение производится не к локальному девайсу, а проброшенному через сеть), система запустит мастер установки драйверов оборудования. В конце сообщит вам об успешной установке устройства.
В результате устройство будет отображено у вас в системе и с ним можно работать как с обычным локальным устройством.
Источник
Пробрасываем USB–ключ в облако (Linux клиент — Linux сервер)
Заказчику потребовалось подключить USB–ключ для банковской системы к Linux–серверу в облаке, где он разворачивает свой разработанный продукт. Напрямую подключить USB–ключ к виртуальной машине нельзя — она работает в отказоустойчивом кластере и может быть смигрирована на любой из хост-серверов без даунтайма.
Давайте посмотрим, как реализовать проброс USB–ключа по сети в виртуальную машину с Linux в облаке Azure Pack Infrastructure от InfoboxCloud.
Раз подключить ключ к виртуальной машине нельзя — его нужно подключить к чему-то реальному. Есть аппаратные решения, например AnyWhere USB, но заказчик выбрал более универсальное решение: выделенный сервер в ЦОД Infobox (что для одного ключа получилось дешевле — аппаратные требования к выделенному серверу для такой задачи минимальны — можно использовать самый дешевый сервер с софтовым Raid).
Для проброса использовалось ПО USB Redirector (версия для Linux бесплатна). На выделенный сервер и в виртуальную машину в облаке была установлена Ubuntu 16.04 LTS и были применены все обновления.
Для установки USB Redirector потребуются исходные тексты ядра, установите их:
Теперь необходимо отключить обновления ядра ОС, так как они могут сломать работу USB Redirector (служба проброса после обновления ядра не будет запускаться до переустановки), если необходимо — их можно устанавливать вручную переустанавливая USB Redirector.
Установка и настройка USB Redirector на сервере с подключенным ключом USB
Скачайте USB Redirector:
Перейдите в папку с ним:
Разрешите запуск инсталлятора:
Если все прошло корректно, вы увидите сообщение об этом.
Добавьте службу проброса в автозагрузку, если ранее этого не произошло:
Подключив USB–ключ к выделенному серверу проверим какие USB–устройства доступны:
Есть 2 варианта расшарить устройство по сети.
В этом случае мы привязываемся к конкретному id устройства и порту, если включить usb-ключ в другой порт сервера — номер usb порта сменится и работать не будет.
В этом случае мы привязываемся только к id устройства. Теперь USB–устройство расшарено по сети.
Конечно делать его доступным для всех пользователей Интернет не правильно, поэтому добавим ограничения в firewall:
Где вместо *.*.*.* нужно написать адрес сервера, с которого разрешено подключение.
Установка клиента USB Redirector в облаке
Скачайте USB Redirector:
Перейдите в папку с ним:
Разрешите запуск инсталлятора:
Если все прошло корректно, вы увидите сообщение об этом.
Добавьте службу проброса в автозагрузку, если ранее этого не произошло:
Теперь добавим наш сервер:
Где вместо **.**.**.** нужно указать ip–адрес сервера.
Теперь можно посмотреть список доступных устройств:
Видим, что на сервере 1 доступно устройство 1.
Включаем автоматическое соединение с устройством:
USB–ключ был успешно проброшен в виртуальную машину в облаке.
Источник
Как расшарить USB по сети в Linux
В этой статье мы рассмотрим несколько программ позволяющих реализовать такую возможность. Одной из них будет USB Network Gate. Это платная программа, но она позволяет расшарить устройства usb по сети в Linux очень быстро и просто. У программы удобный графический интерфейс и очень простая настройка. Также рассмотрим свободную альтернативу usbip, с помощью которой можно расшарить usb по сети в терминале. Начнем с коммерческой программы.
Usb Network Gate
Установка Usb Newtork Gate
Установка USB Network Gate в Linux выполняется очень просто. Скачать установочный пакет для своего дистрибутива можно на официальном сайте.
Здесь достаточно просто нажать кнопку скачать, а затем выбрать версию для своего дистрибутива:
После завершения загрузки, для установки перейдите в папку с файлом и выполните:
Для RedHat и других использующих rpm систем. Возможно для работы программы понадобится библиотека libudev.so.0, если такой версии библиотеки нет в вашей системе создайте ссылку на libudev.so.1 следующей командой:
Раздача USB устройств по сети
Запустить программу можно из главного меню или выполнив в терминале:
Главное окно программы выглядит вот так:
Чтобы расшарить USB устройство по сети достаточно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Share.
В открывшимся окне можно увидеть информацию об устройстве и указать дополнительные настройки, например стоит ли использовать шифрование, сжатие или пароль для аутентификации соединения:
На удаленной машине, чтобы подключить наше устройство, сначала нужно его найти. Для этого перейдите на вкладку Remote USB Devices и нажмите кнопку Find:
В открывшимся окне, если компьютеры находятся в локальной сети можно просто нажать Find All, если же нет нужно указать ip адрес компьютера на котором расшаренно USB устройство, а затем нажать кнопку Find:
Дальше остается только добавить выбранное устройство с помощью кнопку Add remote device.
Чтобы подключить USB просто выберите в контекстном меню опцию Connect:
Дальше вы увидите, что состояние изменилось на Connected, а к системе было подключено новое USB устройство:
Чтобы его отключить просто выберите опцию Disconnect.
USBIp
Это бесплатная утилита с открытым исходным кодом для доступа к USB устройствам по сети. Она во многом проигрывает USB Network Gate, в основном через отсутствие графического интерфейса и сложной настройки.
Установка usbip
Устанавливается программа из официальных репозиториев:
sudo apt install linux-tools-generic
sudo yum install usbip
Нужно следить чтобы версия программы подходила к вашему ядру, потому что новые версии обычно не совсем совместимы со старыми версиями ядра. Например на данный момент для ядра 4.2 актуальна версия 2.0. Поэтому соблюдайте совместимость и все будет работать, а если не работает вы уже знаете в чем проблема.
Настройка сервера
Загрузим нужные модули ядра:
sudo modprobe usbip-host
sudo modprobe usbip-core
Программа готова к использованию. Теперь с помощью lsusb находим наше устройство:
Bus 002 Device 014: ID 13fe:5500 Kingston Technology Company Inc
Нам нужна пара VendorID:DeviceID, вот она: 13fe:5500. Теперь выполните:
Теперь, когда мы знаем busid можно расшарить USB устройство по сети в Linux:
usbip: info: bind device on busid 2-2: complete
Готово, наше USB устройство расшарено, осталось подключить его на клиентской машине. Смотрим список доступных устройств:
Exportable USB devices
======================
— 192.168.56.1
2-2: Kingston Technology Company Inc. : unknown product (13fe:5500)
: /sys/devices/pci0000:00/0000:00:13.2/usb2/2-1
: (Defined at Interface level) (00/00/00)
После -r нужно указать ваш IP адрес. Осталось подключить наше устройство:
Чтобы отключить устройство нужно сначала узнать его порт:
sudo usbip detach 00
И прекращаем шаринг устройства по сети на сервере:
Вот и все. Как видите работать с консольной программой намного сложнее, но для тех кто не хочет тратить деньги на лицензию, она станет отличным решением. Теперь вы сможете без проблем например расшарить принтер по сети в Linux или любое другое USB устройство не зависимо от используемого дистрибутива.
Источник
I want to use the webcam of my Laptop as if it would be connected to my pc.
Specs: Ubuntu Mate 18.04 Kernel Client: 5.3.0-46-generic Kernel Server: 4.15.0-96-generic USBIP Version: 4.15.0-96-generic
These are the Error Messages.
usbip port
usbip: error: failed to open /usr/share/hwdata//usb.ids usbip: error: open vhci_driver usbip: error: list imported devices
This is what happen,when i attach the device:
sudo usbip —debug attach -r 192.168.2.22 -b 1-1.6
usbip: debug: usbip.c:129:[run_command] running command: `attach' libusbip: debug: vhci_driver.c:269:[usbip_vhci_driver_open] available ports: 16 libusbip: debug: vhci_driver.c:281:[usbip_vhci_driver_open] available controllers: 1 libusbip: debug: vhci_driver.c:128:[refresh_imported_device_list] controller 0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 0 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 1 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 2 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 3 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 4 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 5 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 6 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub hs port 7 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 8 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 9 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 10 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 11 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 12 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 13 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 14 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:68:[parse_status] hub ss port 15 status 4 speed 0 devid 0 libusbip: debug: vhci_driver.c:69:[parse_status] sockfd 0 lbusid 0-0 libusbip: debug: vhci_driver.c:104:[parse_status] exit usbip: debug: usbip_attach.c:100:[import_device] got free port 0 libusbip: debug: vhci_driver.c:367:[usbip_vhci_attach_device2] writing: 0 3 65540 3 libusbip: debug: vhci_driver.c:372:[usbip_vhci_attach_device2] attach attribute path: /sys/devices/platform/vhci_hcd.0/attach libusbip: debug: vhci_driver.c:380:[usbip_vhci_attach_device2] attached port: 0
/var/log/syslog client
Apr 8 12:42:32 client kernel: [ 7376.482998] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3) Apr 8 12:42:32 client kernel: [ 7376.483003] vhci_hcd vhci_hcd.0: devid(65540) speed(3) speed_str(high-speed) Apr 8 12:42:32 client kernel: [ 7376.726204] usb 5-1: new high-speed USB device number 18 using vhci_hcd Apr 8 12:42:32 client kernel: [ 7376.726212] usb 5-1: SetAddress Request (18) to port 0 Apr 8 12:42:32 client kernel: [ 7376.803460] usb 5-1: device descriptor read/8, error -71 Apr 8 12:42:32 client kernel: [ 7377.002279] usb 5-1: device descriptor read/8, error -71 Apr 8 12:42:33 client kernel: [ 7378.010236] usb usb5-port1: Cannot enable. Maybe the USB cable is bad? Apr 8 12:42:33 client kernel: [ 7378.010253] usb usb5-port1: attempt power cycle Apr 8 12:42:34 client kernel: [ 7379.234242] usb usb5-port1: Cannot enable. Maybe the USB cable is bad? Apr 8 12:42:35 client kernel: [ 7380.138258] usb usb5-port1: Cannot enable. Maybe the USB cable is bad? Apr 8 12:42:35 client kernel: [ 7380.138276] usb usb5-port1: unable to enumerate USB device
/var/log/syslog server
Apr 8 12:42:32 server usbipd: usbipd: info: connection from 192.168.2.20:34330 Apr 8 12:42:32 server usbipd: usbipd: info: received request: 0x8003(6) Apr 8 12:42:32 server usbipd: usbipd: info: found requested device: 1-1.6 Apr 8 12:42:32 server usbipd: usbip: info: connect: 1-1.6 Apr 8 12:42:32 server usbipd: usbipd: info: request 0x8003(6): complete Apr 8 12:42:32 server kernel: [ 9504.400594] usbip-host 1-1.6: stub up Apr 8 12:42:32 server kernel: [ 9504.710050] usbip-host 1-1.6: urb completion with non-zero status -71 Apr 8 12:42:32 server kernel: [ 9504.716793] usbip-host 1-1.6: urb completion with non-zero status -71 Apr 8 12:42:32 server kernel: [ 9504.722043] usbip-host 1-1.6: urb completion with non-zero status -71 Apr 8 12:42:32 server kernel: [ 9504.909299] usbip-host 1-1.6: urb completion with non-zero status -71 Apr 8 12:42:32 server kernel: [ 9504.915669] usbip-host 1-1.6: urb completion with non-zero status -71 Apr 8 12:42:32 server kernel: [ 9504.920794] usbip-host 1-1.6: urb completion with non-zero status -71
USBIP is a Linux tool for accessing USB devices across a network. I’m trying it out.
At one end of the room, I have a Raspberry Pi with
- A Philips USB Webcam
- A no-name USB GPS dongle
- A Nortek USB Z-Wave/Zigbee network controller dongle
At the other end of the room is my laptop.
Before starting anything, I plugged all three into another system to ensure that they worked properly.
Raspberry Pi Server Setup
The Pi is running stock Raspbian Buster, with the default «pi» user replaced by a new user («me») with proper ssh keys.
Before we start, here’s what the ‘lsusb’ looks like on the Pi
me@pi:~ $ lsusb Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Now we plug in the three USB devices and see what changed
me@pi:~ $ lsusb Bus 001 Device 004: ID 10c4:8a2a Cygnal Integrated Products, Inc. Bus 001 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 006: ID 0471:0329 Philips (or NXP) SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
And here are the new devices created or modified
me@pi:~ $ ls -l /dev | grep 12 // 12 is today's date drwxr-xr-x 4 root root 80 Aug 12 00:46 serial lrwxrwxrwx 1 root root 7 Aug 12 00:46 serial0 -> ttyAMA0 drwxr-xr-x 4 root root 220 Aug 12 00:47 snd crw--w---- 1 root tty 204, 64 Aug 12 00:46 ttyAMA0 crw-rw---- 1 root dialout 188, 0 Aug 12 00:46 ttyUSB0 drwxr-xr-x 4 root root 80 Aug 12 00:47 v4l crw-rw---- 1 root video 81, 3 Aug 12 00:47 video0
Looks like…
- /dev/ttyAMA0 is the Nortek Z-Wave controller
- /dev/ttyUSB0 is the GPS stick
- /dev/video0 is the webcam
Installing USBIP onto Raspbian Buster is easy. However, it is DIFFERENT from stock Debian or Ubuntu. This step is Raspbian-only
me@pi:~$ sudo apt install usbip
Now load the kernel module. The SERVER always uses the module ‘usbip_host’.
me@pi:~$ sudo modprobe usbip_host // does not persist across reboot
List the devices the usbip can see. Note each Bus ID — we’ll need those later
me@pi:~ $ usbip list --local - busid 1-1.1 (0424:ec00) Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00) - busid 1-1.2 (0471:0329) Philips (or NXP) : SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) (0471:0329) - busid 1-1.4 (067b:2303) Prolific Technology, Inc. : PL2303 Serial Port (067b:2303) - busid 1-1.5 (10c4:8a2a) Cygnal Integrated Products, Inc. : unknown product (10c4:8a2a)
- We can ignore the Ethernet adapter
- The Webcam is at 1-1.2
- The GPS dongle is at 1-1.4
- The Z-Wave Controller is at 1-1.5
Bind the devices.
me@pi:~$ sudo usbip bind --busid=1-1.2 // does not persist across reboot usbip: info: bind device on busid 1-1.2: complete me@pi:~$ sudo usbip bind --busid=1-1.4 // does not persist across reboot usbip: info: bind device on busid 1-1.4: complete me@pi:~$ sudo usbip bind --busid=1-1.5 // does not persist across reboot usbip: info: bind device on busid 1-1.5: complete
The USB dongle will now appear to any client on the network just as though it was plugged in locally.
If you want to STOP serving a USB device:
me@pi:~$ sudo usbip unbind --busid=1-1.2
The server (usbipd) process may or may not actually be running, serving on port 3240. Let’s check:
me@pi:~ $ ps -e | grep usbipd 18966 ? 00:00:00 usbipd me@:~ $ sudo netstat -tulpn | grep 3240 tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN 18966/usbipd tcp6 0 0 :::3240 :::* LISTEN 18966/usbipd
We know that usbipd is active and listening. If not, start usbipd with:
me@:~ $ sudo usbipd -D
You can run it more than one; only one daemon will start. The usbipd server does NOT need to be running to bind/unbind USB devices — you can start the server and bind/unbind in any order you wish. If you need to debug a connection, omit the -D (daemonize; fork into the background) so you can see the debug messages. See ‘man usbipd’ for the startup options to change port, IPv4, IPv6, etc.
Laptop Client Setup
Let’s look at the USB devices on my laptop before starting:
me@laptop:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 04f2:b56c Chicony Electronics Co., Ltd Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
In stock Debian (not Raspbian) and Ubuntu, usbip is NOT a separate package. It’s included in the ‘linux-tools-generic’ package, which many folks already have installed…
me@laptop:~$ apt list linux-tools-generic Listing... Done linux-tools-generic/disco-updates 5.0.0.23.24 amd64 // Doesn't say "[installed]"
…but apparently I don’t. Let’s install it.
me@laptop:~$ sudo apt install linux-tools-generic
Now load the kernel module. The CLIENT always uses the kernel module ‘vhci-hcd’.
me@laptop:~$ sudo modprobe vhci-hcd // does not persist across reboot
List the available USB devices on the Pi server (IP addr aa.bb.cc.dd). Those Bus IDs should look familiar.
me@laptop:~$ usbip list -r aa.bb.cc.dd // List available on the IP address usbip: error: failed to open /usr/share/hwdata//usb.ids // Ignore this error Exportable USB devices ====================== - aa.bb.cc.dd 1-1.5: unknown vendor : unknown product (10c4:8a2a) : /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5 : (Defined at Interface level) (00/00/00) : 0 - unknown class / unknown subclass / unknown protocol (ff/00/00) : 1 - unknown class / unknown subclass / unknown protocol (ff/00/00) 1-1.4: unknown vendor : unknown product (067b:2303) : /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4 : (Defined at Interface level) (00/00/00) 1-1.2: unknown vendor : unknown product (0471:0329) : /sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2 : (Defined at Interface level) (00/00/00)
Now we attach the three USB devices. This will not persist across a reboot.
me@laptop:~$ sudo usbip attach --remote=aa.bb.cc.dd --busid=1-1.2 me@desktop:~$ sudo usbip attach --remote=aa.bb.cc.dd --busid=1-1.4 me@desktop:~$ sudo usbip attach --remote=aa.bb.cc.dd --busid=1-1.5 // No feedback upon success
The remote USB devices now show in ‘lsusb’
me@laptop:~$ lsusb Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 10c4:8a2a Cygnal Integrated Products, Inc. Bus 003 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 003 Device 002: ID 0471:0329 Philips (or NXP) SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 04f2:b56c Chicony Electronics Co., Ltd Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
And we can see that new devices have appeared in /dev. Based upon the order we attached, it’s likely that
- The webcam 1-1.2 is at /dev/video2
- The GPS dongle 1-1.4 is probably at /dev/ttyUSB0
- The Z-Wave controller 1-1.5 is at /dev/ttyUSB1
- The same dongle includes a Zigbee controller, too, at /dev/ttyUSB2
The Z-Wave/Zigbee controller has had it’s major number changed from 204 to 188. We don’t know if that’s important or not yet.
me@laptop:~$ ls -l /dev | grep 12 drwxr-xr-x 4 root root 80 Aug 12 00:56 serial crw-rw---- 1 root dialout 188, 0 Aug 12 00:56 ttyUSB0 crw-rw---- 1 root dialout 188, 1 Aug 12 00:56 ttyUSB1 crw-rw---- 1 root dialout 188, 2 Aug 12 00:56 ttyUSB2 crw-rw----+ 1 root video 81, 2 Aug 12 00:56 video2
Testing Results
I tested the GPS using the ‘gpsmon’ application, included with the ‘gpsd-clients’ package. We don’t actually need gpsd, we can connect gpsmon directly to the remote USB device.
me@laptop:~$ gpsmon /dev/ttyUSB0 gpsmon:ERROR: SER: device open of /dev/ttyUSB0 failed: Permission denied - retrying read-only gpsmon:ERROR: SER: read-only device open of /dev/ttyUSB0 failed: Permission denied
Aha, a permission issue, not a usbip failure!
Add myself to the ‘dialout’ group, and then it works. A second test across a VPN connection, from a remote location, was also successful.
me@laptop:~$ ls -la /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 0 Aug 11 21:41 /dev/ttyUSB0 // 'dialout' group me@laptop:~$ sudo adduser me dialout Adding user `me' to group `dialout' ... Adding user me to group dialout Done. me@laptop:~$ newgrp dialout // Prevents need to logout/login for new group to take effect me@laptop:~$ gpsmon /dev/ttyUSB0 // Success!
The webcam is immediately recognized in both Cheese and VLC, and plays across the LAN instantly. There is a noticeable half-second lag. A second test, across a VPN connection from a remote location, had the USB device recognized but not enough signal was arriving in timely order for the applications to show the video.
There were a few hiccups along the way. The —debug flag helps a lot to track down the problems:
- Client failed to connect with «system error» — turns out usbipd was not running on the server.
- Client could see the list, but failed to attach with «attach failed» — needed to reboot the server (not sure why)
- An active usbip connection prevents my laptop from sleeping properly
- The Z-wave controller require HomeAssistant or equivalent to run, a bit more that I want to install onto the testing laptop. Likely to have permission issues, too.
Cleaning up
To tell a CLIENT to cease using a remote USB (virtual unplug), you need to know the usbip port number. Well, not really: We have made only one persistent change; we could simply reboot instead.
me@laptop:~$ usbip port // Not using sudo - errors, but still port numbers Imported USB devices ==================== libusbip: error: fopen libusbip: error: read_record Port 00: at Full Speed(12Mbps) Philips (or NXP) : SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) (0471:0329) 5-1 -> unknown host, remote port and remote busid -> remote bus/dev 001/007 libusbip: error: fopen libusbip: error: read_record Port 01: at Full Speed(12Mbps) Prolific Technology, Inc. : PL2303 Serial Port (067b:2303) 5-2 -> unknown host, remote port and remote busid -> remote bus/dev 001/005 libusbip: error: fopen libusbip: error: read_record Port 02: at Full Speed(12Mbps) Cygnal Integrated Products, Inc. : unknown product (10c4:8a2a) 5-3 -> unknown host, remote port and remote busid -> remote bus/dev 001/006 me@laptop:~$ sudo usbip port // Using sudo, no errors and same port numbers Imported USB devices ==================== Port 00: <port in use> at Full Speed(12Mbps) Philips (or NXP) : SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) (0471:0329) 5-1 -> usbip://aa.bb.cc.dd:3240/1-1.2 -> remote bus/dev 001/007 Port 01: <port in use> at Full Speed(12Mbps) Prolific Technology, Inc. : PL2303 Serial Port (067b:2303) 5-2 -> usbip://aa.bb.cc.dd:3240/1-1.4 -> remote bus/dev 001/005 Port 02: <port in use> at Full Speed(12Mbps) Cygnal Integrated Products, Inc. : unknown product (10c4:8a2a) 5-3 -> usbip://aa.bb.cc.dd:3240/1-1.5 -> remote bus/dev 001/006 me@laptop:~$ sudo usbip detach --port 00 usbip: info: Port 0 is now detached! me@laptop:~$ sudo usbip detach --port 01 usbip: info: Port 1 is now detached! me@laptop:~$ sudo usbip detach --port 02 usbip: info: Port 2 is now detached! me@laptop:~$ lsusb // The remote USB devices are gone now Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 04f2:b56c Chicony Electronics Co., Ltd Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub me@laptop:~$ sudo modprobe -r vhci-hcd // Remove the kernel module
The only two persistent change we made on the CLIENT were adding myself to the ‘dialout’ group and installing the ‘linux-tools-generic’ package, so let’s remove that. If you ALREADY were in the ‘dialout’ group, or had the package installed for other reasons, then obviously don’t remove it. It’s not the system’s responsibility to keep track of why you have certain permissions or packages — that’s the human’s job. After this step, my CLIENT is back to stock Ubuntu.
me@laptop:~$ sudo deluser me dialout // Takes effect after logout me@laptop:~$ sudo apt autoremove linux-tools-generic // Immediate
Telling a SERVER to stop sharing a USB device (virtual unplug) and shut down the server is much easier. Of course, this is also a Pi, and we did make any changes permanent, so it might be easier to simply reboot it.
me@pi:~$ usbip list -l - busid 1-1.1 (0424:ec00) Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00) - busid 1-1.2 (0471:0329) Philips (or NXP) : SPC 900NC PC Camera / ORITE CCD Webcam(PC370R) (0471:0329) - busid 1-1.4 (067b:2303) Prolific Technology, Inc. : PL2303 Serial Port (067b:2303) - busid 1-1.5 (10c4:8a2a) Cygnal Integrated Products, Inc. : unknown product (10c4:8a2a) me@pi:~$ sudo usbip unbind --busid=1-1.2 usbip: info: unbind device on busid 1-1.2: complete me@pi:~$ sudo usbip unbind --busid=1-1.4 usbip: info: unbind device on busid 1-1.4: complete me@pi:~$ sudo usbip unbind --busid=1-1.5 usbip: info: unbind device on busid 1-1.5: complete me@pi:~$ sudo pkill usbipd
The only persistent change we made on the Pi is installing the ‘usbip’ package. Once removed, we’re back to stock Raspbian.
me@pi:~$ sudo apt autoremove usbip
Making it permanent
There are two additional steps to making a permanent server, and essentially the same two steps to make a permanent client. This means a USBIP server that begins serving automatically upon boot, and a client that automatically connects to the server upon boot.
Add the kernel modules to /etc/modules so that the USBIP kernel modules will be automatically loaded at boot. To remove a client or server, delete the line from /etc/modules. You don’t need to use ‘nano’ — use any text editor you wish, obviously.
me@pi:~$ sudo nano /etc/modules // usbipd SERVER usbip_host me@laptop:~$ sudo nano /etc/modules // usbip CLIENT usbip_vhci-hcd // Another way to add the USBIP kernel modules to /etc/modules on the SERVER me@pi:~$ sudo -s // "sudo echo" won't work me@pi:~# echo 'usbip_host' >> /etc/modules me@pi:~# exit // Another way to add the USBIP kernel modules to /etc/modules on the CLIENT me@pi:~$ sudo -s // "sudo echo" won't work me@pi:~# echo 'vhci-hcd' >> /etc/modules me@pi:~# exit
Add a systemd job to the SERVER to automatically bind the USB devices. You can use systemd to start, stop, and restart the server conveniently, and for to start serving at startup automatically.
me@pi:~$ sudo nano /lib/systemd/system/usbipd.service [Unit] Description=usbip host daemon After=network.target [Service] Type=forking ExecStart=/usr/sbin/usbipd -D ExecStartPost=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=10c4:8a2a#' | cut '-d#' -f1)" ExecStop=/bin/sh -c "/usr/lib/linux-tools/$(uname -r)/usbip detach --port=$(/usr/lib/linux-tools/$(uname -r)/usbip port | grep '<port in use>' | sed -E 's/^Port ([0-9][0-9]).*/1/')" [Install] WantedBy=multi-user.target
To start the new SERVER:
me@pi:~$ sudo pkill usbipd // End the current server daemon (if any) me@pi:~$ sudo systemctl --system daemon-reload // Reload system jobs because one changed me@pi:~$ sudo systemctl enable usbipd.service // Set to run at startup me@pi:~$ sudo systemctl start usbipd.service // Run now
Add a systemd job to the CLIENT to automatically attach the remote USB devices at startup. You can use systemd to unplug conveniently before sleeping, and to reset the connection of needed. Note: On the «ExecStart» line, substitute your server’s IP address for aa.bb.cc.dd in two places.
me@laptop:~$ sudo nano /lib/systemd/system/usbip.service [Unit] Description=usbip client After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c "/usr/bin/usbip attach -r aa.bb.cc.dd -b $(/usr/bin/usbip list -r aa.bb.cc.dd | grep '10c4:8a2a' | cut -d: -f1)" ExecStop=/bin/sh -c "/usr/bin/usbip detach --port=$(/usr/bin/usbip port | grep '<port in use>' | sed -E 's/^Port ([0-9][0-9]).*/1/')" [Install] WantedBy=multi-user.target
To start the new CLIENT attachment(s):
me@laptop:~$ sudo systemctl --system daemon-reload // Reload system jobs because one changed me@laptop:~$ sudo systemctl enable usbip.service // Set to run at startup me@laptop:~$ sudo systemctl start usbip.service // Run now