У меня есть находящаяся в libusb программа, которая не может открыть USB-устройства на недавно установленной Ubuntu, потому что она испытывает недостаток в полномочиях.
Это решение будет, вероятно, работать на меня, но оно требует вручную определения каждого устройства - и у меня есть довольно многие. Таким образом, я попробовал это (в файле /etc/udev/rules.d/41-cvs-permissions.rules
):
SUBSYSTEM=="usb", MODE:="0666"
Я опустил VID и PID, надеясь, что он просто применит правило ко ВСЕМ устройствам. Это определенно имеет некоторый эффект, но эффект является довольно странным: вместо того, чтобы обнаружить 5 устройств, которые это не может открыть, libusb только, обнаруживает 2 теперь - оба - хост-контроллеры USB, не существующие устройства.
Как достигнуть того, что я хочу?
Путем я имею дело с USB-устройствами, должен дать определенный групповой доступ всем им.
Как корень:
echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules
По существу то, что это делает, предоставить доступ для чтения и доступ для записи для любого USB-устройства членам plugdev группы.
Я соглашаюсь, что создание соответствия правила с помощью VID/PID не является определенным решением. Но Вы можете очень несколько устройств в том же правиле, не будучи нацелен вслепую на все USB-устройства путем, Вы сделали. Использование в качестве примера DRIVER
имя (usb-storage
, usbhid
..) или KERNEL
имя (tty*
, sd*
..) даже использование минимального regex (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