Attivazione di un'azione quando è collegato un volume specifico


10

Ho una chiave USB che contiene il mio database di password keepass2 e vorrei eseguire alcune azioni quando è collegato al mio computer, vale a dire:

  • Montalo automaticamente in una posizione specifica
  • Al termine del montaggio, avviare keepass2 sul file del database delle password

Compiti semplici immagino, ma non riesco a trovare come farlo.

Sto usando Ubuntu 12.10 e monta automaticamente il dispositivo come una "chiave USB multimediale" e cerca di aprire le immagini (anche se non ce ne sono).

Qual è il modo migliore per farlo e disabilitare l'auto-montaggio di Ubuntu (quindi non è in conflitto)?

Risposte:


8

Quando viene visualizzato un nuovo dispositivo, udev viene avvisato. Normalmente crea un file dispositivo in /devbase alle regole integrate¹. È possibile ignorare queste regole per modificare il percorso del file del dispositivo o eseguire un programma arbitrario. Ecco un esempio di tale regola udev:

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

La NAME=direttiva modifica la posizione del file del dispositivo, l'ho incluso a scopo illustrativo ma probabilmente non è utile per il tuo caso d'uso. Le ATTRSregole identificano il dispositivo; eseguito udevinfo -a -n /dev/sdzquando l'unità è disponibile /dev/sdzper vedere quali attributi ha. Ricorda che puoi utilizzare le ATTRSregole solo da una singola sezione udevinfodell'input (inoltre puoi utilizzare le ATTRregole della sezione iniziale). Vedi Capire l'output di `udevadm info -a -n / dev / sdb` per ulteriori informazioni. Questa regola va in un file chiamato qualcosa del genere /etc/udev/rules.d/local-storage-keypass.rules.

Inserisci i comandi che desideri eseguire nello script indicato nella RUNdirettiva. Qualcosa di simile a:

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

Se riscontri problemi nell'esecuzione di un programma GUI da uno script attivato da udev, vedi Posso avviare un programma grafico sul desktop di un altro utente come root?

¹ Non su sistemi moderni dove si /devtrova udevtmpfs.


1
Nota importante al riguardo: quando si scrivono regole utilizzando le informazioni da udevadm info -a -n /dev/sdX, non è possibile eseguire la corrispondenza in base a più antenati. Puoi abbinare solo in base ai dati dal dispositivo stesso e un singolo antenato. Questo è coperto man 7 udev, ma è un piccolo commento facilmente trascurato.
Patrick,

1

Il modo migliore per farlo sarebbe scrivere le tue regole udev per questo dispositivo. Purtroppo non posso dare consigli su come farlo poiché non l'ho mai fatto. Quindi, a meno che qualcun altro non abbia una risposta più dettagliata, cerca su Google "regole udev" e cerca in / lib / udev degli esempi. Le tue regole udev personalizzate dovrebbero andare in /etc/udev/rules.d


Grazie per le informazioni. Questo almeno renderà le mie ricerche più efficienti.
Il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.