
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 DRIVER
Name ( usb-storage
,, usbhid
..) oder KERNEL
Name ( tty*
,, sd*
..), sogar Verwendung von minimalen regulären Ausdrücken ( sd[a-z][0-9]*
, usb*
).
Sie sollten nach Ähnlichkeiten in ihren Eigenschaften suchen.
- Entfernen Sie alle diese Geräte
Speichern Sie die aktuelle Geräteliste in
/dev
ls /dev > /tmp/dev_list0.txt
Schließen Sie eines der Zielgeräte an
Speichern Sie die Geräteliste in einer anderen Datei
ls /dev > /tmp/dev_list.txt
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.
Ü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 udev
von Ereignissen erstellt wurden:
udevadm monitor
Antwort3
So entsperren Sie am einfachsten den Zugriff auf Ihre Hardware:
sudo chmod -R 777 /dev/bus/usb/