2015-06-09T00:00:00+02:00

Routine automatisieren mit udisks-glue

Die Entscheidung Dropbox nicht mehr nutzen zu wollen, ist mir nicht leicht gefallen, denn dadurch war es wirklich kinderleicht Daten über verschiedene Geräte auf dem selben Stand zu halten. Gerade beim Abgleich von Kalender und Adressbuch mit dem Handy quasi ein No-Brainer.

Aber so zwang mich der Evolutionsdruck zu etwas, was ich schon immer mal machen wollte. Zum automatisieren von Routineaufgaben bei USB Geräten. Bei vielen Geräten tut man doch immer das gleiche. Wenn ich z.B. die Kamera anstöpsle, dann mache ich das eigentlich nur, um die Fotos, die sich darauf befinden auf den Rechner zu übertraagen. Das gleiche gilt für mein ZOOM Mikrofon. Beim Handy hole ich auch alle Bilder und Tonaufnahmen runter, und spiele den aktuellen Kalender, und das aktuelle Adressbuch auf.

Für solche Routineaufgabe bietet Linux ein tolles Tool an: "udisks-glue":http://manpages.ubuntu.com/manpages/precise/en/man1/udisks-glue.1.html. Dieses Tool überwacht die angeschlossenen Geräte, und bietet die Möglichkeit bei bestimmten Ereignissen eigene Scripts zu starten. Diese Ereignisse sind das ein- und ausstecken von Geräten, sowie das mounten, bzw unmounten.

Ich starte udisks-glue zusammen mit meinem Windows-Manager, damit er ständig aktiv ist:

bc. #!lua awful.util.spawnwithshell("udisks-glue")

Ab jetzt wartet udisks-glue auf Veränderungen im Geräte-Baum

Sobald eine Veränderung auftritt, wird diese zunächst mal duch eine Reihe von Filtern geschickt, um zu erkennen, welches Gerät da gerade eine Veränderung verursacht hat. bei mir sieht das so aus:

bc. #!css filter storagebird { uuid = "f8340488-c192-46e3-b91c-fa44081fa0db" } filter keydisk { uuid = "4e15ed71-1424-4a29-b04f-a48d2a6047e4" } filter kamera { label = "KAMERA" } filter kindle { uuid = "0000-000C" } filter handy1 { uuid = "287C-07CB" } filter handy2 { uuid = "40D7-7FFD" } filter mikrofon { uuid = "FC30-3DA9" }

Wie man sieht erkenne ich die meisten Geräte anhand ihrer uuid. Lediglich die Kamera erkenne ich am Label der eingelegten SD-Karte, damit ich die auch mal einfach direkt in den Kartenleser an meinem Laptop stecken kann, wenn mal wieder der Akku an der Kamera leer ist.

Die Begriffe wie storagebird oder kamera sind frei wählbar, und geben dem gefundenen Gerät einen sprechenden Namen. Außerdem werden sie in den nun folgenden Match-Regeln verwendet

bc. #!css match keydisk { automount = false automountoptions = sync postinsertioncommand = "pmount %devicefile keydisk" postmountcommand = "notify-send %mountpoint" } match kamera { automount = false automountoptions = sync postinsertioncommand = "pmount %devicefile kamera" postmountcommand = "/home/andy/bin/kamerasync.sh" }

Das Automounten gewöhne ich den USB-Geräten damit grundsätzlich ab, und ersetze es im postinsertioncommand, also nach dem einstöpseln durch das pmount Kommando, welches das Gerät einhängt, es mir aber auch als normaler User erlaubt, das Gerät später wieder mittels pumount auszuhängen. Nach dem einhängen, wird dann ausgeführt, was ich im postmountcommand eingetragen habe, und da nutze ich nur die beiden oben angezeigten Varianten.

  1. Anzeigen des Einhängepunktes mittels notify-send, oder
  2. Ausführen eines Scripts

Das Script erledigt dann schlußendlich die eigentlichen Routine-Aufgaben. Für meine Kamera sieht das beispielsweise so aus:

bc. #!bash #! /bin/bash espeak "Kamera found" espeak "Please wait for synchronisation" espeak "Moving pictures" mv /media/kamera/DCIM/MSDCF/*.* ~ cd ~ espeak "Sorting pictures" renrot –aggr-mode template -e JPG espeak "Thank you"

Die vielen espeaks sorgen lediglich dafür, dass ich über den Fortschritt der Arbeiten informiert werde, in diesem Fall per Sprachausgabe. Zunächst werden also alle Bilder aus dem entsprechenden Verzeichnis in mein Home-Verzeichniss verschoben. Die Kamera ist damit wieder leer, und bereit für neue Aufnahmen. Danachlasse ich renrot (rename & rotate) auf diese Dateien los. Dadurch wir mir ein Image-Ordner angelegt, der die Aufnahmen tageweise in Ordner einsortiert. Damit sind sie in der Regel schon mal in auch thematisch zusammenhängenden Ordnern. Diesen Ordnern gebe ich dann später noch Namen wie Geburtstagsfeier oder Ausflug-Maker-Faire und schiebe sie dann in mein Archiv


Andy Drop

I like it, when I see the intentions of a code author, and i like to see it written down in remark lines. Why didn't someone do that with the world. It would be far easier to understand. So I started to document my world wherever I see the need to do so. In text. With Emacs Org mode. I want to share this world with you.


Categories

  • Emacs logoEmacs
    The OS-like text editor
  • Org mode logoOrg mode
    Emacs built-in mode for organizing everything
  • Plaintext logoPlaintext
    Using plain text for everything