¿Hay alguna manera de ejecutar un script cuando se monta un dispositivo USB en particular?
Mantengo mis videos en un USB separado y me gustaría ejecutar un script que monte la carpeta de video en el dispositivo USB en la carpeta de inicio.
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=
yWantedBy=
las líneas de ambos conmedia-bb.mount
ymedia-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 esemedia-<something>.mount
servicio?Comience por encontrar su dispositivo en
lsusb
. Tenga en cuenta la identificación (por ejemplo0a81:0101
)Cree un nuevo archivo de reglas de udev en
/etc/udev/rules.d/
viasudoedit /etc/udev/rules.d/100-mount-videos.rules
y coloque una nueva regla allí como esta: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
fuente
/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:
esto muestra algo como lo siguiente:
Use udevadm para obtener la información de ese dispositivo:
la salida debería ser algo como:
Ahora use la identificación del modelo para ATTRS {idProduct} y la identificación del proveedor para ATTRS {idVendor}
fuente
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.
fuente
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.
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
fuente
usar udev
http://archive.atomicmpc.com.au/forums.asp?s=2&c=16&t=4775
fuente
La respuesta de @ sumid tiene un problema. Usted debe no iniciar el servicio. Solo necesitas habilitarlo.
archivo:
/etc/systemd/system/your.service
Luego habilite el servicio:
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
fuente