Usa Udev. Udev è un demone di gestione dispositivi. Tra le altre cose, è responsabile della denominazione dei dispositivi. È possibile definire le regole udev inserendo i file con una certa sintassi nella directory delle regole. Le regole possono fare molte cose - in particolare possono eseguire script quando è collegato un determinato dispositivo.
Come risolvere il tuo problema:
Per prima cosa devi raccogliere informazioni sul tuo dispositivo. Diciamo che lo hai collegato e sappiamo che va sotto il nome /dev/sdb1
. In tal caso:
udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)
Il comando genererà informazioni sul tuo dispositivo. È piuttosto lungo. Devi trovare qualcosa che identifichi il dispositivo in modo univoco. Potrebbe essere un serial like ATTRS{serial}=="UA04FLGC"
o una combinazione di altri attributi comeATTRS{idVendor}
e ATTRS{idProduct}
. La maggior parte dei nomi sono più o meno autoesplicativi. Scegli uno o una combinazione di alcuni che sembrano ragionevoli - se non funzionano, prova qualcos'altro.
Una volta trovato un identificatore univoco, crea un file /etc/udev/rules.d
che inizia con due cifre e termina con .rules
. Le due cifre specificano l'ordine di elaborazione di questi .rules-files - 70-usb-log-custom.rules
dovrebbe essere una buona scelta per te. La sintassi di questo file di regole può essere molto complessa. Se sei interessato, google udev. Se non semplicemente apri il file appena creato e modificalo per assomigliare a questo:
# /etc/udev/rules.d/70-usb-log-custom.rules
KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"
Questo è un vero file udev che sto usando. Ci sono tre regole. Ogni riga è una regola a sé stante. La prima riga esegue uno script per creare un dispositivo decrittografato ogni volta che viene collegato un disco crittografato. La seconda riga richiama lo stesso script con diverse opzioni nel caso in cui il dispositivo decrittografato venga rimosso. La terza riga imposta le autorizzazioni per un altro dispositivo correlato.
Molto probabilmente avrai bisogno solo della prima riga. Elimina il resto e inserisci il seriale corretto (o la combinazione di parametri che hai scelto per identificare il tuo dispositivo).
Spiegazione del mio file:
KERNEL=="sd?1"
dice che il dispositivo che stiamo cercando in questa regola si chiama lungo le linee di /dev/sda1
, /dev/sdc1
o qualcosa di simile. Il punto interrogativo è un carattere jolly per qualsiasi lettera. ATTRS{serial}=="UA04FLGC"
è l'identificatore univoco qui. Per l'altro dispositivo di cui parlavo (terza riga) non sto usando il numero seriale ma una combinazione di SYSFS{idVendor}=="1781"
e SYSFS{idProduct}=="0c9f"
per identificarlo.
ACTION=="add"
dice alla regola che dovrebbe agire solo quando viene aggiunto il dispositivo; non quando viene rimosso.
SYMLINK+="cusb1"
crea un collegamento simbolico al disco in modo da trovarlo sotto /dev/cusb1
.
RUN+="/home/confus/bin/usb-encrypt.sh add %k"
esegue lo script e gli passa "add" e "% k" (il nome del dispositivo).
Non fornirò maggiori dettagli, in quanto esistono eccellenti tutorial sulle regole di udev. Quello che leggi qui dovrebbe essere sufficiente per essere fissato però.