Настроить 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 (текущий выпуск и только один, на котором я проверял это).

  1. Найдите свой idVendor и idProduct с помощью lsusb.
    • Это будут 2 шестнадцатеричных значения после "ID", разделенных двоеточием. Я добавляю сканер. lsusb дал мне:
      Автобус 001 Устройство 011: ID 04b8:014a Seiko Epson Corp. 
  2. В качестве пользователя root добавьте файл в /etc/udev/rules.d
    • Что-то вроде 50-usb-epsonscanner.rules
    • Расширение должно быть ".rules"
  3. В этот файл добавьте:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Но с вашими шестнадцатеричными значениями idVendor и idProduct.
    • Обратите внимание, что это "ATTRS", а не "ATTR".
  4. 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)

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