Udev so konfigurieren, dass Berechtigungen auf USB-HID-Geräten geändert werden?

21

Ich habe eine USB-Waage, einen USB-HID. Derzeit kann der Superuser nur mit den Berechtigungen darauf zugreifen, wenn es eingesteckt ist. Wie kann ich udev so konfigurieren, dass jeder auf dieses Gerät zugreifen kann? Ich habe die Hersteller- und Produkt-IDs, möchte sie jedoch stattdessen anhand des HID-Typs abgleichen.

Im Moment habe ich Probleme, eine bestehende Regel zu finden, die darauf zutrifft (ich habe unter anderem nach "Hidraw" in /lib/udev/rules.dund gegriffen /etc/udev/rules.d).

Erjiang
quelle

Antworten:

21

Normalerweise wird dazu /etc/udev/rules.deine Datei 50-usb-scale.confmit folgendem Inhalt hinzugefügt :

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

Wobei HEX1 und HEX2 durch die Hersteller- bzw. Produkt-ID ersetzt werden.

Um stattdessen auf der Schnittstelle übereinstimmen, könnten Sie versuchen , zu ersetzen ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"mit einem Spiel für bInterfaceClasssein 03(HID):

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

Aber seien Sie gewarnt, das wird auch Mäuse und Tastaturen fangen.

Kees Cook
quelle
4
Unter Ubuntu 14.04 müssen Sie MODE: = "0666" verwenden, ohne Doppelpunkt macht die Regel nichts.
EdwinW
2
Am 14.04 muss diese Datei eine .rulesEndung haben. Eine Datei mit einer .confErweiterung funktioniert nicht.
Cherno
1
mit lsusb -vvvidProduct und idVendor erhalten
Xavier13
2
Da diese Frage in der Google-Ausgabe sehr beliebt ist ... Ich denke, es sollte sich um ATTRS handeln, nicht um ATTR - zumindest wurde sie durch diese Änderung für mich behoben.
Infthi
2
Am 14.04.5 LTS fand ich: lsusbist ein guter Anfang, um zu sehen, was verbunden ist und IDs. idVendorBei idProductÜbereinstimmungen wird zwischen Groß- und Kleinschreibung unterschieden , daher DA77funktioniert ID bei mir nicht, da77aber. (Handliche Diagnose: udevadm info --attribute-walk /dev/bus/usb/008/023Bus 008 Gerät 023 mein Beispiel; lsusbfür Ihr.) Nach dem Hinzufügen einer Regel sudo udevadm control --reload-rulesund dann sudo udevadm triggervermeidet Neustart: Änderungen sind Sekunden danach . ATTR vs ATTRS machten keine Quoten. Meine .rules Datei lautet: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko
7

Nur für die Zusammenfassung:

Sie können filtern nach:

  • idVendor
  • idProduct
  • seriell

Und benutze:

== Vergleiche für Gleichheit.

! = Vergleiche auf Ungleichung.

= Weisen Sie einem Schlüssel einen Wert zu. Schlüssel, die eine Liste darstellen, werden zurückgesetzt und nur dieser eine Wert wird zugewiesen.

+ = Wert zu einem Schlüssel hinzufügen, der eine Liste von Einträgen enthält.

: = Weisen Sie einem Schlüssel schließlich einen Wert zu; spätere Änderungen nicht zulassen.

Sie können einem bestimmten Gerät in / dev / ... einen bestimmten neuen Pfad zuweisen.
Beispiel:

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

Ergebnisse in:

Sie können einfach über '/ dev / hiddevx' oder über '/ dev / myhid' auf das Gerät zugreifen. Jeder Benutzer in der Gruppe 'cdrom' kann vom Gerät lesen. Der Besitzer 'user28' kann lesen und schreiben.

oder am einfachsten:

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

Ergebnis: Jeder Benutzer kann von Vendor 0x16c0 aus auf jedes Gerät zugreifen

Einzelheiten finden Sie unter: Dokumente

rundekugel
quelle
2
:=ist nicht für Vergleiche. In der Dokumentation heißt es: "Weisen Sie einem Schlüssel endgültig einen Wert zu; lassen Sie spätere Änderungen nicht zu."
Lucas
5

Für den Fall, dass Sie (wie ich) ttyACM0Berechtigungen ändern müssen , sind dies meine Einstellungen:

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

Es ist fehlgeschlagen, als ich versucht habe, den Anbieter und die Produkt-ID anzugeben. Ich bin mir nicht sicher warum.

Rodo
quelle
Ja, die Kernel-Option funktioniert für die meisten HID-Geräte, besser als für das USB-Subsystem 1
Muriuki David
2

Wenn es ein HIDRAW-Gerät ist, müssen Sie

chmod 0666 /dev/hidrawX

Wobei X die versteckte Gerätenummer ist, zB hidraw0. du kannst tun

ls /dev/hid*

um eine Liste zu sehen :) Oder einfach machen

sudo chmod 0666 /dev/hidraw*

für alle hidraw geräte einstellen, wahrscheinlich nicht zu empfehlen.

Muriuki David
quelle
2

Ubuntu 18.04 Update / Klarstellung:

Die Antwort von Kees Cook ist nah, aber es sind 2 Änderungen erforderlich, um in 18.04 zu funktionieren (die aktuelle Version und nur eine, auf der ich dies getestet habe).

  1. Finden Sie Ihren idVendor und Ihr idProduct mit lsusb .
    • Dies sind die 2 Hex-Werte nach "ID", getrennt durch einen Doppelpunkt. Ich füge einen Scanner hinzu. lsusb gab mir:
      Bus 001 Gerät 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Fügen Sie als root eine Datei zu /etc/udev/rules.d hinzu
    • So etwas wie 50-usb-epsonscanner.rules
    • Die Erweiterung muss ".rules" sein  
  3. In dieser Datei hinzufügen:
    SUBSYSTEM == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Aber mit Ihren Hex-Werten idVendor und idProduct.
    • Beachten Sie, dass es "ATTRS" nicht "ATTR" ist.
  4. Erneut anmelden. Kein Neustart erforderlich.
gatohaus
quelle
ATTRSsowohl für Lieferanten- als auch für Produkt-ID? Dann ist Ihr Codebeispiel falsch (genau wie Sie zwei Zeilen später angeben).
Neo Post Modern
Nur der zweite ist ATTR. Funktioniert hier. Vermutlich ist es ein Fehler, der sich ohne Vorwarnung ändern könnte.
gatohaus