Risposte:
Adesso c'è una soluzione molto migliore con systemd . Crei un servizio che dipende e è desiderato dai tuoi media, ad esempio:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Quindi devi avviare / abilitare il servizio:
sudo systemctl start your.service
sudo systemctl enable your.service
Dopo il montaggio, systemd attiva lo script trigger. Il vantaggio rispetto alla regola udev è che lo script si attiva davvero dopo il montaggio, non dopo aver aggiunto il dispositivo di sistema.
Caso d'uso : ho una partizione crittografata di cui voglio eseguire il backup automaticamente. Dopo aver aggiunto il dispositivo devo digitare la password. Se ho agganciato lo script di backup a udev, lo script tenta di essere eseguito nel momento in cui sto digitando la password, che fallirà.
Risorsa: scripting con udev
Nota: è possibile trovare l'unità del dispositivo con:systemctl list-units -t mount
systemctl enable your.service
. Il file di script deve essere eseguibile.
Requires=
, After=
e WantedBy=
le linee sia con media-bb.mount
e media-BB.mount
perché mi mostra Nautilus il volume come "BB", non "BB". Stesso messaggio di errore, ad eccezione della maiuscola. Cosa c'è che non va? Devo in qualche modo creare quel media-<something>.mount
servizio?
Inizia trovando il tuo dispositivo lsusb
. Nota l'ID (ad es. 0a81:0101
)
Crea un nuovo file di regole udev in /etc/udev/rules.d/
via sudoedit /etc/udev/rules.d/100-mount-videos.rules
e inserisci una nuova regola in questo modo:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
Nota come ho usato l'ID da lsusb
.
Quindi devi solo scrivere la sceneggiatura per fare il lavoro. Un semplice comando mount dovrebbe funzionare. Potresti aver bisogno di un sleep 5
comando lì per attendere l'inizializzazione del filesystem (se lasci che gnome esegua il montaggio principale - ma sei libero di montarlo prima e quindi potresti non aver bisogno del sonno).
Aggiunta da Allan: gli script di lunga durata potrebbero bloccare "tutti gli altri eventi per questo o un dispositivo dipendente". La pagina man di My Mint afferma inoltre "Le attività di lunga durata devono essere immediatamente staccate dal processo dell'evento stesso". Non viene fornito alcun suggerimento su dove acquisire l'abilità per farlo.
Risposta di Oli: avvolgilo in questo modo: https://askubuntu.com/a/106359/449
/root/
o da qualche parte dove solo root può modificarlo.
Un altro modo per ottenere i valori di ATTRS {idVendor} e ATTRS {idProduct} (testato in Ubuntu 12.04) è:
Trova dove è montato il tuo usb:
$ mount | grep /dev/sd*
questo mostra qualcosa di simile al seguente:
/dev/sdb on /media/SOMEDIR type vfat ...
Usa udevadm per ottenere le informazioni sul dispositivo:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
l'output dovrebbe essere simile a:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
Ora usa l'id modello per ATTRS {idProduct} e l'id fornitore per ATTRS {idVendor}
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
In Nautilus sotto Modifica> Preferenze> Media puoi scegliere "altra azione" e "comando costum". per l'esecuzione di diversi tipi di media. A quel punto l'unità USB è già montata, ma suppongo che potresti ancora collegarla (con un comando costum) alla cartella in cui vuoi che appaia l'unità. Non saprei dire se sia più facile o migliore dell'uso di udev.
Se non vuoi interferire con il controllo del tuo filemanager (nautilus, konquerer, gnome, ecc.) Sul montaggio e lo smontaggio del tuo dispositivo, ti suggerisco di non seguire la rotta udev.
Invece, usa udisks-glue se il tuo sistema usa udisks (quasi tutti lo fanno).
Dopo l'installazione, basta creare un file di configurazione ~/.udisks-glue.conf
nella directory home in questo modo.
Il mio esempio seguente aggiorna i dati GPS-Assist sulla mia fotocamera ogni volta che collego la scheda SD.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
Successivamente, assicurati che udisks-glue si avvii all'avvio o al login. Vale a dire tramite le applicazioni di avvio di gnome
La risposta di @ sumid ha un problema. Si dovrebbe non avviare il servizio. Devi solo abilitarlo.
file: /etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Quindi abilitare il servizio:
sudo systemctl enable your.service
È tutto.
Nota: è possibile trovare l'etichetta mediale con:sudo systemctl list-units -t mount
Nota 2: se il servizio non riesce in qualche modo (ad esempio, lo script non è eseguibile), il punto di montaggio cambierà alla <old_mount_point_name>1
prossima installazione del dispositivo USB. Per risolvere questo problema, devi solo eseguiresudo systemctl reset-failed