Respuestas:
Hay una solución mucho mejor con systemd ahora. Usted crea un servicio que depende y es deseado por sus medios, 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 debe iniciar / habilitar el servicio:
sudo systemctl start your.service
sudo systemctl enable your.service
Después del montaje, systemd dispara su script de disparo. La ventaja sobre la regla de udev es que el script realmente se dispara después del montaje, no después de agregar el dispositivo del sistema.
Caso de uso : tengo una partición encriptada de la que quiero hacer una copia de seguridad automáticamente. Después de agregar el dispositivo, tengo que escribir la contraseña. Si enganché el script de respaldo a udev, el script intenta ejecutarse en el momento en que escribo la contraseña, lo que fallará.
Recurso: Scripting con udev
Nota: Puede encontrar la unidad de su dispositivo con:systemctl list-units -t mount
systemctl enable your.service
. El archivo de script debe ser ejecutable.
Requires=
, After=
y WantedBy=
las líneas de ambos con media-bb.mount
y media-BB.mount
porque me muestra el volumen Nautilus como "BB", no "BB". Mismo mensaje de error, excepto por mayúsculas. Que pasa ¿De alguna manera tengo que crear ese media-<something>.mount
servicio?
Comience por encontrar su dispositivo en lsusb
. Tenga en cuenta la identificación (por ejemplo 0a81:0101
)
Cree un nuevo archivo de reglas de udev en /etc/udev/rules.d/
via sudoedit /etc/udev/rules.d/100-mount-videos.rules
y coloque una nueva regla allí como esta:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
Tenga en cuenta cómo usé la identificación de lsusb
.
Entonces solo necesitas escribir el guión para hacer el trabajo. Un simple comando de montaje debería funcionar. Es posible que necesite un sleep 5
comando allí para esperar a que el sistema de archivos se inicialice (si deja que gnome haga el montaje principal, pero puede montarlo primero y luego puede que no necesite dormir).
Adición de Allan: los scripts de larga ejecución podrían bloquear "todos los eventos posteriores para este o un dispositivo dependiente". Mi página de manual de Mint dice además: "Las tareas de ejecución prolongada deben separarse inmediatamente del proceso del evento en sí". No se dan consejos sobre dónde obtener la habilidad para hacer esto.
Respuesta de Oli: Envuélvelo así: https://askubuntu.com/a/106359/449
/root/
lugar donde solo root pueda editarlo.
Otra forma de obtener los valores para ATTRS {idVendor} y ATTRS {idProduct} (probado en Ubuntu 12.04) es:
Encuentra dónde está montado tu usb:
$ mount | grep /dev/sd*
esto muestra algo como lo siguiente:
/dev/sdb on /media/SOMEDIR type vfat ...
Use udevadm para obtener la información de ese dispositivo:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
la salida debería ser algo como:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
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 no "comando de costum". para que se ejecuten diferentes tipos de medios. En ese momento, la unidad USB ya está montada, pero supongo que aún podría vincularla (con un comando costum) 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 desea interferir con el control de su administrador de archivos (nautilus, konquerer, gnome, etc.) sobre el montaje y desmontaje de su dispositivo, le sugiero que no siga la ruta 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 se inicie 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. Usted debe no 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
Luego habilite el servicio:
sudo systemctl enable your.service
Eso es todo.
Nota: Puede encontrar su etiqueta medial con:sudo systemctl list-units -t mount
Nota 2: Si el servicio falla de alguna manera (por ejemplo, el script no es ejecutable), su punto de montaje cambiará a la <old_mount_point_name>1
próxima vez que monte el dispositivo usb. Para solucionar este problema, solo necesita ejecutarsudo systemctl reset-failed