
У меня есть программа на основе 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*
).
Вам следует искать сходства в их атрибутах.
- Удалите все эти устройства.
Сохраните текущий список устройств в
/dev
ls /dev > /tmp/dev_list0.txt
Подключите одно из целевых устройств.
Сохранить список устройств в другом файле
ls /dev > /tmp/dev_list.txt
Сравнение файлов,
>
добавленное устройство,<
удаленное устройство$ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt 85a86,87 > sdc > serial 89a92,93 > sg4 > sg5 93a98 > sr1 194a200,201 > ttyUSB0 > ttyUSB1
Это 3G-модем.
Проверьте атрибут для всех необходимых вам интерфейсов, например:
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/