2016-11-14 3 views
0

Getestet auf Kubuntu 16.04 nur 64 Bit. Ich habe eine Anwendung, deren Quelle ich nicht kontrolliere. Es verwendet einige Libusb Anrufe, die in z endet .:libusb Anrufe ohne Sudo mit udev-Regeln

libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/001/031: Permission denied 
libusb: error [_get_usbfs_fd] libusb requires write access to USB device nodes.         

Bei der Ausführung der obigen Anmeldung als Root erwähnt, ist es wie erwartet funktioniert. Wenn ich ändern Sie die Rechte der in Bezug auf Datei wie:

sudo chmod a+w /dev/bus/usb/001/031 

dann wird die Anwendung mit Standard-Benutzerrechten arbeiten (bis ich trennen/mein USB-Gerät wieder an).

Jetzt suche ich nach einem Weg, z. automatisch das chmod a+w jedes Mal, wenn das spezifische USB-Gerät eingesteckt ist. Könnte dies möglich sein, indem Sie eine bestimmte udev-Regel schreiben?

Vielleicht andere Lösungen die libusb Aufrufe ohne Root-Rechte?

Lösung: Basierend auf David Graysons Antwort hatte ich jetzt eine zusätzliche Zeile mit SUBSYSTEM=="usb" zu meiner Regeldatei hinzugefügt. Meine Regeln Datei sieht nun endlich wie folgt aus:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666" 
SUBSYSTEM=="usb", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666" 

Antwort

2

Ich empfehle, dass Sie eine neue Datei in /etc/udev/rules.d mit dem Namen usb.rules hinzufügen. Es sollte folgenden Inhalt haben:

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

Dies wird alle USB-Geräte lesbar und schreibbar für alle Benutzer machen.

Sie können es auch auf bestimmte USB-Geräte eingrenzen, indem Sie die in Ignacios Antwort erwähnten Attribute idVendor und idProduct verwenden.

+0

wie ich verstehe, die 'MODE =' ändert nur die Berechtigungen der '/ dev/ttyACM ...' Datei, aber nicht die der Einträge in '/ dev/bus/usb/...' – Joe

+0

In der Unix-Welt, "Modus" ist ein allgemeiner Begriff und bezieht sich auf Dateiberechtigungen. Es bezieht sich nicht auf ACM-Geräte. Ich habe Regeln wie diese erfolgreich mit libusb benutzt. Hast du meine Regel versucht? –

+0

Yeah, 'SUBSYSTEM ==" usb "' war der Trick, um folgendes 'MODE = ...' und 'GROUP = ...' effect auf '/ dev/bus/usb/...' zu machen. Bis vor kurzem hatte ich 'SUBSYSTEM ==" tty "' benutzt. – Joe

1

Unter der Annahme, Kubuntu 16.04 verwendet PolicyKit, die in einer Datei in /etc/udev/rules.d folgenden setzen, es ähnlich wie die Benennung von Dateien, die bereits existieren:

ersetzen die zwei Sätze von "xxxx" mit der Hersteller-ID und der Produkt-ID des Geräts.

+0

funktioniert nicht, gleiches Verhalten – Joe

+0

Haben Sie das Gerät erneut angeschlossen? –

+0

Ja, und auch ein 'RUN + =" ... "' hinzugefügt, um sicherzustellen, dass die Regel ausgeführt wird. Übrigens: IMHO ist das 'ID_MM_DEVICE_IGNORE' in 16.04 nicht mehr nötig, ist es nicht (ich kenne solche Modemmanager Probleme vom 14.04)? – Joe