In meinem /dev
Ordner möchte ich, dass die folgenden Dateien vom Benutzer lesbar und beschreibbar sind:
/dev/ttyUSB0
/dev/gpib0
Wie mache ich das ohne zu benutzen chgrp
? Ich kann bearbeiten /etc/udev/rules.d
, kenne aber die Syntax nicht.
In meinem /dev
Ordner möchte ich, dass die folgenden Dateien vom Benutzer lesbar und beschreibbar sind:
/dev/ttyUSB0
/dev/gpib0
Wie mache ich das ohne zu benutzen chgrp
? Ich kann bearbeiten /etc/udev/rules.d
, kenne aber die Syntax nicht.
Antworten:
Für Geräte, die in das Subsystem tty fallen, können Sie ihre Gruppe wie folgt festlegen:
SUBSYSTEM=="tty", GROUP="dialout"
Beachten Sie, dass es sich wie bei der allgemeinen Programmierung ==
um einen Test auf Gleichheit handelt, während =
es sich um eine Zuweisung handelt. Die obige Anweisung bedeutet also "wenn SUBSYSTEM=="tty"
dann zuweisen" GROUP="dialout"
. Eine Anweisung kann mehrere Tests, die zusammen erstellt werden, und mehrere Zuweisungen enthalten.
Wenn Sie die Lese- / Schreib- / Ausführungsberechtigungen ändern möchten, weisen Sie MODE anstelle von GROUP zu, wobei MODE der üblichen Unix-Oktalschreibweise folgt, z. B. MODE="0660"
dem Eigentümer und der Gruppe Lese- / Schreibberechtigungen erteilt. man udev
hat alle Details.
Viele Beispiele für solche Regeln finden Sie in /lib/udev/rules.d/91-permissions.rules
Sobald Sie sich für eine Regel entschieden haben, können Sie diese einfach hinzufügen. Wechseln Sie auf einem von Debian abgeleiteten System in das Verzeichnis /etc/udev/rules.d
und erstellen Sie eine Datei. Dateien werden in Sortierreihenfolge ausgeführt. Versuchen Sie also einen Namen wie, damit Ihre Regeldatei die zuletzt gelesene Datei ist und frühere überschreibt 99-instruments.rules
. Fügen Sie dann Ihre Regeln in diese Datei ein, eine pro Zeile. (Bei Bedarf können Zeilen erweitert werden, indem wie in der Shell ein Backslash am Ende der Zeile eingefügt wird.)
Wenn Sie also Gruppen und Berechtigungen auf tty-Geräten ändern möchten, kann Ihre Datei /etc/udev/rules.d/99-instruments.rules
aus einer einzelnen Zeile bestehen:
SUBSYSTEM=="tty", GROUP="dialout", MODE="0660"
So stellen Sie sicher, dass Ihre neue Datei selbst über die üblichen Berechtigungen verfügt:
sudo chown root:root /etc/udev/rules.d/99-instruments.rules
sudo chmod 0644 /etc/udev/rules.d/99-instruments.rules
Nachdem Sie Ihre Datei erstellt haben, kann udevd sie automatisch lesen. Wenn nicht, können Sie das erneute Lesen der Dateien erzwingen mit:
udevadm control --reload-rules
Wenn Sie genauer steuern möchten, welche Geräte auf welche Regeln reagieren, können Sie mehr darüber erfahren, wie udev Ihre Geräte sieht, indem Sie / sys / lesen. Im Moment habe ich keinen Zugriff auf einen Computer mit einem ttyUSB oder einem HPIB. Lassen Sie uns also ein Beispiel für die Festplatte sda machen. Lauf:
udevadm info --attribute-walk --path=/sys/block/sda
Dies gibt viele Informationen, die wie folgt aussehen:
. . . .
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
. . . .
Diese Zeilen haben alle die Form, die als if
Klauseln in Regeln verwendet werden kann. Um beispielsweise den Besitz aller Blockgeräte zu ändern, die als nicht entfernbar markiert sind, verwenden wir die folgende Regel:
SUBSYSTEM=="block", ATTR{removable}=="0", OWNER=john1024
Mit Informationen von udevadm
kann man Regeln entwickeln, die speziell auf die interessierenden Geräte abzielen.
Ich denke, ich würde vorschlagen, die Regel etwas restriktiver zu gestalten als die von John. Erstellen Sie beispielsweise eine Datei wie /etc/udev/rules.d/99-tty-dialout.rules
:
SUBSYSTEM=="tty", KERNEL=="ttyUSB0", GROUP="dialout", MODE="0660"
Sie können udevadm
damit Geräte SUBSYSTEM==
und KERNEL==
Werte ermitteln. Zum Beispiel:
$ udevadm info -a -n /dev/tty0
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/tty/tty0':
KERNEL=="tty0"
SUBSYSTEM=="tty"
DRIVER==""
ATTR{active}=="tty1"