суббота, 27 октября 2012 г.

Proxmox. Проброс usb-устройств в гостевую виртуальную машину. На примере ключей 1С HASP

 обновлено 16.05.13

Немного теории о usb:
"Физическое соединение устройств осуществляется по топологии многоярусной звезды. Центром каждой звезды является хаб, каждый кабельный сегмент соединяет две точки - хаб с другим хабом или с функцией. В системе имеется один (и только один) хост-контроллер, расположенный в вершине пирамиды устройств и хабов. Хост-контроллер интегрируется с корневым хабом (Root Hub), обеспечивающим одну или несколько точек подключения - портов." — источник

Наша задача выяснить, на какой шине (bus) и к какому порту (port) подключены наши usb-устройства. В качестве примера приведён проброс двух ключей HASP 1С Предприятия 8 (серверный и клиентский)

1. Вставляем usb-устройства;

2. Далее есть два способа выяснения связки шина-порт:
а) В консоли proxmox сервера выполняем "lsusb". В результате выясним имя устройств и найдём среди них свои:
...
Bus 006 Device 003: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06
Bus 006 Device 002: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 0557:2221 ATEN International Co., Ltd
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
...

Искомое: 2 ключа Aladdin Knowledge Systems HASP v0.06 на шине 6

Теперь выясняем, на каких портах "висят" ключи. Выполняем "lsusb -t", которая нам выдаст древовидную структуру:
...
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=vend., Driver=usbfs, 1.5M
    |__ Port 2: Dev 3, If 0, Class=vend., Driver=usbfs, 1.5M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 2: Dev 2, If 0, Class=HID, Driver=usbhid, 12M
    |__ Port 2: Dev 2, If 1, Class=HID, Driver=usbhid, 12M

...
Как видим, устройства (Device) 2 и 3 на шине 6 находятся на портах 1 и 2. Соответственно, пробрасывать будем 6-1 и 6-2.

б) Короткий способ.
Выполняем "qm monitor НОМЕР_ВИРТУАЛЬНОЙ_МАШИНЫ",
qm>
Теперь выполняем команду "info usbhost"
...
  Bus 5, Addr 2, Port 2, Speed 12 Mb/s
    Class 00: USB device 0557:2221, Hermon USB hidmouse Device
  Bus 6, Addr 2, Port 1, Speed 1.5 Mb/s
    Vendor Specific: USB device 0529:0001, HASP 2.17
  Bus 6, Addr 3, Port 2, Speed 1.5 Mb/s
    Vendor Specific: USB device 0529:0001, HASP HL 3.25

...
 Вот они наши HASP-ключи, опять же на шине 6 и портах 1 и 2.
Выходим командной quit либо сочетанием Ctrl+C

3. Редактируем на сервере файл /etc(/pve)/qemu-server/NNN.conf (где NNN-номер виртуальной машины) и добавляем следующие строки:
Для версии proxmox < 2.0
args: -device usb-host,hostbus=6,hostport=1
args: -device usb-host,hostbus=6,hostport=2
 
Для версии proxmox > 2.0 
usb0: 6-1
usb1: 6-2

4. Перезагружаем виртуальную машину.

5. Проверить, подцепились ли устройства, можно снова зайдя в qm monitor (как в п. 2б) и выполнив команду "info usb"
...
  Device 0.1, Port 6, Speed 12 Mb/s, Product QEMU USB Tablet
  Device 0.1, Port 1, Speed 1.5 Mb/s, Product HASP 2.17
  Device 0.2, Port 2, Speed 1.5 Mb/s, Product HASP HL 3.25

...

P.S. Также usb-устройство можно подключить, добавив в конец NNN.conf такое:
usb0: host=0529:0001 
 , где 0529:0001 - это device ID, взятый из п. 2а
Плюсы: при перемещении usb-устройства в другой порт не надо ничего перенастраивать;
Минусы: этот способ не годится, если у вас несколько устройств с одинаковыми device ID, как в указанном выше примере

11 комментариев:

  1. Hi!
    У вас не возникала такая проблема, что 1С сервер не видел таким образом прокинутого ключа?
    У меня проблема с подключением Aladdin 0529 ключа в Proxmox 2.3 на win 2008 64
    В устройставх прописывается, дрова ставятся, но в аладдин мониторе не появляется.

    ОтветитьУдалить
    Ответы
    1. Привет! Покажите выдачу lsusb и конфиг виртуалки

      Удалить
    2. А также выполните qm monitor NNN и покажите вывод двух команд:
      info usbhost
      info usb

      Удалить
    3. Такая же проблема, в винду виртуальную пробрасывается, там отображается, тесты драйвера проходит, а в мониторе не видится.

      Удалить
  2. Странное дело, пробую сделать проброс в виртуальную машину флэшки, но при добавлении usb1: host=nnnn:nnnn для виндовой машины это приводит к ее моментальному падению.
    Тоже самое делал в Linux, все прекрасно работает.
    В винде падение машины происходит при попытке активировать устройство.
    Подскажите куда копать.

    ОтветитьУдалить
    Ответы
    1. Какая у вас версия proxmox?
      Попробуйте подключить не по device ID, а по связке bus-port, а также разные номера usb (usb0: , usb2: ).

      Удалить
  3. Спасибо за оперативный ответ. Сегодня пробросывал принтер. Все получилось. Действительно, достаточно было прописать usb0. Работает как по hwID так и по ШИНА-ПОРТ. Жаль что виндовс так реагирует, в Линуксе номер usb никак на работоспособность не влияет.

    ОтветитьУдалить
    Ответы
    1. Пожалуйста. Рад, что смог помочь.

      Удалить
  4. (Да, версия ProxmoxVE установлена 3 со всеми обновами)

    ОтветитьУдалить
  5. Бы. С флэшкой оказалось не работает. :( Меняю ID принтера на ID флэхи - ВМ с виндой падает.Смена номера usb не помогает.

    На официальной вики для решения этой задачи рекомендуют ставить специальный сервер для проброса.

    ОтветитьУдалить
  6. Пункт 4. Перезагрузить ВМ не сработал.
    Надо включить и выключить ВМ.

    ОтветитьУдалить