Usbip error failed to open usr share hwdata usb ids

Инструкция по настройке сервера USBIP для редиректа устройств USB с сервера на другой компьютер по сети. Помимо процесса настройки описаны возможные проблемы и способы их решения.

Обновлено Обновлено: 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 или правой кнопкой по Этот компьютер в проводнике — Управление — Диспетчер устройств).

Кликаем по ДействиеУстановить старое устройство:

Установка старого устройства в диспетчере устройств Windows

Выбираем ручную установку устройства — показать все устройства — Установка с диска и выбираем файл 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:

Редактирование exe — было

* было

Редактирование exe — стало

* стало

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.

Содержание

  1. Устанавливаем USB/IP
  2. Установка usbp/ip на сервере
  3. Настраиваем клиентскую часть usb/ip
  4. Нюансы при работе с usb/ip
  5. Настройка USB-сервера Ubuntu на базе usbip
  6. Установка и запуск
  7. Настройка клиента
  8. Автозапуск
  9. Автозапуск сервера
  10. Автозапуск клиента Windows
  11. Возможные проблемы
  12. 1. usbip_common_mod.ko and usbip.ko must be loaded
  13. 2. /usr/sbin/usbipd: No such file or directory
  14. 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
  15. 4. usbip err . recv op_common
  16. 5. (attach_device) cannot find device
  17. 6. udev_device_new_from_subsystem_sysname failed
  18. ITСooky
  19. IT-рецепты съедобные и не очень!
  20. Делаем не сетевой принтер-сканер — сетевым с 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-host2)

sudo modprobe usbip-core3) стартую демон

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]   Вверх

Содержание

  1. Настройка USB-сервера Ubuntu на базе usbip
  2. Установка и запуск
  3. Настройка клиента
  4. Автозапуск
  5. Автозапуск сервера
  6. Автозапуск клиента Windows
  7. Возможные проблемы
  8. 1. usbip_common_mod.ko and usbip.ko must be loaded
  9. 2. /usr/sbin/usbipd: No such file or directory
  10. 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
  11. 4. usbip err . recv op_common
  12. 5. (attach_device) cannot find device
  13. 6. udev_device_new_from_subsystem_sysname failed
  14. Как расшарить USB по сети в Linux
  15. Usb Network Gate
  16. Установка Usb Newtork Gate
  17. Раздача USB устройств по сети
  18. USBIp
  19. Установка usbip
  20. Настройка сервера

Настройка 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. Но судя по отзывам пользователей в интернете тоже все работает.

Содержание

  1. Установка и настройка usb-redirector-linux в CentOS
  2. Подготовка сервера
  3. Настройка сервера
  4. Проброс USB устройства
  5. Настройка клиента
  6. Настройка USB-сервера Ubuntu на базе usbip
  7. Установка и запуск
  8. Настройка клиента
  9. Автозапуск
  10. Автозапуск сервера
  11. Автозапуск клиента Windows
  12. Возможные проблемы
  13. 1. usbip_common_mod.ko and usbip.ko must be loaded
  14. 2. /usr/sbin/usbipd: No such file or directory
  15. 3. usbip: error: failed to open /usr/share/hwdata//usb.ids
  16. 5. (attach_device) cannot find device
  17. 6. udev_device_new_from_subsystem_sysname failed
  18. Проброс USB устройств по сети при помощи USBIP
  19. Установка Linux
  20. Установка сервера USBIP
  21. Установка USBIP клиента под Windows
  22. Подключаем удаленное USB устройство
  23. Пробрасываем USB–ключ в облако (Linux клиент — Linux сервер)
  24. Установка и настройка USB Redirector на сервере с подключенным ключом USB
  25. Установка клиента USB Redirector в облаке
  26. Как расшарить USB по сети в Linux
  27. Usb Network Gate
  28. Установка Usb Newtork Gate
  29. Раздача USB устройств по сети
  30. USBIp
  31. Установка usbip
  32. Настройка сервера

Установка и настройка usb-redirector-linux в CentOS

