¿Hay alguna forma de activar automáticamente un script cuando se conecta un dispositivo USB?

12

Tengo un dispositivo USB (cámara POV) que recopila una gran cantidad de datos y llena su almacenamiento regularmente. El objetivo es escribir un guión que:

  1. Escucha el dispositivo para conectarse a través de USB
  2. Lo monta como un dispositivo de almacenamiento
  3. Descarga datos del dispositivo
  4. Desmonta de forma segura el dispositivo para su extracción (al finalizar la descarga)

Luego puedo agregar al script la opción de parpadear los LED conectados a ciertos pines en el GPIO para indicar el estado ...

He buscado "cómo descargar automáticamente datos desde un dispositivo usb" en ubuntu y otros sitios de linux, pero sin resultados. ¿Alguien puede proporcionar un punto de partida? Me siento cómodo escribiendo código a partir de documentación y ejemplos.

usuario3.1415927
fuente

Respuestas:

13

Usa las reglas de udev .

encuentra la información de tu dispositivo.

udevadm -a -p /dev/path/device/

KERNELS=="1-3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
...
ATTRS{quirks}=="0x0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="SANDisk"
ATTRS{product}=="USB DISK"
ATTRS{serial}=="SD71011000019113"

Luego cree su archivo de reglas udev para su dispositivo. Al crear un archivo de reglas, use la información que obtuvo del comando udevinfo.

contenido de /etc/udev/rules.d/99-mydevice.rules

SUBSYSTEMS=="usb", ATTRS{serial}=="SD71011000019113", RUN+="/home/gurcan/sync.sh"

Crea tu script que se ejecutará como dispositivo USB conectado

#!/bin/bash
#
rsync -avz /media/disk/photos/ /data/photos/

Recargar las reglas de udev

udevcontrol reload_rules

Pruébalo. desenchufe / enchufe

gurcanozturk
fuente
1
Intenté ejecutar udevinfo, pero obtuve una -bash: udevinfo: command not foundrespuesta del shell ssh. Lo comprobé many hay una manentrada para udev, pero no para udevinfo. Probablemente intentaré seguir con esto udev... sin embargo, su respuesta fue útil, ¡así que gracias! También miraré alrededor para verificar udevinfo, tal vez no haya instalado un repositorio o algo así.
usuario3.1415927
1
@ user3.1415927 Debido a que udevinfo fue reemplazado por udevadm en debian, actualicé mi respuesta.
gurcanozturk
2

Si no te gusta udev, puedes echar un vistazo a devmon .

Permite estas opciones:

--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE --exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL --exec-on-video "COMMAND" Execute COMMAND after video DVD mount --exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion --exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount --exec-on-drive "COMMAND" Execute COMMAND after drive mount --exec-on-unmount "COMMAND" Execute COMMAND after unmount --exec-on-remove "COMMAND" Execute COMMAND after drive removal Where the following in COMMAND will be replaced with: %d mount point directory (eg /media/cd) %f device name (eg /dev/sdd1) %l label of mounted volume Multiple --exec-on-XXX options may be used to execute multiple commands. Other exec-on-XXX commands are ignored if exec-on-device or -label executed.

kotrfa
fuente