Перейти к содержанию
Симферопольский Форум

USBIP [Linux]


BraVo123

Рекомендуемые сообщения

Подключение USB сканера по сети с помощью USBIP, может кому пригодится ...

Серверная часть есть только под Linux , а клиентская и под linux и под windows

Копался с этим долго, поэтому "многбукфф" под спойлером.

 

 

На сервере:

Если не установлено ставим

 

sudo apt install usbip

или

 

sudo apt install linux-tools-generic

Проверяем наличие необходимых модулей

 

cd  /lib/modules/$(uname -r)/kernel/drivers/usb/usbip/
ls

Видим:

 

итого 176K
drwxr-xr-x  2 root root 4,0K фев 22 11:29 ./
drwxr-xr-x 20 root root 4,0K фев 22 11:29 ../
-rw-r--r--  1 root root  51K фев 13 03:58 usbip-core.ko
-rw-r--r--  1 root root  49K фев 13 03:58 usbip-host.ko
-rw-r--r--  1 root root  64K фев 13 03:58 vhci-hcd.ko

Добавляем модули в /etc/modules , для того что бы они подгружались при загрузке

 

sudo nano /etc/modules

Добавляем строки

 

# USBIP Client/Server
usbip-host
usbip-core
vhci-hcd

Ну или подгружаем модули в ручную

 

modprobe usbip-host
modprobe usbip-core
modprobe vhci-hcd

или

 

sudo insmod usbip-core.ko
sudo insmod usbip-host.ko
sudo insmod vhci-hcd.ko

Запускаем демон:

 

sudo /usr/lib/linux-tools/'uname -r'/usbipd -D

Если хотите загружать демон автоматически при загрузке:

 

sudo nano /etc/init.d/usbipd

#!/bin/sh
### BEGIN INIT INFO
# Provides: usbipd
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Default-Stop: 0 1 6
# Description:
###END INIT INFO
case "$1" in
'start')
# export OSVER = 'uname -r'
/usr/lib/linux-tools/'uname -r'/usbipd -D
;;
'stop')
unset OS
pkill usbip
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0

и обновляем

 

update-rc.d usbipd defaults

Смотрим что у нас есть:

 

sudo /usr/lib/linux-tools/'uname -r'/usbip list -l

Видим примерно следующее:

 

 - busid 3-2 (15c2:0038)
  SoundGraph Inc. : GD01 MX LCD Display/IR Receiver (15c2:0038)

- busid 5-1 (09da:9090)
  A4Tech Co., Ltd. : XL-730K / XL-750BK / XL-755BK Mice (09da:9090)

- busid 1-8 (04b8:0119)
  Seiko Epson Corp. : GT-X750 [Perfection 4490 Photo] (04b8:0119)

Биндим например наш сканер GT-X750 [Perfection 4490 Photo]:

 

sudo /usr/lib/linux-tools/'uname -r'/usbip bind -b 1-8

Видим:

 

usbip: info: bind device on busid 1-8: complete

Автоматический бинд, при подключении сканера

Создаём правило для UDEV

 

sudo nano /etc/udev/rules.d/99-usbip.rules

Добавляем туда:

 

# Бинд при подключении сканера
ACTION=="add", ENV{ID_BUS}=="usb", ENV{ID_VENDOR}=="EPSON", RUN+="/etc/usbip_bind %E{ID_VENDOR_ID$} %E{ID_MODEL_ID}"

Здесь :

 

* ACTION=="add" - Действие при подключении

* ENV{ID_BUS}=="usb" - Устройства usb

* ENV{ID_VENDOR}=="EPSON" - Производитель Epson

 

здесь нужно указывать то что реально выдаёт устройство при подключении

 

udevadm monitor --environment --udev

выхлоп

 

UDEV  [262232.750592] add      /devices/pci0000:00/0000:00:1d.7/usb1/1-7 (usb)
ACTION=add
BUSNUM=001
DEVNAME=/dev/bus/usb/001/005
DEVNUM=005
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-7
DEVTYPE=usb_device
DRIVER=usb
ID_BUS=usb
ID_MODEL=EPSON_Scanner
ID_MODEL_ENC=EPSON\x20Scanner
ID_MODEL_FROM_DATABASE=GT-X750 [Perfection 4490 Photo]
ID_MODEL_ID=0119
ID_REVISION=0100
ID_SERIAL=EPSON_EPSON_Scanner
ID_USB_INTERFACES=:ffffff:
ID_VENDOR=EPSON
ID_VENDOR_ENC=EPSON
ID_VENDOR_FROM_DATABASE=Seiko Epson Corp.
ID_VENDOR_ID=04b8
....

* RUN+="/etc/usbip_bind %E{ID_VENDOR_ID$} %E{ID_MODEL_ID}" - Ну и соответственно какой скрипт с какими параметрами выполнять

 

Создаём скрипт

 

sudo nano /etc/usbip_bind

Добавляем туда:

 

#!/bin/sh
export OSV='uname -r'
BUSID='/usr/lib/linux-tools/$OSV/usbip list -l | grep $1:$2 | awk '{print $3}' | grep -'
export USB_IP='pgrep "usbipd"'
# Если демон запущен, биндим наш сканер 
if [ -n "$USB_IP" ]; then
/usr/lib/linux-tools/$OSV/usbip bind -b $BUSID
sleep 3
else
# возможно сначала нужно подгрузить модули
#modprobe usbip-core
#modprobe usbip-host
#modprobe vhci-hcd
# Иначе сначала запускаем демон а потом биндим
#service usbipd start ??? 
/usr/lib/linux-tools/$OSV/usbipd -D
# что-то тут не так, ибо демон не запускается автоматически.
sleep 3
/usr/lib/linux-tools/$OSV/usbip bind -b $BUSID
fi