В статье пойдет речь о настройке сервера для сетевой передачи устройства USB на другой компьютер. Подобная конструкция, как правило, необходима для проброса различных USB-ключей на виртуальные машины. Серверная часть будет настраиваться на базе Linux CentOS 7, клиентская — Windows. В качестве серверного ПО будем использовать usb-redirector-linux. Внимание — данный продукт нельзя использовать бесплатно, если раздача USB устройства идет с сервера Linux. В большей степени, инструкция предназначена для тех, кто планирует купить данных продукт.

Подготовка сервера

Для корректной установки программы, необходимо обновить систему:

После сервер необходимо перезагрузить:

Настройка сервера

usb-redirector-linux собирается из исходников. Для начала ставим пакеты, необходимые для сборки:

yum install wget gcc kernel-devel

Переходим на страницу загрузки программы и копируем ссылку на ее скачивание:

usb over ip centos 01

Используя ссылку, скачиваем исходник на сервер:

Распаковываем скачанный архив и переходим в каталог исходников модулей:

Собираем исходник с указанием исходника ядра:

* каталог 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:

usb over ip centos 02

Скачанный архив распаковываем и запускаем установщик. Отвечаем на все вопросы мастера нажатием Далее.

usb over ip centos 03

Появится список расшаренных устройств — просто нажимаем правой кнопкой мыши на необходимый и кликаем 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.

ubuntu usbip 01

