¿Cómo ejecutar un script cuando se monta una unidad flash específica?

¿Hay alguna forma de ejecutar un script cuando se monta un dispositivo USB en particular?

Guardo mis videos en un USB separado y me gustaría ejecutar una secuencia de comandos que pueda montar la carpeta de video en el dispositivo USB en la carpeta de inicio.

Comience por encontrar su dispositivo en lsusb . Anote la ID (por ejemplo, 0a81:0101 )

Cree un nuevo archivo de reglas udev en /etc/udev/rules.d/ través de sudoedit /etc/udev/rules.d/100-mount-videos.rules y cree una nueva regla allí de esta manera:

 ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh" 

Note cómo usé la ID de lsusb .

Entonces solo necesitas escribir el script para hacer el trabajo. Un simple comando de assembly debería funcionar. Es posible que necesite un comando de sleep 5 allí para esperar a que el sistema de archivos se inicie (si deja que gnome haga el assembly principal, pero puede montarlo primero y luego puede que no necesite la suspensión).

Adición de Allan: los scripts de ejecución prolongada pueden bloquear “todos los eventos posteriores para este o un dispositivo dependiente”. La página del manual de My Mint indica que “las tareas de larga duración deben separarse inmediatamente del proceso del evento”. No se da ninguna sugerencia sobre dónde obtener la habilidad para hacer esto.

Respuesta de Oli: Envuélvalo así: https://askubuntu.com/a/106359/449

Hay una solución mucho mejor con systemd ahora. Usted crea un servicio que depende y es deseado por su medio, por ejemplo: /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 

Luego tienes que iniciar / habilitar el servicio:
sudo systemctl start your.service
sudo systemctl enable your.service

Después de que mount systemd dispara su script de activación. La ventaja sobre la regla udev es que la secuencia de comandos realmente se activa después del assembly, no después de agregar el dispositivo del sistema.

Caso de uso : tengo una partición encriptada que quiero respaldar automáticamente. Después de agregar el dispositivo tengo que escribir la contraseña. Si conecté el script de copia de seguridad a udev, el script intentará ejecutarse en el momento en que escribo la contraseña, lo que fallará.

Recurso: Scripting con udev

Nota: Puede encontrar su unidad de dispositivo con: sudo systemctl list-units -t mount

Otra forma de obtener los valores para ATTRS {idVendor} y ATTRS {idProduct} (probado en Ubuntu 12.04) es:

  1. Encuentra donde está montado tu usb:

     $ mount | grep /dev/sd* 

    Esto muestra algo como lo siguiente:

     /dev/sdb on /media/SOMEDIR type vfat ... 
  2. Use udevadm para obtener la información del dispositivo:

     udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*' 

    La salida debe ser algo como:

     E: ID_MODEL_ID=001a E: ID_VENDOR_ID=002b 
  3. Ahora use la identificación del modelo para ATTRS {idProduct} y la identificación del proveedor para ATTRS {idVendor}

     ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ... 

En Nautilus, en Edición> Preferencias> Medios, puede elegir “otra acción” y luego “comando costum”. Para diferentes tipos de medios a ser ejecutados. Para entonces, la unidad USB ya está montada, pero supongo que aún podría vincularla (con un comando de vestuario) a la carpeta en la que desea que aparezca la unidad. No podría decir si esto es más fácil o mejor que usar udev.

Si no quiere interferir con el control de archivos (nautilus, konquerer, gnome, etc.) sobre el assembly y desassembly de su dispositivo, le sugiero que no siga la ruta de udev.

En su lugar, use udisks-glue si su sistema usa udisks (casi todos lo hacen).

Después de la instalación, simplemente cree un archivo de configuración ~/.udisks-glue.conf en su directorio de inicio como este.

El siguiente ejemplo actualiza los datos de GPS-Assist en mi cámara cada vez que conecto la tarjeta 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" } 

Después, solo asegúrese de que udisks-glue comience cuando inicie o inicie sesión. Es decir, a través de las aplicaciones de inicio de Gnome.

La respuesta de @ sumid tiene un problema. No debes iniciar el servicio. Solo necesitas habilitarlo.

archivo: /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 

Entonces habilita el servicio:

 sudo systemctl enable your.service 

Eso es todo.

Nota: Puede encontrar su etiqueta medial con: sudo systemctl list-units -t mount

Nota2: si el servicio falla de alguna manera (por ejemplo, el script no es ejecutable), su punto de assembly cambiará a 1 próxima vez que monte el dispositivo usb. Para solucionar este problema, solo necesita ejecutar sudo systemctl reset-failed

    Intereting Posts