Разрешаем выполнение файа

 

sudo chmod 755 /etc/usbip_bind

Здесь я хотел проверить, запущен ли демон и по результату либо просто биндить, либо сначала запустить демон,

но так и не разобрался с запуском демона USBIPD

бинд работает, а демон не запускается.

Но так как демон запускается при старте системы, а модули добавлены в загрузку,

на это пока забил ...

 

Перечитываем правила UDEV.rules

 

sudo udevadm control --reload-rules

 

 

На клиенте:

Установка и загрузка модулей, по аналогии с сервером.

Смотрим что мы можем подключить с сервера

 

sudo /usr/lib/linux-tools/'uname -r'/usbip list -r 192.168.1.218

Видим что-то вроде:

 

Exportable USB devices
======================
- 192.168.1.218
       1-8: Seiko Epson Corp. : GT-X750 [Perfection 4490 Photo] (04b8:0119)
          : /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-7
          : Vendor Specific Class / Vendor Specific Subclass / Vendor Specific Protocol (ff/ff/ff)

Подключаем наш сканер:

 

sudo /usr/lib/linux-tools/'uname -r'/usbip attach -r 192.168.1.218 -b 1-8

Проверяем:

 

sudo /usr/lib/linux-tools/'uname -r'/usbip port

Imported USB devices
====================
Port 00: <Port in Use> at High Speed(480Mbps)
      unknown vendor : unknown product (04b8:0119)
      4-1 -> usbip://192.168.1.218:3240/1-8
          -> remote bus/dev 001/003

sudo /usr/lib/linux-tools/'uname -r'/usbip list -l

 - busid 2-3 (04f2:b3f6)
  Chicony Electronics Co., Ltd : HD WebCam (Acer) (04f2:b3f6)

- busid 2-7 (046d:c52b)
  Logitech, Inc. : Unifying Receiver (046d:c52b)

- busid 4-1 (04b8:0119)
  Seiko Epson Corp. : GT-X750 [Perfection 4490 Photo] (04b8:0119)

Всё видим что наш сканер подключен, можно пользоваться :)

 

Статья о том как собрать USBIP-UTILS 2.0 из исходников

https://blog.danman.eu/usbip-utils-2-0-on-ubuntu/

 

Клиент для Windows (не подписанный, с патчем от вылетов)

Dropbox - usbip.zip

Оригинальный подписаный клиент

Download The USB/IP Project from SourceForge.net

 

Клиет для Windows

Теперь остался последний штрих в нашем нелегком деле - настроить клиента. Клиентом в данном случае будет Windows.

Итак, идём вот сюда и скачиваем usbip_windows_v0.2.0.0_signed.zip. Распакуем это "добро" в каталог C:\ (желательно, чтобы название каталога было usbip, а не usbip_win..., это просто для дальнейшего удобства). Теперь добавим новое "старое устройство".

 

1. Открываем "Панель управления" - "Диспетчер устройств"

2. Правой кнопкой мыши на имени компьютера - "Установить старое устройство"

3. Откроется мастер, жмёте "Далее"

4. В следующем окне выбираете "Установка оборудования, выбранного из списка вручную" и жмёте "Далее"

5. Выбираете "Системные устройства" - "Далее"

6. "Установить с диска" указываете путь, куда распаковали клиента, и снова "Далее"

7. Выберите "USB/IP Enumerator", нажмите "ОК", "Далее" и "Готово"

 

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

 

cd c:\usbip
usbip -l 10.10.10.10

Выхлоп

 

- 10.10.10.10
2-2: Canon, Inc. : CanoScan LIDE 25 (04a9:2220)
: /sys/devices/pci0000:00/0000:00:1d.1/usb2/2-2
: Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)
: 0 - Vendor Specific Class / unknown subclass / unknown protocol (ff/00/ff)

usbip -a 10.10.10.10 2-2

new usb device attached to usbvbus port 1
Receive sequence: 3900

Командой "usbip -l 10.10.10.10" мы вывели список всех устройств с нашего ТК, "расшаренных" через usbip (10.10.10.10 - ip нашего ТК).

Командой "usbip -a 10.10.10.10 2-2" мы примапили это устройство к себе на наш терминальный сервер (2-2 это тот самый busid, необходимый для присоединения устройства).

Теперь в диспетчере устройств у вас есть новое неопознанное устройство. Ставите на него драйвера и оно должно заработать как ему и положено.

Коммандую строку закрывать нельзя, иначе связь обрывается

 

 

Оффтопик:

Все IP, имена устройств и портов вымышленные

любое совпадение случайно.

«Украинский народ заслуживает того, чтобы определять своё будущее без вмешательства извне. И именно это Соединённые Штаты пытаются сделать». © Джон Бреннан (главный советник президента США Барака Обамы по борьбе с терроризмом)

«Сибирь слишком большая, чтобы принадлежать одному государству» © Кондолиза Райс (госсекретарь США)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...

Чат

Чат

Please enter your display name

×
×
  • Создать...