Auslösen einer Aktion, wenn ein bestimmtes Volume angeschlossen ist

10

Ich habe einen USB-Stick, der meine keepass2-Kennwortdatenbank enthält, und ich möchte einige Aktionen ausführen, wenn er an meinen Computer angeschlossen ist, nämlich:

  • Montieren Sie es automatisch an einem bestimmten Ort
  • Wenn die Bereitstellung ordnungsgemäß abgeschlossen ist, starten Sie keepass2 in der Kennwortdatenbankdatei

Einfache Aufgaben, denke ich, aber ich kann nicht finden, wie das geht.

Ich verwende Ubuntu 12.10 und es stellt das Gerät automatisch als "Media-USB-Key" bereit und versucht, die darauf befindlichen Bilder zu öffnen (obwohl es keine gibt).

Was ist der beste Weg, um dies zu tun und die automatische Montage von Ubuntu zu deaktivieren (damit es nicht zu Konflikten kommt)?

ereOn
quelle

Antworten:

8

Wenn ein neues Gerät angezeigt wird, wird udev benachrichtigt. Normalerweise wird eine Gerätedatei unter /devbasierend 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 ATTRSRegeln identifizieren das Gerät; Führen Sie udevinfo -a -n /dev/sdzdas Laufwerk aus, wenn es verfügbar ist, /dev/sdzum festzustellen, welche Attribute es hat. Beachten Sie, dass Sie nur ATTRSRegeln aus einem einzelnen Abschnitt der udevinfoEingabe verwenden können (außerdem können Sie ATTRRegeln 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 RUNAnweisung 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 /devudevtmpfs installiert ist.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Wichtiger Hinweis dazu: Wenn Sie Regeln mit den Informationen von schreiben 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 behandelt man 7 udev, ist aber ein kleiner Kommentar, der leicht übersehen wird.
Patrick
1

Der beste Weg, dies zu tun, wäre das Schreiben eigener udev-Regeln für dieses Gerät. Leider kann ich keine Tipps dazu geben, da ich das noch nie getan habe. Wenn also keine andere Person eine detailliertere Antwort hat, suchen Sie bei Google nach "udev-Regeln" und suchen Sie in / lib / udev nach Beispielen. Ihre benutzerdefinierten udev-Regeln sollten sich in /etc/udev/rules.d befinden

Dennis Kaarsemaker
quelle
Danke für die Information. Dies wird zumindest meine Suche effizienter machen.
Am