Теперь открываем командную строку (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. Запускаем планировщик заданий и добавляем новую задачу.

На вкладке Общие отмечаем Выполнять вне зависимости от регистрации пользователя и ставим галочку Выполнить с наивысшими правами:

ubuntu usbip 04

В триггерах выбираем При запуске системы:

ubuntu usbip 05

На вкладке Действия выбираем Запуск программы и прописываем путь до скрипта, который мы сохранили ранее:

ubuntu usbip 06

На вкладке Параметры ставим галочку При сбое выполнения перезапускать через и снимаем галочку Останавливать задачу, выполняемую дольше:

ubuntu usbip 07

Для проверки, можно запустить вручную задачу на исполнение или перезагрузить компьютер.

Возможные проблемы

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:

ubuntu usbip 02

ubuntu usbip 03

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

probros 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

Установка драйвера.

Откройте диспетчер устройств, выберите корневой элемент дерева, нажмите правой кнопкой мыши и в контекстном меню выберите пункт Установить старое устройство.

screenshot 1

Первый шаг пропускаем

На втором шаге устанавливаем радио переключатель в положение Установка оборудования, выбранного из списка вручную

Следующий шаг пропускаем, просто нажимаем Далее

На следующем шаге нажимаем кнопку Установить с диска, выбираем файл драйвера устройства USBIPEnum.inf.

В итоге видим драйвер USB/IP Enumerator, выбираем его и нажимаем кнопку Далее

screenshot 3

Соглашаемся с предложением установить новое оборудование и нажимаем кнопку Далее.

На вопрос об установке программного обеспечения отвечаем утвердительно, дожидаемся завершения работы мастера, и нажимем кнопку Готово.

screenshot 6

В Диспетчере устройств появилось новое системное устройство USB/IP Enumerator.

После установки драйвера, нужно загрузить еще один архивчик. Я столкнулся с проблемой, что при попытке подключения к серверу, выдается ошибка, сообщающая об отличии версий клиента и сервера. В процессе поиска решения проблемы, вот здесь на форуме, я нашел что один хороших человек выложил ссылку на архив, в котором лежит скомпилированный usbip.exe правильной версии, подключаясь с помощью которого к серверу никаких ошибок не выдается.
Может со временем, если дойдут руки, я попробую сам скомпилировать загруженный проект, но сейчас времени нет разбираться со всеми зависимостями и буду пользоваться тем что есть.

Подключаем удаленное USB устройство

Открываем командную строку, устанавливаем текущей директорию, c:usbip. Если выполнить команду без параметров, будет выведена справка.

После непродолжительного ожидания (все-таки подключение производится не к локальному девайсу, а проброшенному через сеть), система запустит мастер установки драйверов оборудования. В конце сообщит вам об успешной установке устройства.

screenshot 11

В результате устройство будет отображено у вас в системе и с ним можно работать как с обычным локальным устройством.

screenshot 13

Источник

Пробрасываем USB–ключ в облако (Linux клиент — Linux сервер)

Заказчику потребовалось подключить USB–ключ для банковской системы к Linux–серверу в облаке, где он разворачивает свой разработанный продукт. Напрямую подключить USB–ключ к виртуальной машине нельзя — она работает в отказоустойчивом кластере и может быть смигрирована на любой из хост-серверов без даунтайма.

image loader

Давайте посмотрим, как реализовать проброс 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–устройства доступны:

9ed48e

Есть 2 варианта расшарить устройство по сети.

В этом случае мы привязываемся к конкретному id устройства и порту, если включить usb-ключ в другой порт сервера — номер usb порта сменится и работать не будет.

В этом случае мы привязываемся только к id устройства. Теперь USB–устройство расшарено по сети.

Конечно делать его доступным для всех пользователей Интернет не правильно, поэтому добавим ограничения в firewall:

Где вместо *.*.*.* нужно написать адрес сервера, с которого разрешено подключение.

Установка клиента USB Redirector в облаке

Скачайте USB Redirector:

Перейдите в папку с ним:

Разрешите запуск инсталлятора:

Если все прошло корректно, вы увидите сообщение об этом.

Добавьте службу проброса в автозагрузку, если ранее этого не произошло:

Теперь добавим наш сервер:

Где вместо **.**.**.** нужно указать ip–адрес сервера.

Теперь можно посмотреть список доступных устройств:

be9a30

Видим, что на сервере 1 доступно устройство 1.

Включаем автоматическое соединение с устройством:

45ed5f

USB–ключ был успешно проброшен в виртуальную машину в облаке.

Источник

Как расшарить USB по сети в Linux

В этой статье мы рассмотрим несколько программ позволяющих реализовать такую возможность. Одной из них будет USB Network Gate. Это платная программа, но она позволяет расшарить устройства usb по сети в Linux очень быстро и просто. У программы удобный графический интерфейс и очень простая настройка. Также рассмотрим свободную альтернативу usbip, с помощью которой можно расшарить usb по сети в терминале. Начнем с коммерческой программы.

Usb Network Gate

Установка Usb Newtork Gate

Установка USB Network Gate в Linux выполняется очень просто. Скачать установочный пакет для своего дистрибутива можно на официальном сайте.

usbshare

Здесь достаточно просто нажать кнопку скачать, а затем выбрать версию для своего дистрибутива:

usbshare1

После завершения загрузки, для установки перейдите в папку с файлом и выполните:

Для RedHat и других использующих rpm систем. Возможно для работы программы понадобится библиотека libudev.so.0, если такой версии библиотеки нет в вашей системе создайте ссылку на libudev.so.1 следующей командой:

Раздача USB устройств по сети

Запустить программу можно из главного меню или выполнив в терминале:

Главное окно программы выглядит вот так:

usbshare2

Чтобы расшарить USB устройство по сети достаточно кликнуть по нему правой кнопкой мыши и выбрать в контекстном меню пункт Share.

В открывшимся окне можно увидеть информацию об устройстве и указать дополнительные настройки, например стоит ли использовать шифрование, сжатие или пароль для аутентификации соединения:

usbshare3

На удаленной машине, чтобы подключить наше устройство, сначала нужно его найти. Для этого перейдите на вкладку Remote USB Devices и нажмите кнопку Find:

usbshare4

В открывшимся окне, если компьютеры находятся в локальной сети можно просто нажать Find All, если же нет нужно указать ip адрес компьютера на котором расшаренно USB устройство, а затем нажать кнопку Find:

usbshare5

Дальше остается только добавить выбранное устройство с помощью кнопку Add remote device.

Чтобы подключить USB просто выберите в контекстном меню опцию Connect:

usbshare8

Дальше вы увидите, что состояние изменилось на Connected, а к системе было подключено новое USB устройство:

usbshare7

Чтобы его отключить просто выберите опцию 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

Понравилась статья? Поделить с друзьями:
  • Urllib error httperror http error 410 gone pytube
  • Usb флешка не читается нет носителя как исправить
  • Urllib error httperror http error 405 method not allowed
  • Usb флешка медленно работает как исправить
  • Usb устройство ввода ошибка драйвера