Настроить udev для изменения разрешений на устройстве USB HID?
У меня есть USB-весы, USB HID. В настоящее время, когда он подключен, разрешения разрешают только суперпользователю доступ к нему. Как настроить udev, чтобы кто-нибудь мог получить доступ к этому устройству? У меня есть идентификаторы поставщика и продукта, но я бы хотел сопоставить их на основе типа HID.
Прямо сейчас у меня возникают проблемы с поиском любого существующего правила, которое применимо к этому (я выделил "hidraw" в /lib/udev/rules.d
а также /etc/udev/rules.d
кроме всего прочего).
6 ответов
Обычно это делается путем добавления /etc/udev/rules.d
файл может быть назван 50-usb-scale.conf
с таким содержанием:
SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"
Где HEX1 и HEX2 заменены на поставщика и идентификатор продукта соответственно.
Чтобы соответствовать типу интерфейса вместо этого, вы можете попробовать заменить ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"
со спичкой для bInterfaceClass
являющийся 03
(HID):
SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"
Но имейте в виду, что мыши и клавиатуры тоже будут ловить.
Просто для краткости:
Вы можете фильтровать по:
- idVendor
- idProduct
- последовательный
И использовать:
== Сравните на равенство.
! = Сравните по неравенству.
= Присвоить значение ключу. Ключи, представляющие список, сбрасываются, и присваивается только это единственное значение.
+ = Добавить значение к ключу, который содержит список записей.
: = Окончательно назначить значение ключу; запретить любые последующие изменения.
Вы можете указать конкретному новому устройству новый путь в / dev /...
Пример:
KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"
Результаты в:
Вы можете легко получить доступ к устройству через "/ dev / hiddevx" или через "/ dev / myhid", каждый пользователь в группе "cdrom" может читать с устройства. Владелец 'user28' может читать и писать.
или самый простой:
KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"
Результат: каждый пользователь может получить доступ к каждому устройству hiddevice от поставщика 0x16c0
Подробнее см.: Документы
В случае, если вам нужно изменить (как я) ttyACM0
разрешения, это мои настройки:
KERNEL=="ttyACM0", MODE="0777"
Не удалось, когда я попытался указать поставщика и идентификатор продукта. Я не уверен почему.
Ubuntu 18.04 обновление / уточнение:
Ответ Киса Кука близок, но требует 18 изменений для работы в 18.04 (текущий выпуск и только один, на котором я проверял это).
- Найдите свой idVendor и idProduct с помощью lsusb.
- Это будут 2 шестнадцатеричных значения после "ID", разделенных двоеточием. Я добавляю сканер. lsusb дал мне:
Автобус 001 Устройство 011: ID 04b8:014a Seiko Epson Corp.
- Это будут 2 шестнадцатеричных значения после "ID", разделенных двоеточием. Я добавляю сканер. lsusb дал мне:
- В качестве пользователя root добавьте файл в /etc/udev/rules.d
- Что-то вроде 50-usb-epsonscanner.rules
- Расширение должно быть ".rules"
- В этот файл добавьте:
SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
Но с вашими шестнадцатеричными значениями idVendor и idProduct.- Обратите внимание, что это "ATTRS", а не "ATTR".
- Re-входа. Нет необходимости перезагружаться.
Если это устройство HIDRAW, вы должны
chmod 0666 /dev/hidrawX
где X - номер скрытого устройства, например, hidraw0. ты можешь сделать
ls /dev/hid*
чтобы увидеть список:) Или просто сделать
sudo chmod 0666 /dev/hidraw*
устанавливать для всех устройств hidraw, вероятно, не рекомендуется.
Для устройства USB tty мне нужно было сделать:
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE="0666", GROUP="bkg"
Принятый ответ был хорош, но нуждался в
SUBSYSTEM
быть
tty
Вещь, которая помогла при отладке, заключалась в том, чтобы увидеть, что делает UDEV, выполнив:
udevadm test $(udevadm info -q path -n /dev/ttyUSB0)