Создаем сервер USB Over IP на базе Linux
Метки: Linux | Ubuntu
Четверг, 2 сентября 2010 г.
Просмотров: 32808
Подписаться на комментарии по RSS
Довольно долго мне приходилось сталкиваться с ситуацией, при которой мне нужно было продолжать использовать физический сервер, хотя почти вся инфраструктура виртуализирована. Причиной этому было отсутствие подддержки USB устройств в самых разнообразных платформах виртуализации. В частности я использую Xen, а на сервере, который я хотел бы виртуализировать должен быть подключен USB ключ.
Конечно можно использовать аппратное оборудование, например USBoverIP, однако оно стоит значительных денег. И вот наконец решение найдено. Я обнаружил отличный бесплатный проект , доступный по этому линку - http://usbip.sourcefrge.net/
С помощью него можно преврать Linux систему в USB сервер, обслуживающий USB девайсы через IP для клиентов как под управление Linux, так и Windows.
Настройки сервера
1- Скачайте последний пакет по ссылке http://downloads.sourceforge.net/project/usbip/usbip/usbip-win-preview/usbip-win.zip?use_mirror=ignum
Я тестировал все под Ubuntu Karmic, поэтому мне необходимо было выполнить следующую команду:
usbip:~$ sudo aptitude install usbip
Затем необходимо загрузить следующие модули для возможности контролировать USB порты.
usbip:~$ sudo modprobe usbip usbip:~$ sudo modprobe usbip_common_mod
Теперь запустим usbip в качестве системного демона:
usbip:~$ usbipd -D
Bind usbip.ko to a usb device to be exportable! usbip:~$
Это означает что все идет по плану и нам необходиом выбрать порт, который будет расшариваться.
1- Подключите USB устройство к компьютеру
2- Выполните команду
lsusb
Для поиска соответствующего индентификатора Vendor/Device ID, который имеет следующую форму:
Bus XXX Device YYY: ID VendorID:DeviceID
Know that to find your favourite hardware ID, you can locate its possition on the BUS. Just match the ID with the result of usbip server check:
usbip:~$ sudo usbip_bind_driver --list
busid 1-6 (0c45:63ee) 1-6:1.0 - > uvcvideo 1-6:1.1 - > uvcvideo
Из этой команды нам становиться известне bus-ID, указывающий на USB устройство. В данном случае это "1-6".
Теперь подключаем устройство к серверу:
usbip:~$ sudo usbip_bind_driver --usbip 1-6
После выполнения данной команды система будет передавать данные о USB устройстве с вашей системы удаленным клиентам.
Настройки клиентов
* Клиент MS Windows
Скачайте zip версию клиента по ссылке http://ignum.dl.sourceforge.net/project/usbip/usbip/usbip-win-preview/usbip-win.zip
Распакуйте её и выполните два простых шага.
Первое:
В архиве есть файл "bus.inf", который вам необходимо установить как "Generic system device" в своей системе.
Второе:
Выполните следующую команду из командной строки:
path-to-usbip:> usbip.exe -l <server-ip>
В результате выполнения этой команды вы увидите bus-ID, найденные на сервере.
Теперь подключите устройство следующей командой:
path-to-usbip:> usbip.exe -a <server-ip> USB-ID
** USB-ID в нашем случае 1-6.
Все!!! Вы увидите новое USB устройство, обнаруженное вашей системой.
* Клиент Gnu/Linux
В качестве клиента я тестировал дистрибутив Ubuntu Karmic
Подобно настройке серверной части необходимо выполнить команду:
$ sudo apt-get install usbip
Загрузите модуль "vhci-hcd":
$ sudo modprobe vhci-hcd
Теперь вы можете опросить сервер на наличие расшаренных USB устройств:
$ sudo usbip -l <server-ip>
А потом и подключить нужное устройство следующей командой:
$ sudo usbip -a <server-ip> X-Y
Интересное:
Самые низкие цены на окна пвх что я видел в Москве. Что вообщем и не удивительно, ведь у компании "Окна Комфорта" собственное производство.
Еще записи по теме
- Автоматически находим самый быстрый репозитарий в Ubuntu 8.04
- Включаем автоматический вход в Ubuntu 9.10
- Ограничение доступа к определенной команде в Linux
- Использование eBox в качестве Windows PDC, часть 3
- Настройка глобального списка адресов Exchange в Evolution
- Как найти IP адрес в Ubuntu
- Как посмотреть какая версия пакета установлена в Ubuntu
Комментариев: 7
Здравствуйте. Огромное спасибо за статью, очень помогла.
Но есть вопрос:
Сделал проброс принтера HP1020, Виндовый клиент нормально его подключил и принтер печатает, но только из-под Администратора. Права на клиент - полный доступ для всех, права на принтер - полный доступ для всех, уже даже незнаю куда копать. Может кто сталкивался с подобным?
Шикарно=) Кратко, ясно, в поиске нашёл быстро. Спасибо!
Сделал все по мануалу. На linux сервере девайс подтянулся, но на windows клиенте проблема:
C:\Documents and Settings\kd_admin>e:\usbip\usbip.exe -l 192.168.50.68
usbip: failed to open usb.ids
- 192.168.50.68
1-5: unknown vendor : unknown product (04a9:2213)
: /sys/devices/pci0000:00/0000:00:1d.7/usb1/1-5
: unknown class / unknown subclass / unknown protocol (ff/ff/ff)
: 0 - unknown class / unknown subclass / unknown protocol (ff/ff/ff)
В файле usb.ids подключенный сканер имеется, как я понимаю проблема с открытием файла usb.ids на клиенте. С правами на клиенте все ровно. Подскажите плиз, куда копать.
Боюсь, тут лучше не использовать проброс USB, у меня дома принтер подключен через CUPS, в винде он установлен как "Интернет-принтер", печатает без проблем и мгновенно!
А где можно взять usb_bind_driver, если криворукий сборщик пакета usbip-3.5-1.fc17.i686 (c nonfree.rpmfusion.org) не соизволил его включить в пакет? ЧСХ, man usb_bind_driver включил.
Клиент 0.2
usbip: failed to open usb.ids
но после этой надписи устройство появляется без проблем.
Проблема в том что после перезагрузки сервера с usbip
виндовый клиент выдаёт вот что
usbip: failed to open usb.ids
request failed at peer, 1
usbip err: usbip_windows.c: 712 (query_import_device) recv op_common
usbip err: usbip_windows.c: 840 (attach_device) query
Спасибо! Только коммандный интерфейс в новых версиях другой. Например в Arch уже вот такие комманды: http://tablock.org.ua/post/94/Проброс+USB+устройств+по+сети+в+Arch+Linux+с+помощью+USBIP