Wyzwalanie akcji po podłączeniu określonego woluminu

10

Mam klucz USB zawierający bazę danych haseł keepass2 i chciałbym wykonać pewne czynności po podłączeniu do mojego komputera, a mianowicie:

  • Zamontuj go automatycznie w określonej lokalizacji
  • Gdy montaż zostanie wykonany poprawnie, uruchomienie keepass2 w pliku bazy danych haseł

Sądzę, że proste zadania, ale nie potrafię tego zrobić.

Używam Ubuntu 12.10, który automatycznie montuje urządzenie jako „klucz USB mediów” i próbuje otworzyć na nim obrazy (mimo że nie ma żadnych).

Jak najlepiej to zrobić i wyłączyć automatyczne montowanie Ubuntu (aby nie powodowało konfliktu)?

ereOn
źródło

Odpowiedzi:

8

Gdy pojawi się nowe urządzenie, udev jest powiadamiany. Zwykle tworzy plik urządzenia w /devoparciu o wbudowane reguły¹. Możesz zastąpić te reguły, aby zmienić lokalizację pliku urządzenia lub uruchomić dowolny program. Oto przykładowa taka zasada udev:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"

NAME=Dyrektywa zmienia lokalizację pliku urządzenia, włączyłem go do celów ilustracyjnych, ale nie jest to użyteczne dla przypadku użycia. Te ATTRSzasady identyfikacji urządzenia; uruchom, udevinfo -a -n /dev/sdzgdy dysk będzie dostępny, /dev/sdzaby zobaczyć, jakie ma atrybuty. Uważaj, że możesz używać ATTRSreguł tylko z jednej sekcji danych udevinfowejściowych (dodatkowo możesz używać ATTRreguł z sekcji początkowej). Zobacz Zrozumienie wyniku działania `udevadm info -a -n / dev / sdb`, aby uzyskać więcej tła. Ta reguła przechodzi do pliku o nazwie coś takiego /etc/udev/rules.d/local-storage-keypass.rules.

Umieść polecenia, które chcesz uruchomić, w skrypcie podanym w RUNdyrektywie. Coś jak:

#!/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' &

Jeśli masz problemy z uruchomieniem programu GUI ze skryptu wywołanego przez udev, zobacz Czy mogę uruchomić program graficzny na pulpicie innego użytkownika jako root?

¹ Nie w nowoczesnych systemach, w których /devdziała udevtmpfs.

Gilles „SO- przestań być zły”
źródło
1
Ważna uwaga na ten temat: pisząc reguły z wykorzystaniem informacji z udevadm info -a -n /dev/sdX, nie można dopasowywać na podstawie wielu przodków. Możesz dopasować tylko na podstawie danych z samego urządzenia i jednego przodka. Jest to omówione man 7 udev, ale jest to mały komentarz, który można łatwo przeoczyć.
Patrick,
1

Najlepszym sposobem na to byłoby napisanie własnych reguł udev dla tego urządzenia. Niestety nie mogę udzielić żadnych wskazówek, jak to zrobić, ponieważ nigdy tego nie zrobiłem. Więc jeśli ktoś nie ma bardziej szczegółowej odpowiedzi, wyszukaj w Google „reguły udev” i poszukaj przykładów w / lib / udev. Twoje niestandardowe reguły udev powinny znaleźć się w /etc/udev/rules.d

Dennis Kaarsemaker
źródło
Dzięki za informację. Dzięki temu moje wyszukiwania będą co najmniej bardziej wydajne.
ereOn