Jump to content

USBIP [Linux]


BraVo123

Recommended Posts

Подключение 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, имена устройств и портов вымышленные

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...