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, как в указанном выше примере