Script beim Einstecken von USB-Geräten per udev ausführen

Bei Linux hat man die Möglichkeit, Regeln zu erstellen, die das Verhalten des Systems beim Einstecken von Hotplug-Geräten steuern. Das ermöglichst es einem zum Beispiel beim Einstecken einer USB-Festplatte oder eines USB-Sticks automatisch bestimmte Daten auf das Gerät zu kopieren um so Backups zu erstellen. Es kann praktisch alles gemacht werden, was über ein Bash-Script gehandhabt werden kann. Das System, das das ermöglicht, heißt udev und im folgenden werde ich kurz zusammenfassen, welche Schritte durchgeführt werden müssen, um beim Einstecken eines Geräts ein Script auszuführen.

1. Informationen über das Gerät herausfinden:
Über den Befehl lsusb lässt man sich die derzeit aktiven USB-Geräte ausgeben, das ganze sieht dann in etwa wie folgt aus:


socrates@marx ~ % sudo lsusb
[sudo] password for socrates:
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 003: ID 066f:8000 SigmaTel, Inc. MSCN MP3 Player
Bus 008 Device 002: ID 046d:c050 Logitech, Inc. RX 250 Optical Mouse

Nun notiert man sich die Device-Nummer, die zum Gerät passt, für das man die Regel erstellen möchte (in diesem Fall 003) und führt lsusb -v > ~/lsusb.txt aus. Die Textdatei wird mit einem Texteditor geöffnet und man sucht in der zum entsprechenden Gerät passenden Sektion nach folgenden Informationen, also idVendor, idProduct und iSerial:


idVendor 0x066f SigmaTel, Inc.
idProduct 0x8000 MSCN MP3 Player
iSerial 3 000031055F91C187

Anhand dieser Informationen kann man nun eine udev-Regel erstellen.

2. udev-Regel erstellen
Man öffnet nun einen Texteditor mit root-Rechten und schreibt folgendes hinein:


BUS=="usb", KERNEL=="sd?1",SYSFS{serial}=="hier iSerial einfügen",SYMLINK+="name für das Gerät"

BUS=="usb" bestimmt natürlich, auf welchem Bus udev für diese Regel lauschen soll. Da es hier um ein USB-Gerät geht, bleibt natürlich nur USB.

KERNEL=="sd?1" bedeutet, dass udev die Geräte sda1, sdb1, sdc1 usw. abfragen soll, das ergibt sich dadurch, dass USB-Geräte für gewöhnlich diese Gerätenamen zugewiesen bekommen.

SYSFS{serial}=="bla" ist nun der Wert, über den das Gerät identifiziert wird. Wenn man eine iSerial in der lsusb.txt gefunden hat, dann bietet es sich an, diesen Wert zwischen die Anführungszeichen zu setzen.

Sollte es keine iSerial gegeben haben, kann man auch folgende Varianten einsetzen:
SYSFS{idVendor}=="VendorID" oder SYSFS{idProduct}=="ProductID", wobei das 0x in den Werten nicht in die Anführungszeichen kommt.

SYMLINK+="bla" gibt den Namen an, mit dem das Gerät künfig in /dev/ aufgelistet werden soll.

In meinem Beispiel sieht die Datei nun wie folgt aus:


#MP3Player

BUS==“usb“, KERNEL==“sd?1″,SYSFS{serial}==“000031055F91C187″,SYMLINK+=“player“

Diese Datei wird dann z.B. unter /etc/udev/rules.d/01-player.rules abgespeichert. Dabei ist es ratsam, eine möglichst kleine Zahl am Anfang zu wählen, damit dieses Script vor den anderen udev-Scripten greift.

Das führt nun dazu, dass mein MP3-Player jedesmal, wenn er eingesteckt wird, unter dem Namen /dev/player in das System integriert wird, das ändert jedoch noch nichts daran, wie das Gerät engültig gemountet wird, da die automatische Mountfunktion von Linux weiterhin /dev/sde1 oder so mountet, anstatt /dev/player.

Das ändert man nun, indem man für das Gerät einen neuen Eintrag in /etc/fstab erstellt. In meinem Fall sähe der folgendermaßen aus:


/dev/player /media/player vfat users,atime,noauto,rw,nodev,exec,nosuid 0 0

Der Mountpoint /media/player muss natürlich vorher existieren und vfat muss durch das entsprechende Dateisystem auf dem Gerät angepasst werden.

Sobald man die Datei abgespeichert hat und das Gerät das nächste Mal einsteckt, wird das Gerät /dev/player IMMER in /media/player eingehängt.

So… Jetzt, wo man die ganzen relevanten Parameter für ein Gerät quasi fix gesetzt hat, erweitert man die entsprechende udev-Regel um folgendes: RUN+="/pfad/zum/script"

Bei mir sähe das dann so aus:


#MP3Player

BUS==“usb“, KERNEL==“sd?1″,SYSFS{serial}==“000031055F91C187″,SYMLINK+=“player“,RUN+=“/pfad/zum/script“

Naja… in das Script kann man dann reinprogrammieren, was man möchte, es muss lediglich ausführbar sein und das wars dann auch schon.
So lassen sich auf einfache und komfortable Art und Weise beim Einstecken von Geräten zum Beispiel Daten auf das Gerät kopieren oder was auch immer.

Quelle: Ubuntuusers-Wiki

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.