Configurare udev per modificare le autorizzazioni sul dispositivo USB HID?


21

Ho una bilancia USB, un USB HID. Attualmente, quando è collegato, le autorizzazioni consentono solo al superutente di accedervi. Come posso configurare udev per consentire a chiunque di accedere a questo dispositivo? Ho il fornitore e gli ID prodotto, ma vorrei abbinarlo in base al tipo HID.

In questo momento, ho difficoltà a trovare qualsiasi regola esistente applicabile a questo (ho cercato "hidraw" /lib/udev/rules.de /etc/udev/rules.d, tra le altre cose).

Risposte:


21

Normalmente, questo viene fatto aggiungendo a /etc/udev/rules.dun file forse chiamato 50-usb-scale.confcon contenuti come questo:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

Dove HEX1 e HEX2 vengono sostituiti rispettivamente con il fornitore e l'ID prodotto.

Per abbinare invece il tipo di interfaccia, puoi provare a sostituire ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"con una corrispondenza per bInterfaceClassessere 03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

Ma attenzione, catturerà anche mouse e tastiere.


4
Su Ubuntu 14.04 devi usare MODE: = "0666", senza i due punti, la regola non fa nulla.
Edwin,

2
Il 14.04 questo file deve avere .rulesun'estensione. Un file con .confestensione non funzionerà.
Cherno,

1
utilizzare lsusb -vvvper ottenere idProduct e idVendor
Xavier13

2
Dal momento che questa domanda è abbastanza popolare nell'output di Google ... Penso che dovrebbe essere ATTRS, non ATTR - almeno questa modifica l'ha risolto per me.
infthi,

2
Su 14.04.5 LTS ho trovato: lsusbè un buon inizio per vedere cosa sono connessi e gli ID. idVendore le idProductcorrispondenze sembrano sensibili al maiuscolo / minuscolo , quindi l'ID DA77non funziona per me ma da77funziona. (Pratica diagnostica udevadm info --attribute-walk /dev/bus/usb/008/023:, bus 008 dispositivo 023 il mio esempio; lsusbper il tuo.) Dopo aver aggiunto una regola sudo udevadm control --reload-rulese quindi sudo udevadm triggerevita il riavvio: le modifiche sono successive . ATTR vs ATTRS non ha fatto probabilità. Il mio file .rules si legge: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko,

7

Solo per il riassunto:

Puoi filtrare per:

  • idVendor
  • idProduct
  • seriale

E usa:

== Confronta per l'uguaglianza.

! = Confronta per disuguaglianza.

= Assegna un valore a una chiave. Le chiavi che rappresentano un elenco vengono ripristinate e viene assegnato solo questo singolo valore.

+ = Aggiungi il valore a una chiave che contiene un elenco di voci.

: = Assegna finalmente un valore a una chiave; non consentire eventuali modifiche successive.

Puoi dare a un dispositivo specifico un nuovo percorso specifico in / dev / ...
Esempio:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

Risultati in:

Puoi accedere al dispositivo tramite '/ dev / hiddevx' o tramite '/ dev / myhid' facilmente, tutti gli utenti del gruppo 'cdrom' possono leggere dal dispositivo. Il proprietario "user28" può leggere e scrivere.

o più semplice:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

Risultati in: ogni utente può accedere a ogni hiddevice dal fornitore 0x16c0

Per i dettagli, consultare: Documenti


2
:=non è per confronti. I documenti dicono "Assegna finalmente un valore a una chiave; non consentire eventuali modifiche successive".
Lucas,

5

Nel caso in cui sia necessario modificare le ttyACM0autorizzazioni (come me) , queste sono le mie impostazioni:

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

Non è riuscito quando ho provato a specificare il fornitore e l'ID prodotto. Non sono sicuro del perché.


Sì, l'opzione Kernel funziona per la maggior parte dei dispositivi HID, meglio di quello del sottosistema USB
Muriuki David

2

Se è un dispositivo HIDRAW, devi farlo

chmod 0666 /dev/hidrawX

dove X è il numero del dispositivo nascosto, ad esempio hidraw0. tu puoi fare

ls /dev/hid*

per vedere un elenco :) O semplicemente

sudo chmod 0666 /dev/hidraw*

per impostare per tutti i dispositivi hidraw, probabilmente non raccomandato.


2

Aggiornamento / chiarimento di Ubuntu 18.04:

La risposta di Kees Cook è vicina ma richiede 2 modifiche per funzionare nel 18.04 (la versione attuale e solo una su cui l'ho testata).

  1. Trova idVendor e idProduct con lsusb .
    • Questi saranno i 2 valori esadecimali dopo "ID", separati da due punti. Sto aggiungendo uno scanner. lsusb mi ha dato:
      Bus 001 Dispositivo 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Come root aggiungi un file a /etc/udev/rules.d
    • Qualcosa come 50-usb-epsonscanner.rules
    • L'estensione deve essere ".rules"  
  3. In quel file aggiungi:
    SOTTOSISTEMA == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Ma con idVendor e idProduct valori esadecimali.
    • Nota che è "ATTRS" non "ATTR".
  4. Re-login. Non è necessario riavviare.

ATTRSsia per il fornitore che per l'ID prodotto? Quindi l'esempio di codice è errato (proprio come si affermano due righe in seguito).
neo post modern,

Solo il secondo è ATTR. Funziona qui. Immagino sia un errore che potrebbe cambiare senza preavviso.
Gatohaus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.