GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu – Auslösen einer Aktion, wenn ein bestimmtes Volume verbunden ist?

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.


Ubuntu
  1. So fügen Sie eine Auslagerungsdatei unter Ubuntu hinzu

  2. Wann sind es ausführbare Dateien nicht?

  3. Kein Startsound in Ubuntu 11.10?

  4. Swap-Volume hinzufügen?

  5. Wie aktualisiere ich Ubuntu, wenn keine Internetverbindung besteht?

So deaktivieren Sie das Touchpad automatisch, wenn die Maus mit Ihrem Ubuntu-System verbunden ist

So installieren Sie CouchPotato auf Ubuntu

So benennen Sie Dateien in Ubuntu 20.04 um

Was zu tun ist, wenn der Fehler „Repository hat keine Release-Datei“ in Ubuntu angezeigt wird

Ausgewähltes Tonausgabegerät bleibt zwischen Neustarts im Gnome-Kontrollzentrum nicht bestehen?

Automatische Verbindung zu VPN bei Verwendung eines bestimmten Netzwerks in Ubuntu Gnome 16.04?