Wenn ein neues Gerät angezeigt wird, wird udev benachrichtigt. Normalerweise wird eine Gerätedatei unter /dev
basierend auf integrierten Regeln erstellt¹. Sie können diese Regeln überschreiben, um den Speicherort der Gerätedatei zu ändern oder ein beliebiges Programm auszuführen. Hier ist ein Beispiel für eine solche udev-Regel:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
Die NAME=
Direktive ändert den Speicherort der Gerätedatei. Ich habe sie zur Veranschaulichung eingefügt, aber sie ist wahrscheinlich für Ihren Anwendungsfall nicht nützlich. Die ATTRS
Regeln identifizieren das Gerät; Führen Sie udevinfo -a -n /dev/sdz
das Laufwerk aus, wenn es verfügbar ist, /dev/sdz
um festzustellen, welche Attribute es hat. Beachten Sie, dass Sie nur ATTRS
Regeln aus einem einzelnen Abschnitt der udevinfo
Eingabe verwenden können (außerdem können Sie ATTR
Regeln aus dem ersten Abschnitt verwenden). Weitere Hintergrundinformationen finden Sie unter Verstehen der Ausgabe von `udevadm info -a -n / dev / sdb` . Diese Regel geht in eine Datei namens so etwas wie /etc/udev/rules.d/local-storage-keypass.rules
.
Fügen Sie die Befehle, die Sie ausführen möchten, in das in der RUN
Anweisung angegebene Skript ein . Etwas wie:
#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
[ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &
Wenn Sie Probleme beim Ausführen eines GUI-Programms über ein von udev ausgelöstes Skript haben, lesen Sie Kann ich ein grafisches Programm auf dem Desktop eines anderen Benutzers als Root starten?
¹ Nicht auf modernen Systemen, auf denen /dev
udevtmpfs installiert ist.
udevadm info -a -n /dev/sdX
, können Sie nicht anhand mehrerer Vorfahren übereinstimmen. Sie können nur anhand der Daten vom Gerät selbst und eines einzelnen Vorfahren übereinstimmen. Dies wird behandeltman 7 udev
, ist aber ein kleiner Kommentar, der leicht übersehen wird.