Ich habe einen USB-Stick, der meine Keepass2-Passwortdatenbank enthält, und ich möchte einige Aktionen ausführen, wenn er an meinen Computer angeschlossen ist, nämlich:
- Automatisch an einem bestimmten Ort bereitstellen
- Wenn das Mounten korrekt durchgeführt wurde, starten Sie keepass2 in der Passwort-Datenbankdatei
Einfache Aufgaben, schätze ich, aber ich kann nicht finden, wie das geht.
Ich verwende Ubuntu 12.10 und es mountet das Gerät automatisch als „Medien-USB-Schlüssel“ und versucht, die Bilder darauf zu öffnen (obwohl es keine gibt).
Was ist der beste Weg, das zu tun und das automatische Mounten von Ubuntu zu deaktivieren (damit es nicht zu Konflikten kommt)?
Akzeptierte Antwort:
Wenn ein neues Gerät erscheint, wird udev benachrichtigt. Normalerweise erstellt es eine Gerätedatei unter /dev
basierend auf integrierten Regeln¹. Sie können diese Regeln außer Kraft setzen, 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"
Der NAME=
Direktive ändert den Speicherort der Gerätedatei, ich habe sie zu Illustrationszwecken eingefügt, aber sie ist wahrscheinlich nicht nützlich für Ihren Anwendungsfall. Die ATTRS
Regeln identifizieren das Gerät; Führen Sie udevinfo -a -n /dev/sdz
aus wenn das Laufwerk als /dev/sdz
verfügbar ist um zu sehen, welche Eigenschaften es hat. Beachten Sie, dass Sie nur ATTRS
verwenden können Regeln aus einem einzelnen Abschnitt von udevinfo
Eingabe (zusätzlich können Sie ATTR
verwenden Regeln aus dem Anfangsabschnitt). Weitere Hintergrundinformationen finden Sie unter Ausgabe von `udevadm info -a -n /dev/sdb` verstehen. Diese Regel kommt in eine Datei namens /etc/udev/rules.d/local-storage-keypass.rules
.
Fügen Sie die Befehle, die Sie ausführen möchten, in das Skript ein, das in RUN
angegeben ist Richtlinie. 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 haben, ein GUI-Programm über ein von udev ausgelöstes Skript auszuführen, lesen Sie Kann ich ein grafisches Programm auf dem Desktop eines anderen Benutzers als root starten?
¹ Nicht auf modernen Systemen, auf denen /dev
ist auf udevtmpfs.