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

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

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

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

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

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

Как добиться желаемого?

решение1

Я работаю с USB-устройствами, предоставляя определенной группе доступ ко всем из них.

Как root:

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

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

решение2

Согласен, что создание правил соответствия с использованием VID/PID не является определенным решением. Но вы можете использовать несколько устройств в одном правиле, не нацеливаясь слепо на все USB-устройства, как вы это делали. Пример использования DRIVERимени ( usb-storage, usbhid,..) или KERNELимени ( tty*, sd*,..) даже с использованием минимального регулярного выражения ( 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

решение3

Вот самое простое решение для разблокировки доступа к вашему оборудованию:

sudo chmod -R 777 /dev/bus/usb/

Связанный контент