Eine udev-Regel kann mit einer beliebigen Eigenschaft abgeglichen werden, die der Kernel der Ereignisliste hinzufügt oder mit beliebigen Informationen, die der Kernel in sysfs
exportiert. Die Regel kann auch zusätzliche Informationen aus externen Programmen anfordern. Jedes Ereignis wird gegen alle angegebenen Regeln abgeglichen. Alle Regeln befinden sich im Verzeichnis /etc/udev/rules.d/
.
Jede Zeile in der Regeldatei enthält mindestens ein Schlüsselwertepaar. Es gibt zwei Arten von Schlüsseln: die Übereinstimmungsschlüssel und Zuweisungsschlüssel. Wenn alle Übereinstimmungsschlüssel mit ihren Werten übereinstimmen, wird diese Regel angewendet und der angegebene Wert wird den Zuweisungsschlüsseln zugewiesen. Eine übereinstimmende Regel kann den Namen des Geräteknotens angeben, auf den Knoten verweisende Symlinks hinzufügen oder ein bestimmtes Programm als Teil der Ereignisbehandlung ausführen. Falls keine übereinstimmende Regel gefunden wird, wird der standardmäßige Geräteknotenname verwendet, um den Geräteknoten zu erstellen. Ausführliche Informationen zur Regelsyntax und den bereitgestellten Schlüsseln zum Abgleichen oder Importieren von Daten werden auf der man-Seite von udev beschrieben. Nachfolgend finden Sie einige Beispielregeln, die Sie in die grundlegende Regelsyntax von udev einführen. Sämtliche Beispielregeln stammen aus dem udev-Standardregelsatz, der sich in /etc/udev/rules.d/50-udev-default.rules
befindet.
Beispiel 17.1. udev-Beispielregeln
# console KERNEL=="console", MODE="0600", OPTIONS="last_rule" # serial devices KERNEL=="ttyUSB*", ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot" # printer SUBSYSTEM=="usb", KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp" # kernel firmware loader SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
Die Regel Konsole
besteht aus drei Schlüsseln: einem Übereinstimmungsschlüssel (KERNEL
) und zwei Zuordnungsschlüsseln (MODE
, OPTIONS
). Der Übereinstimmungsschlüssel KERNEL
durchsucht die Geräteliste nach Elementen des Typs console
. Nur exakte Übereinstimmungen sind gültig und lösen die Ausführung dieser Regel aus. Der Zuweisungsschlüssel MODE
weist dem Geräteknoten spezielle Berechtigungen zu, in diesem Fall Lese- und Schreibberechtigung nur für den Eigentümer des Geräts. Der Schlüssel OPTIONS
bewirkt, dass diese Regel auf Geräte dieses Typs als letzte Regel angewendet wird. Alle nachfolgenden Regeln, die mit diesem Gerätetyp übereinstimmen, werden nicht mehr angewendet.
Die Regel Serielle Geräte
steht in 50-udev-default.rules
nicht mehr zur Verfügung; es lohnt sich jedoch, sie sich dennoch anzusehen. Sie besteht aus zwei Übereinstimmungsschlüsseln (KERNEL
und ATTRS
) und einem Zuweisungsschlüssel (SYMLINK
). Der Übereinstimmungsschlüssel KERNEL
sucht nach allen Geräten des Typs ttyUSB
. Durch den Platzhalter *
trifft dieser Schlüssel auf mehrere dieser Geräte zu. Der zweite Übereinstimmungsschlüssel (ATTRS
) überprüft, ob die Attributdatei product
in sysfs
der jeweiligen ttyUSB
-Geräte eine bestimmte Zeichenkette enthält. Der Zuweisungsschlüssel SYMLINK
bewirkt, dass dem Gerät unter /dev/pilot
ein symbolischer Link hinzugefügt wird. Der Operator dieses Schlüssels (+=
) weist udev an, diese Aktion auch dann auszuführen, wenn dem Gerät bereits durch frühere (oder auch erst durch spätere) Regeln andere symbolische Links hinzugefügt wurden. Die Regel wird nur angewendet, wenn die Bedingungen beider Übereinstimmungsschlüssel erfüllt sind.
Die Regel printer
gilt nur für USB-Drucker. Sie enthält zwei Übereinstimmungsschlüssel (SUBSYSTEM
und KERNEL
), die beide zutreffen müssen, damit die Regel angewendet wird. Die drei Zuweisungsschlüssel legen den Namen dieses Gerätetyps fest (NAME
), die Erstellung symbolischer Gerätelinks (SYMLINK
) sowie die Gruppenmitgliedschaft dieses Gerätetyps (GROUP
). Durch den Platzhalter *
im Schlüssel KERNEL
trifft diese Regel auf mehrere lp
-Druckergeräte zu. Sowohl der Schlüssel NAME
als auch der Schlüssel SYMLINK
verwenden Ersetzungen, durch die der Zeichenkette der interne Gerätename hinzugefügt wird. Der symbolische Link für den ersten lp
-USB-Drucker würde zum Beispiel /dev/usblp0
lauten.
Die Regel kernel firmware loader
weist udev an, während der Laufzeit weitere Firmware mittels eines externen Hilfsskripts zu laden. Der Übereinstimmungsschlüssel SUBSYSTEM
sucht nach dem Subsystem firmware
. Der Schlüssel ACTION
überprüft, ob bereits Geräte des Subsystems firmware
hinzugefügt wurden. Der Schlüssel RUN+=
löst die Ausführung des Skripts firmware.sh
aus, das die noch zu ladende Firmware lokalisiert.
Die folgenden allgemeinen Eigenschaften treffen auf alle Regeln zu:
Jede Regel besteht aus einem oder mehreren, durch Kommas getrennten Schlüssel-/Wertepaaren.
Die Aktion eines Schlüssels wird durch seinen Operator festgelegt. udev-Regeln unterstützen verschiedene Operatoren.
Jeder angegebene Wert muss in Anführungszeichen eingeschlossen sein.
Jede Zeile der Regeldatei stellt eine Regel dar. Falls eine Regel länger als eine Zeile ist, verbinden Sie die Zeilen wie bei jeder anderen Shell-Syntax mit \
.
udev-Regeln unterstützen Shell-typische Übereinstimmungsregeln für die Schemata *
, ?
und []
.
udev-Regeln unterstützen Ersetzungen.
Bei der Erstellung von Schlüsseln stehen Ihnen je nach gewünschtem Schlüsseltyp verschiedene Operatoren zur Auswahl. Übereinstimmungsschlüssel werden in der Regel nur zum Auffinden eines Wertes verwendet, der entweder mit dem Suchwert übereinstimmt oder explizit nicht mit dem gesuchten Wert übereinstimmt. Übereinstimmungsschlüssel enthalten einen der folgenden Operatoren:
==
Suche nach übereinstimmendem Wert. Wenn der Schlüssel ein Suchschema enthält, sind alle Ergebnisse gültig, die mit diesem Schema übereinstimmen.
!=
Suche nach nicht übereinstimmendem Wert. Wenn der Schlüssel ein Suchschema enthält, sind alle Ergebnisse gültig, die mit diesem Schema übereinstimmen.
Folgende Operatoren können für Zuweisungsschlüssel verwendet werden:
=
Weist einem Schlüssel einen Wert zu. Wenn der Schlüssel zuvor aus einer Liste mit mehreren Werten bestand, wird der Schlüssel durch diesen Operator auf diesen Einzelwert zurückgesetzt.
+=
Fügt einem Schlüssel, der eine Liste mehrerer Einträge enthält, einen Wert hinzu.
:=
Weist einen endgültigen Wert zu. Eine spätere Änderung durch nachfolgende Regeln ist nicht möglich.
udev-Regeln unterstützen sowohl Platzhalter als auch Ersetzungen. Diese setzen Sie genauso ein wie in anderen Skripten. Folgende Ersetzungen können in udev-Regeln verwendet werden:
%r
, $root
Standardmäßig das Geräteverzeichnis /dev
.
%p
, $devpath
Der Wert von DEVPATH
.
%k
, $kernel
Der Wert von KERNEL
oder der interne Gerätename.
%n
, $number
Die Gerätenummer.
%N
, $tempnode
Der temporäre Name der Gerätedatei.
%M
, $major
Die höchste Nummer des Geräts.
%m
, $minor
Die niedrigste Nummer des Geräts.
%s{attribute
}
, $attr{attribute
}
Der Wert eines sysfs
-Attributs (das durch attribute
festgelegt ist).
%E{variable
}
, $attr{variable
}
Der Wert einer Umgebungsvariablen (die durch variable
festgelegt ist).
%c
, $result
Die Ausgabe von PROGRAM
.
%%
Das %
-Zeichen.
$$
Das $
-Zeichen.
Übereinstimmungsschlüssel legen Bedingungen fest, die erfüllt sein müssen, damit eine udev-Regel angewendet werden kann. Folgende Übereinstimmungsschlüssel sind verfügbar:
ACTION
Der Name der Ereignisaktion, z. B. add
oder remove
beim Hinzufügen oder Entfernen eines Geräts.
DEVPATH
Der Gerätepfad des Ereignisgeräts, zum Beispiel DEVPATH=/bus/pci/drivers/ipw3945
für die Suche nach allen Ereignissen in Zusammenhang mit dem Treiber ipw3945.
KERNEL
Der interne Name (Kernel-Name) des Ereignisgeräts.
SUBSYSTEM
Das Subsystem des Ereignisgeräts, zum Beispiel SUBSYSTEM=usb
für alle Ereignisse in Zusammenhang mit USB-Geräten.
ATTR{Dateiname
}
sysfs-Attribute des Ereignisgeräts. Für die Suche nach einer Zeichenkette im Attributdateinamen vendor
können Sie beispielsweise ATTR{vendor}=="On[sS]tream"
verwenden.
KERNELS
Weist udev an, den Gerätepfad aufwärts nach einem übereinstimmenden Gerätenamen zu durchsuchen.
SUBSYSTEMS
Weist udev an, den Gerätepfad aufwärts nach einem übereinstimmenden Geräte-Subsystemnamen zu durchsuchen.
DRIVERS
Weist udev an, den Gerätepfad aufwärts nach einem übereinstimmenden Gerätetreibernamen zu durchsuchen.
ATTRS{Dateiname
}
Weist udev an, den Gerätepfad aufwärts nach einem Gerät mit übereinstimmenden sysfs-Attributwerten zu durchsuchen.
ENV{Schlüssel
}
Der Wert einer Umgebungsvariablen, zum Beispiel ENV{ID_BUS}="ieee1394
für die Suche nach allen Ereignissen in Zusammenhang mit der FireWire-Bus-ID.
PROGRAM
Weist udev an, ein externes Programm auszuführen. Damit es erfolgreich ist, muss das Programm mit Beendigungscode Null abschließen. Die Programmausgabe wird in stdout geschrieben und steht dem Schlüssel RESULT
zur Verfügung.
RESULT
Überprüft die Rückgabezeichenkette des letzten PROGRAM
-Aufrufs. Diesen Schlüssel können Sie entweder sofort der Regel mit dem PROGRAM
-Schlüssel hinzufügen oder erst einer nachfolgenden Regel.
Im Gegensatz zu den zuvor beschriebenen Übereinstimmungsschlüsseln definieren Zuweisungsschlüssel keine Bedingungen, die erfüllt sein müssen, sondern sie weisen den von udev verwalteten Geräteknoten Werte, Namen und Aktionen zu.
NAME
Der Name des zu erstellenden Geräteknotens. Nachdem der Knotenname durch eine Regel festgelegt wurde, werden alle anderen Regeln mit dem Schlüssel NAME
, die auf diesen Knoten zutreffen, ignoriert.
SYMLINK
Der Name eines symbolischen Links, der dem zu erstellenden Knoten hinzugefügt werden soll. Einem Geräteknoten können mittels mehrerer Zuweisungsregeln mehrere symbolische Links hinzugefügt werden. Ebenso können Sie aber mehrere symbolische Links für einen Knoten auch in einer Regel angeben. Die Namen der einzelnen Symlinks müssen in diesem Fall jeweils durch ein Leerzeichen getrennt sein.
OWNER, GROUP, MODE
Die Berechtigungen für den neuen Geräteknoten. Die hier angegebenen Werte überschreiben sämtliche kompilierten Werte.
ATTR{Schlüssel
}
Gibt einen Wert an, der in ein sysfs-Attribut des Ereignisgeräts geschrieben werden soll. Wenn der Operator ==
verwendet wird, überprüft dieser Schlüssel, ob der Wert eines sysfs-Attributs mit dem angegebenen Wert übereinstimmt.
ENV{Schlüssel
}
Weist udev an, eine Umgebungsvariable zu exportieren. Wenn der Operator ==
verwendet wird, überprüft dieser Schlüssel, ob der Wert einer Umgebungsvariable mit dem angegebenen Wert übereinstimmt.
RUN
Weist udev an, der Liste der für dieses Gerät auszuführenden Programme ein Programm hinzuzufügen. Sie sollten hier nur sehr kurze Aufgaben angeben. Anderenfalls laufen Sie Gefahr, dass weitere Ereignisse für dieses Gerät blockiert werden.
LABEL
Fügt der Regel eine Bezeichnung hinzu, zu der ein GOTO
direkt wechseln kann.
GOTO
Weist udev an, eine Reihe von Regeln auszulassen und direkt mit der Regel fortzufahren, die die von GOTO
angegebene Bezeichnung enthält.
IMPORT{Typ
}
Lädt Variablen in die Ereignisumgebung, beispielsweise die Ausgabe eines externen Programms. udev kann verschiedene Variablentypen importieren. Wenn kein Typ angegeben ist, versucht udev den Typ anhand des ausführbaren Teils der Dateiberechtigungen selbst zu ermitteln.
program
weist udev an, ein externes Programm auszuführen und dessen Ausgabe zu importieren.
file
weist udev an, eine Textdatei zu importieren.
parent
weist udev an, die gespeicherten Schlüssel des übergeordneten Geräts zu importieren.
WAIT_FOR_SYSFS
Weist udev an, auf die Erstellung der angegebenen sysfs-Datei für ein bestimmtes Gerät zu warten. Beispiel: WAIT_FOR_SYSFS="ioerr_cnt"
fordert udev auf, so lange zu warten, bis die Datei ioerr_cnt
erstellt wurde.
OPTIONEN
Der Schlüssel OPTION
kann mehrere mögliche Werte haben:
last_rule
weist udev an, alle nachfolgenden Regeln zu ignorieren.
ignore_device
weist udev an, dieses Ereignis komplett zu ignorieren.
ignore_remove
weist udev an, alle späteren Entfernungsereignisse für dieses Gerät zu ignorieren.
all_partitions
weist udev an, für alle vorhandenen Partitionen eines Blockgeräts Geräteknoten zu erstellen.