Gibt es eine Möglichkeit, ein Skript automatisch zu aktivieren, wenn ein USB-Gerät eine Verbindung herstellt?

12

Ich habe ein USB-Gerät (POV-Kamera), das viele Daten sammelt und regelmäßig seinen Speicher füllt. Das Ziel ist es, ein Skript zu schreiben, das:

  1. Lauscht auf die Verbindung des Geräts über USB
  2. Montiert es als Speichergerät
  3. Lädt Daten vom Gerät herunter
  4. Hängt das Gerät zum Entfernen sicher aus (nach Abschluss des Downloads)

Ich kann dem Skript später die Option zum Blinken von LEDs hinzufügen, die an bestimmten Pins des GPIO angebracht sind, um den Status anzuzeigen ...

Ich habe auf Ubuntu und anderen Linux-Sites nach "Wie man automatisch Daten von einem USB-Gerät herunterlädt" gesucht, aber ohne Ergebnisse. Kann jemand einen Ausgangspunkt angeben? Ich bin mit dem Schreiben von Code aus Dokumentationen und Beispielen vertraut.

user3.1415927
quelle

Antworten:

13

Verwenden Sie udev- Regeln.

Finden Sie Ihre Geräteinformationen.

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"

Erstellen Sie dann Ihre udev-Regeldatei für Ihr Gerät. Verwenden Sie beim Erstellen einer Regeldatei die Informationen, die Sie vom Befehl udevinfo erhalten haben.

Inhalt von /etc/udev/rules.d/99-mydevice.rules

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

Erstellen Sie Ihr Skript, das als angeschlossenes USB-Gerät ausgeführt wird

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

Laden Sie die udev-Regeln neu

udevcontrol reload_rules

Probier es aus. Stecker / Stecker ziehen

gurcanozturk
quelle
1
Ich habe versucht, udevinfo auszuführen, habe aber eine -bash: udevinfo: command not foundAntwort von der ssh-Shell erhalten. Ich habe nachgesehen manund es gibt einen manEintrag für udev, aber nicht für udevinfo. Ich werde wahrscheinlich versuchen, dies mit udev... Ihrer Antwort war jedoch hilfreich, also danke! Ich werde mich auch umschauen, um nachzusehen udevinfo, vielleicht habe ich kein Repository installiert oder so.
user3.1415927
1
@ user3.1415927 Da udevinfo in debian durch udevadm ersetzt wurde, habe ich meine Antwort aktualisiert.
Gurcanozturk
2

Wenn Sie udev nicht mögen, können Sie sich devmon ansehen .

Es erlaubt diese Optionen:

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