Налаштувати udev для зміни дозволів на пристрої USB HID?


21

У мене шкала USB, USB HID. На даний момент, коли він підключений до мережі, дозволи дозволяють користувачеві доступу лише до нього. Як я можу налаштувати udev, щоб хтось мав доступ до цього пристрою? У мене є ідентифікатори постачальника та продукту, але я хотів би порівняти їх на основі типу HID.

На даний момент у мене виникають проблеми з пошуком будь-якого існуючого правила, яке стосується цього (я похвалився за "hidraw" /lib/udev/rules.dі /etc/udev/rules.d, серед іншого).

Відповіді:


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робить. (Зручна діагностика:, 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".
El Zorko

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"

Результати в: Кожен користувач може отримати доступ до всіх прихованих пристроїв від постачальника 0x16c0

Докладніше див: Документи


2
:=не для порівнянь. Документи кажуть: "Призначте значення нарешті; забороніть будь-які подальші зміни".
Лукас

5

Якщо вам потрібно змінити (як і я) ttyACM0дозволи, це мої налаштування:

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

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


Так, опція Kernel працює для більшості HID-пристроїв, краще, ніж USB-підсистема
Muriuki David,

2

Якщо це пристрій HIDRAW, ви повинні

chmod 0666 /dev/hidrawX

де X - номер прихованого пристрою, наприклад, hidraw0. Ви можете зробити

ls /dev/hid*

щоб побачити список :) Або просто зробити

sudo chmod 0666 /dev/hidraw*

встановлювати для всіх пристроїв ходу, мабуть, не рекомендується.


2

Оновлення / уточнення Ubuntu 18.04:

Відповідь Кіса Кука близька, але вимагає 2 змін для роботи в 18.04 (поточний випуск і лише одна, яку я перевірив на цьому).

  1. Знайдіть свій idVendor та idProduct за допомогою lsusb .
    • Це будуть два шістнадцяткові значення після "ID", розділені двокрапкою. Я додаю сканер. lsusb дав мені:
      Автобус 001 Пристрій 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Як корінь додайте файл у /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. Повторний вхід. Не потрібно перезавантажувати.

ATTRSяк для продавця, так і для ідентифікатора продукту? Тоді зразок вашого коду неправильний (так само, як ви заявляєте два рядки пізніше).
neo post modern

Тільки другий - ATTR. Тут працює. Гадаю, це помилка, яка може змінитися без попередження.
gatohaus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.