Как предоставить доступ программного обеспечения к каким-либо USB-устройствам?

У меня есть находящаяся в libusb программа, которая не может открыть USB-устройства на недавно установленной Ubuntu, потому что она испытывает недостаток в полномочиях.

Это решение будет, вероятно, работать на меня, но оно требует вручную определения каждого устройства - и у меня есть довольно многие. Таким образом, я попробовал это (в файле /etc/udev/rules.d/41-cvs-permissions.rules):

SUBSYSTEM=="usb", MODE:="0666"

Я опустил VID и PID, надеясь, что он просто применит правило ко ВСЕМ устройствам. Это определенно имеет некоторый эффект, но эффект является довольно странным: вместо того, чтобы обнаружить 5 устройств, которые это не может открыть, libusb только, обнаруживает 2 теперь - оба - хост-контроллеры USB, не существующие устройства.

Как достигнуть того, что я хочу?

3
задан 13 April 2017 в 15:23

2 ответа

Путем я имею дело с USB-устройствами, должен дать определенный групповой доступ всем им.

Как корень:

echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules

По существу то, что это делает, предоставить доступ для чтения и доступ для записи для любого USB-устройства членам plugdev группы.

1
ответ дан 1 December 2019 в 17:03

Я соглашаюсь, что создание соответствия правила с помощью VID/PID не является определенным решением. Но Вы можете очень несколько устройств в том же правиле, не будучи нацелен вслепую на все USB-устройства путем, Вы сделали. Использование в качестве примера DRIVER имя (usb-storage, usbhid..) или KERNEL имя (tty*, sd*..) даже использование минимального regex (sd[a-z][0-9]*, usb*).

Необходимо искать общие черты в их атрибутах.

  1. Удалите все те устройства
  2. Сохраните текущий список устройств в /dev

    ls /dev > /tmp/dev_list0.txt
    
  3. Включите одно из целевых устройств

  4. Сохраните список устройств в другом файле

    ls /dev > /tmp/dev_list.txt
    
  5. Сравните файлы, > добавленное устройство, < удаленное устройство

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    Это - 3G модем.

  6. Проверьте атрибут на все интерфейсы, в которых Вы нуждаетесь, пример:

    udevadm info --attribute-walk --name=/dev/ttyUSB0
    

Сделайте то же для всех устройств, которые Вы хотите. Если Вы не можете выяснить, как, загрузите их udevadm info --attribute-walk --name=... вывод и связывает их с Вашим вопросом.

Обратите внимание, что, не все USB-устройства создают узел в /dev. Некоторые, которых Вы имеете, ищут их в дереве SYSFS /sys. Затем проверьте их использование атрибутов --path

udevadm info --attribute-walk --path=...

Используя те же шаги как выше Вас может проверить который узлы устройства, созданные путем контроля udev события:

udevadm monitor
1
ответ дан 1 December 2019 в 17:03

Другие вопросы по тегам:

Похожие вопросы: