Есть много причин использования физически удаленных USB устройств,
именно устройств, а не их ресурсов или данных передаваемых с них.То есть, после прочтения и настройки данного ПО, вы сможете подключать флешки, камеры, принтеры, и т.п., находящиеся скажем в Австралии или дома, находясь на работе.
О наличии или отсутствии модулей поддержки USB_IP в определенных дистрибутивах ничего сказать немогу, но вы сами можете прекрасно проверить командой:
# modprobe -l | grep usbip
/lib/modules/2.6.31.2/kernel/drivers/staging/usbip/vhci-hcd.ko
/lib/modules/2.6.31.2/kernel/drivers/staging/usbip/usbip.koЕсли появилось, что-то вроде этого, то переходим ко второй части, нет, - поехали дальше.
++ 1. Установка поддержки USB/IP в ядре.
Для работы необходимо ядро версии не менее чем 2.6.20, после версии 2.6.28 этот проект перенесён в основную ветку ядра, но в раздел staging (по-русски - "почти работающие" :))
Итак, если версия 2.6.28 и больше, запускаем конфигурацию ядра:
# make menuconfig
Идем в раздел:
Device Drivers --->
Staging drivers --->И включаем опции: (лучше как модули)
<M> USB IP support (EXPERIMENTAL)
<M> USB IP client driver
<M> USB IP host driverСохраняем конфигурацию, компилируем и устанавливаем ядро.
# make && make modules_install && make install;
++ 2. Установка утилит пользовательского режима.
Для управлением и подключением наших устройств необходимы утилиты пользовательского режима и некоторые библиотеки, а именно:
- sysfsutils >= 2.0.0 sysfsutils library
А для компиляции:
- libwrap0-dev tcp wrapper library (можно и без неё)
- gcc >= 4.0
- libglib2.0-dev >= 2.6.0
- libtool, automake >= 1.9, autoconf >= 2.5.0, pkg-configСкачиваем архив с Sourceforge (я бы этого не делал) http://sourceforge.net/projects/usbip/files/
Либо последние версии, через SVN:# cd /usr/src/
# svn co https://usbip.svn.sourceforge.net/svnroot/usbip usbipПереходим в каталог с утилитами, за запускаем autogen.sh,
после чего должен появится configure# cd usbip/linux/truck/src/
# ./autogen.shconfigure лучше указать где находится файл описания производителей USB устройств - usb.ids, если этого не сделать, то ничего страшного, он установит свой в /usr/local/share/usbip/usb.ids :)
# ./configure --with-usbids-dir=/usr/share
# make
# make installУ вас должны появится три утилитки - usbip, usbipd, usbip_bind_driver и две библиотеки - libusbip.so.0.0.1 и libusbip.a
++ 3. Подключение и работа.
Как при любом взаимодействии, так и у нас необходимы как минимум два индивида. :)
В USB/IP они подразделяются на клиентскую и серверную части процесса работы.
SERVER - это компьютер с физическим, необходимым нам устройством.
CLIENT - так же, компьютер, возможно даже тот же, где работает сервер (сейчас всех запутаю).++ 3.1 Серверная часть.
И так, что б получит доступ по сети, скажем к флешке на компьютере с именем [SERVER], необходимо:
[SERVER]
1. Физически подключить устройство.
2. Загрузить модули:# modprobe -v usbip_common_mod
# modprobe -v usbip3. Запустить сервер сетевых подключений
# usbipd -D
Должен открыться TCP порт 3240, и находиться в состоянии LISTEN
# netstat -ltn;
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3240 0.0.0.0:* LISTEN4. Вывести список устройств возможных для подключения
# usbip_bind_driver --list
List USB devices
- busid 2-1 (051d:0002)
2-1:1.0 -> usbhid- busid 1-8 (058f:6387)
1-8:1.0 -> usb-storage5. И наконец, сделать устройство доступным для клиентов.
# usbip_bind_driver --usbip 1-8
usbip_bind_driver --usbip 1-8
** (process:12829): DEBUG: 1-8:1.0 -> usb-storage
** (process:12829): DEBUG: unbinding interface
** (process:12829): DEBUG: write "add 1-8" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 1-8 to usbip, complete!++ 3.2 Клиентская часть.
[CLIENT]
1. Устанавливаем модули
# modprobe -v usbip_common_mod
# modprobe -v vhci-hcdПроверяем dmesg
# dmesg
vhci_hcd vhci_hcd: USB/IP Virtual Host Contoroller
vhci_hcd vhci_hcd: new USB bus registered, assigned bus number 3
usb usb3: New USB device found, idVendor=1d6b, idProduct=0002
usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb3: Product: USB/IP Virtual Host Contoroller
usb usb3: Manufacturer: Linux 2.6.31.2 vhci_hcd
usb usb3: SerialNumber: vhci_hcdВсё в порядке, идем дальше...
2. Выводим список устройств доступных на сервере
# usbip --list 192.168.0.1
- 192.168.0.1
1-8: Alcor Micro Corp. : Transcend JetFlash Flash Drive (058f:6387)
: /sys/devices/pci0000:00/0000:00:02.1/usb1/1-8
: (Defined at Interface level) (00/00/00)
: 0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)Чудненько, мы видим удалённую флешку....
3. И подключаем её как будто бы локальную
# usbip --attach 192.168.0.1 1-8
Проверяем состояние
# usbip --port
# lsusb
# dmesgЕсли у Вас работает какая либо система автоподключения, наверно флещка уже куда-то подмонтировалась.
Далее можно производить любые действия, так как вы работаете с обычными USB устройствами, - снимать, сканировать, печатать.4. Отключение устроиства на клиенте
# usbip --detach 1-8
P.S. Драйвер находиться в стадии глубокого эксперимента, так что ошибок очень много. Так например временное пропадание соединения, для TCP/IP явление нормальное, а вот временное пропадание USB устройства, приводит к его уничтожению из списка устройств. А после прохождения таймаута в TCP, устройство вдруг возвращается... :)В VHCI драйвере это конечно компенсируют, но так же есть пределы таймаутов. Так что, хорошо настроенная сеть, пускай даже и медленная, залог успеха. Про отключение режимов управлением питанием, понижение частоты, QoS, молчу - просто обязательно!
URL:
Обсуждается: http://www.opennet.dev/tips/info/2189.shtml
Чёй-то я про Австралию вспомнил :-/
А USB-hub со всеми подключенными к нему устройствами одним махом пробросить можно? :)
Хаба небыло никогда, не прикалывался...
А авторизация какая-нибудь предусмотрена?
>А авторизация какая-нибудь предусмотрена?с помощью stunnel прикрутить или inetd
>> Есть много причин использования физически удаленных USB устройств,именно устройств, а не их ресурсов или данных передаваемых с них.
и не одной не названо
Виртуальные машины.
Удалённые столы: - Видео в режим потока, а клаву и мышь отдельно.
- Петрович, у мня тонер конился, какой у тя АйПишнег??? Пушай демона, дай начепятую!!!
- Алё, Жуна, вставь флешку в комп, закачну фильмец....!!!
- Кисуля, сунь попу в сканер дай полюбуюсь :)
А к нескольким машинам одновременно флешку прикрутить можно будет?
осталось найти usb-камеру и ппц коту! :)
посмотрел, в убунте 9.10 (текущее состояние) уже все есть.
можно ставить, и пользоваться. :-)
Пробовал года 2 или 3 назад один из самых первых реализаций - работало.
осталось удаленно воткнуть эту самую флешку, которая в Австралии, в usb-разъем
А hasp можно ???
На FreeBSD всё гораздо проще -- есть GEOM Gate.На сервере:
# echo 'geom_gate_load="YES"' >> /boot/loader.conf
# echo '192.168.1.0/24 RW /dev/da0s1' >> /etc/gg.exports
# kldload geom_gate && ggatedНа клиенте (из сети 192.168.1.0/24):
% ggatec create -o rw server_ip /dev/da0s1
ggate0 # ответ команды на создание нового устройства
% mount_msdosfs /dev/ggate0 /mnt/Идентификация подключенных устройств на клиенте:
% ggatec list -v
NAME: ggate0
info: 192.168.1.10:3080 /dev/da0s1
access: read-write
timeout: 0
queue_count: 0
queue_size: 1024
references: 2
mediasize: 4110400512 (3.8G)
sectorsize: 512
mode: r0w0e0Восстановление geom_gate на клиенте после сбоев сервера:
% ggatec rescue -o rw -u 0 server_ip /dev/da0s1
# 0 - номер "пропавшего" устройства ggateОстановка работы с устройством на клиенте:
% umount /mnt
% ggatec destroy -u 0
# 0 - номер устройства ggateОстановка работы с устройством на сервере:
# pkill ggatedМожно экспортировать RAW-разделы.
> На FreeBSD всё гораздо проще
>Можно экспортировать RAW-разделы.Принтеры и камеры вы "там" у себя тож "просто" форматируете?
Не красиво как то, через NFS или FUSE/CUSE разве нельзя usbfs примонтировать где угодно? ... Хотя Storage устройства таким образом работать не будут, да, и все остальное для чего драйверы в ядре.
а веб камеру или другое какое нибудь устройство?
интересует подключение например МФУ. Дома xerox pe220, подключен к асус wl500g. Печать с других машин - без проблем, а вот если бы сканер зацепить - цены бы небыло
У меня на двух машинах без libsysfs-dev не конфигурировалось
Интересует бодобная реализация для win клиентов. Надобно hasp расшарить.
В общем, действительно много ошибок.Во первых даже при экспорте через lo и импорте на ту-же машину, минут через 10 всё зависает намертво.
Если пробрасывать через локалку или инет - то все зависает гораздо быстрее. Причем и клиент и сервер.
Хотя да, запускается, работает. Пробовал сервер - Ubuntu 10.10, клиенты ubuntu 10.10, Windows XP.
Пока для хаспа не вариант - слишком не надёжно :-(
HASP вариант для виртуалки можно попробовать
У мну вроде собралось, но не работает:ts_001e0b397db7:~# usbip_bind_driver --list
List USB devices
- busid 4-5 (13fe:3223) 4-5:1.0 -> usb-storage
- busid 4-6 (04a9:1905) 4-6:1.0 -> none
ts_001e0b397db7:~# usbip_bind_driver --usbip 4-5
** (process:1592): DEBUG: 4-5:1.0 -> usb-storage
** (process:1592): DEBUG: unbinding interface ** (process:1592):
WARNING **: add 4-5 to match_busid, failedНикто не сталкивался с таким ашибком?
Убогая программа - меняйте руководителя проекта.