Schließt man unter Linux Geräte an, passiert etwas damit – das Gerät wird erkannt und lässt sich nutzen. Egal ob es sich um einen USB-Stick, eine externe oder interne Festplatte handelt, eine Webcam oder was auch immer – der Linux-Kernel muss die Hardware erkennen – dies geschieht natürlich automatisch, anschließend sorgt entsprechende Software dafür, was mit der Hardware geschieht.
Verantwortlich für die Einbindung von Hardware ist unter Linux eine Systemsoftware namens Udev. Udev bindet die Hardware ein und sorgt dafür, dass diese vom System genutzt werden kann.
Nehmen wir als Beispiel eine externe Festplatte, man schließt eine solche an, der Linux-Kernel erkennt diese – anschließend nimmt sich Udev der Hardware an und bindet diese in das Systemverzeichnis „/dev“ als neue Gerätedatei ein, dann ist die Hardware nutzbar.

Udev stellt jegliche Hardware, egal ob eingebaut oder angeschlossen, unter „/dev“ zur Verfügung. Doch kann die Software nicht nur Hardware nutzbar machen, die Software kann uns auch weiter behilflich sein – sie kann dafür sorgen, dass mit der Hardware geschieht, was wir möchten – etwa dass sich der Dateimanager automatisch öffnet, wenn ein USB-Medium angeschlossen wird …
Sehen wir uns einfach einmal an, wie Udev funktioniert.
Gehen wir wieder zurück zu unserer externen Festplatte – wir schließen die Hardware an den Computer an, der Linux-Kernel erkennt diese. Der Linux-Kernel erstellt unter „/sys“ einen Gerätenamen. Udev erkennt die neu angeschlossene Hardware und bindet diese unter „/dev“ ein. Was mit Hardware geschehen soll, liest diese Software aus den Dateien unter „/lib/udev/rules.d/“ aus:

Und genau dieses Verzeichnis können wir nutzen, um dem System zu zeigen, was mit entsprechender Hardware geschehen soll.
Zu Beginn müssen wir erst einmal den eindeutigen Namen der Hardware kennen. Hängen wir ein externes USB-Medium ein, zeigt uns der Befehl:
mount
wo das System dieses einhängt. Ein Beispiel:
/dev/sda1 on /media/robertg/Ventoy type exfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,iocharset=utf8,errors=remount-ro,uhelper=udisks2)
Wir finden diesen USB-Stick unter „/media/robertg/Ventoy/„, er nennt sich also ganz einfach „Ventoy“ – er kann aber auch recht kryptische Bezeichnungen haben, wenn Sie ihn nicht umbenannt haben.
Als root zeigen uns:
lsblk

(MBR) oder:
blkid

(GPT) dies schön übersichtlich. Der Befehl:
journalctl -f
zeigt uns, was passiert, während man Hardware anschließt (erst starten, dann anschließen, mit Strg+c beenden):

Hier vor allem wichtig ist die eindeutige Bezeichnung:
Dez 10 03:54:41 debian-huawei kernel: usb 2-3: New USB device found, idVendor=0781, idProduct=5591, bcdDevice= 1.00
Speziell „idVendor=0781“ und „idProduct=5591„. Ähnliche Ausgaben zur eindeutigen Erkennung zeigt uns der Befehl
dmesg | grep -i usb
nach dem Anschließen:

Auch folgender Befehl kann zur eindeutigen Identifizierung beitragen (nach dem Anschließen):
udevadm info --attribute-walk --name=/dev/sda1
In diesem Fall gibt man einfach die Partition an:
udevadm info --attribute-walk --name=/dev/sda1
Oder während des Anschließens (erster Befehl ist jedoch verständlicher):

Dies war alles ein wenig viel – mehr als „idVendor=“ und „idProduct=“ und Informationen wie „KERNEL==“sda1″“ und „SUBSYSTEM==“block““ benötigen Sie jedoch nicht. Jetzt können wir dem System mit einer Udev-Regel zeigen, was es mit der Hardware anstellen soll.
Als Beispiel möchte ich, dass der Stick sich mit dem Namen „musik“ im System einhängt und der Benutzer „robert“ vollen Zugriff (alle Rechte) darauf hat. Wir legen (natürlich als root) unter „/lib/udev/rules.d/“ eine neue Datei an – ich nenne diese beispielsweise „10-usb-music.rules“ und befülle sie wie folgt:
KERNEL=="sda1", SUBSYSTEM=="block", ATTR{ID_VENDOR_ID}=="0781", ATTR{ID_SERIAL_SHORT}=="5591", OWNER="robert", SYMLINK+="musik"
Jetzt können wir natürlich nicht nur dem System sagen, wo sich der USB-Stick etwa einhängen soll – wir können natürlich auch etwa ein Script ausführen lassen, wenn er eingehängt wird – Beispiel:
KERNEL=="sda1", ACTION=="add", SUBSYSTEM=="block", ATTR{ID_VENDOR_ID}=="0781", ATTR{ID_SERIAL_SHORT}=="5591", OWNER="robert", SYMLINK+="musik", RUN=="/pfad/zum/Script.sh"
Um eine Aktion auszuführen, fügen wir „ACTION==“add““ hinzu, am Ende der Regel folgt mit „RUN==“/pfad/zum/Script.sh““ die Aufgabe.
Sollte die Regel nicht sofort wirken, hilft ein Neustart des Systems. Wichtig: geben Sie der neuen Regel einen Namen mit einer niedrigen Zahl, Regeln mit niedriger Zahl (im Beispiel „10“) werden zuerst ausgeführt.
Weitere Dokumentation: Freedesktop.org und Archlinux.
Eine Reaktion
Gibt es eine Möglichkeit, mit einer UUID oder so den USB-Stick eindeutig zu kennzeichnen? – Kann man mit einer Udev-Regel bei einem USB-Stick mit Schreibschutz den Schreibschutz aufheben?