Настроить udev для изменения разрешений на устройстве USB HID?

21

У меня есть USB-весы, USB HID. В настоящее время, когда он подключен, разрешения разрешают только суперпользователю доступ к нему. Как настроить udev, чтобы кто-нибудь мог получить доступ к этому устройству? У меня есть идентификаторы поставщика и продукта, но я бы хотел сопоставить их на основе типа HID.

Прямо сейчас у меня возникают проблемы с поиском любого существующего правила, которое применимо к этому (я выбрал «hidraw» /lib/udev/rules.dи /etc/udev/rules.d, кроме всего прочего).

erjiang
источник

Ответы:

21

Обычно это делается путем добавления в /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"

Но имейте в виду, что мыши и клавиатуры тоже будут ловить.

Кис Кук
источник
4
В Ubuntu 14.04 вы должны использовать MODE: = "0666", без двоеточия правило ничего не делает.
EdwinW,
2
14.04 этот файл должен иметь .rulesрасширение. Файл с .confрасширением не будет работать.
Черно
1
использовать, lsusb -vvvчтобы получить idProduct и idVendor
Xavier13
2
Так как этот вопрос довольно популярен в выводе Google ... Я думаю, что это должны быть ATTRS, а не ATTR - по крайней мере, это изменение исправило это для меня.
Infthi
2
14.04.5 LTS я обнаружил: lsusbэто хорошее начало, чтобы увидеть, что связано и идентификаторы. idVendorи idProductсовпадения кажутся чувствительными к регистру , поэтому ID DA77не работает для меня, но da77работает. (Handy диагностики: udevadm info --attribute-walk /dev/bus/usb/008/023, автобус 008 устройства 023 мой пример; lsusb. Для вас) После добавления правила, sudo udevadm control --reload-rulesа затем sudo udevadm triggerпозволяет избежать перезагрузки: изменения секунд после этого. ATTR против ATTRS не делали шансов. Мой .rules файл гласит: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
Эль Зорко
7

Просто для краткости:

Вы можете фильтровать по:

  • 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

Подробнее см .: Документы

rundekugel
источник
2
:=не для сравнения. Документы говорят: «Присвойте значение ключу окончательно; запретите любые последующие изменения».
Лукас
5

В случае, если вам нужно изменить (как я) ttyACM0разрешения, это мои настройки:

KERNEL=="ttyACM0", MODE="0777"

Не удалось, когда я попытался указать поставщика и идентификатор продукта. Я не уверен почему.

Rodo
источник
Да, опция Kernel работает для большинства устройств HID, лучше, чем у подсистемы USB
Muriuki David
2

Если это устройство HIDRAW, вы должны

chmod 0666 /dev/hidrawX

где X - номер скрытого устройства, например, hidraw0. ты можешь сделать

ls /dev/hid*

чтобы увидеть список :) Или просто сделать

sudo chmod 0666 /dev/hidraw*

устанавливать для всех устройств hidraw, вероятно, не рекомендуется.

Муриуки Дэвид
источник
2

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 Войти. Нет необходимости перезагружаться.
gatohaus
источник
ATTRSкак для поставщика, так и для идентификатора продукта? Тогда ваш пример кода неверен (точно так же, как вы указали две строки позже).
Нео пост модерн
Просто второй - ATTR. Работает здесь Я предполагаю, что это ошибка, которая может измениться без предупреждения.
Гатохаус