Wie erlaube ich Softwarezugriff auf alle USB-Geräte?

Wie erlaube ich Softwarezugriff auf alle USB-Geräte?

Ich habe ein libusb-basiertes Programm, das USB-Geräte auf einem frisch installierten Ubuntu nicht öffnen kann, weil ihm die Berechtigungen fehlen.

Diese Lösungwird bei mir wahrscheinlich funktionieren, aber ich muss jedes einzelne Gerät manuell angeben - und ich habe ziemlich viele. Also habe ich Folgendes versucht (in einer Datei /etc/udev/rules.d/41-cvs-permissions.rules):

SUBSYSTEM=="usb", MODE:="0666"

Ich habe VID und PID weggelassen, in der Hoffnung, dass die Regel einfach auf ALLE Geräte angewendet wird. Es hat definitiv einen gewissen Effekt, aber der Effekt ist ziemlich seltsam: Anstatt 5 Geräte zu erkennen, die es nicht öffnen kann, erkennt libusb jetzt nur noch 2 – beide sind USB-Hostcontroller, keine tatsächlichen Geräte.

Wie erreiche ich, was ich will?

Antwort1

Bei USB-Geräten verfahre ich so, dass ich einer bestimmten Gruppe Zugriff auf alle Geräte gewähre.

Als Root:

echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules

Dies bedeutet im Wesentlichen, dass den Mitgliedern der Plugdev-Gruppe Lese- und Schreibzugriff auf alle USB-Geräte gewährt wird.

Antwort2

Ich stimme zu, dass die Regelübereinstimmung mit VID/PID keine definitive Lösung ist. Aber Sie können mehrere Geräte in derselben Regel verwenden, ohne blind alle USB-Geräte anzusprechen, wie Sie es getan haben. Beispiel: Verwendung von DRIVERName ( usb-storage,, usbhid..) oder KERNELName ( tty*,, sd*..), sogar Verwendung von minimalen regulären Ausdrücken ( sd[a-z][0-9]*, usb*).

Sie sollten nach Ähnlichkeiten in ihren Eigenschaften suchen.

  1. Entfernen Sie alle diese Geräte
  2. Speichern Sie die aktuelle Geräteliste in/dev

    ls /dev > /tmp/dev_list0.txt
    
  3. Schließen Sie eines der Zielgeräte an

  4. Speichern Sie die Geräteliste in einer anderen Datei

    ls /dev > /tmp/dev_list.txt
    
  5. Dateien vergleichen, >Gerät hinzugefügt, <Gerät entfernt

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    Dies ist ein 3G-Modem.

  6. Überprüfen Sie das Attribut für alle Schnittstellen, die Sie benötigen, Beispiel:

    udevadm info --attribute-walk --name=/dev/ttyUSB0
    

Machen Sie dasselbe für alle gewünschten Geräte. Wenn Sie nicht herausfinden können, wie das geht, laden Sie bitte deren udevadm info --attribute-walk --name=...Ausgabe hoch und verknüpfen Sie sie mit Ihrer Frage.

Beachten Sie, dass nicht alle USB-Geräte einen Knoten in erstellen /dev. Einige müssen Sie im SYSFS-Baum suchen /sys. Überprüfen Sie dann ihre Attribute mit--path

udevadm info --attribute-walk --path=...

Mit den gleichen Schritten wie oben können Sie überprüfen, welche Geräteknoten durch die Überwachung udevvon Ereignissen erstellt wurden:

udevadm monitor

Antwort3

So entsperren Sie am einfachsten den Zugriff auf Ihre Hardware:

sudo chmod -R 777 /dev/bus/usb/

verwandte Informationen