C'è un modo per attivare automaticamente uno script quando si collega un dispositivo USB?


12

Ho un dispositivo USB (fotocamera POV) che raccoglie molti dati e riempie regolarmente la sua memoria. L'obiettivo è scrivere una sceneggiatura che:

  1. Ascolta il dispositivo per la connessione tramite USB
  2. Lo monta come dispositivo di archiviazione
  3. Scarica i dati dal dispositivo
  4. Smonta in modo sicuro il dispositivo per la rimozione (al termine del download)

Posso aggiungere allo script in seguito l'opzione per far lampeggiare i LED collegati a determinati pin sul GPIO per indicare lo stato ...

Ho cercato "come scaricare automaticamente i dati da un dispositivo USB" su Ubuntu e altri siti Linux, ma senza risultati. Qualcuno può fornire un punto di partenza? Sono a mio agio con la scrittura di codice da documentazione ed esempi.

Risposte:


13

Usa le regole udev .

trova le informazioni sul tuo 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"

Quindi crea il tuo file delle regole udev per il tuo dispositivo. Durante la creazione del file delle regole, utilizzare le informazioni ottenute dal comando udevinfo.

contenuto di /etc/udev/rules.d/99-mydevice.rules

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

Crea il tuo script che verrà eseguito come dispositivo USB collegato

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

Ricarica le regole udev

udevcontrol reload_rules

Provalo. scollegare / spina


1
Ho provato a eseguire udevinfo, ma ho ricevuto una -bash: udevinfo: command not foundrisposta dalla shell ssh. Ho controllato mane c'è una manvoce per udev, ma non per udevinfo. Probabilmente proverò a perseguire questo con udev... la tua risposta è stata utile, quindi grazie! Mi guarderò intorno per controllare udevinfo, forse non ho installato un repository o qualcosa del genere.
user3.1415927

1
@ user3.1415927 A causa di udevinfo sostituito da udevadm in debian, ho aggiornato la mia risposta.
Gurcanozturk,

2

Se non ti piace udev, puoi dare un'occhiata a Devmon .

Permette queste opzioni:

--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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.