Routine automatisieren mit udisks-glue

Kategorie Computer Bild: Kategorie Computer - Bestimmte Rechte vorbehalten: Andy Drop (cc-by 3.0)

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

awful.util.spawn_with_shell("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:

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

match keydisk {
        automount = false
        automount_options = sync
        post_insertion_command = "pmount %device_file keydisk"
        post_mount_command = "notify-send %mount_point"
}
match kamera {
        automount = false
        automount_options = sync
        post_insertion_command = "pmount %device_file kamera"
        post_mount_command = "/home/andy/bin/kamerasync.sh"
}

Das Automounten gewöhne ich den USB-Geräten damit grundsätzlich ab, und ersetze es im post_insertion_command, 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 post_mount_command 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:

#! /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