Seiten

Montag, 1. Juni 2015

Skript mit grafischer Oberfläche automatisch starten, wenn USB-Gerät angeschlossen wird - Automatischer PQ-Download

Da mir es langsam auf den Keks geht, dass ich die erstellen Pocket Queries (PQ) von der Geocaching-Seite alle einzeln herunterladen und entpacken muss, wollte ich das ganze skripten.
Da der Download aber mit der neuen GC-API nicht mehr per wget möglich ist, brauch ich dazu Software, die mit der API kommunizieren kann, die fand ich schnell: http://geo.rkkda.com/ - hier das Untertool geo-pqdownload. 
Das passende Skript, das die PQ herunter lädt, entpackt und aufs Garmin kopiert, war auch schnell geschrieben; um das ganze hab ich noch ne grafische Oberfläche gepackt, damit ich weiß, dass der Vorgang noch läuft.

Nun soll das Skript immer dann starten, wenn ich mein Garmin an den Laptop anschließe und zwar ohne ein Passwort eingegeben zu müssen. Das stellte mich vor das Problem, dass das Skript so als root und nicht mit dem angemeldeten Benutzer gestartet wird, so dass ich weder Dateiberechtigungen, noch eine grafische Oberfläche bekomme.

Lösungsweg:

1. Als erstes muss man Details zum eingebundenen Gerät einholen. Dabei hilft dieser Befehl:
sudo blkid -o list -w /dev/null 
Beispiel-Ausgabe:
device                 fs_type        label             mount point                           UUID
--------------------------------------------------------------------------------------------------------------------------
/dev/sda1            vfat                                  /boot/efi                             43F4-DFAE
/dev/sda2            ext2                                 /boot                                   56acf68d-2c5b-4b69
/dev/sdd              vfat             GARMIN        /media/<user>/GARMIN         abcd-1234

2.  Als nächstes muss das entsprechende Gerät in /etc/fstab definiert werden:
UUID=abcd-1234       /media/<user>/GARMIN     vfat noauto,users,noatime,rw,sync    0       0

3. Um nun das ganze Skript automatisch auszuführen muss man eine udev-Regel erstellen.
3a) Dazu muss man vorbereitend die Geräteinformationen ermitteln:
lsusb
Beispiel-Ausgabe:
Bus 003 Device 006: ID abcd:1234 Garmin International

3b) Detailinformationen zum Gerät ermitteln:
sudo lsusb -vs  003:006 
So erhält man u.a. den Eintrag zur Seriennummer:
iSerial                  xxxxxyyyy1234
3c) Nun kann man im Verzeichnis: /etc/udev/rules.d eine neue Regel erstellen, z.B.: Garmin.rules
KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="xxxxxyyyy1234", SYMLINK+="GARMIN", ACTION=="add", RUN+="/home/<user>/Skripte/UpdatePQ_Helper.sh"
Wobei hier ein Gerät mit
  • Kernel-Einhängepunkt: /dev/sd?1
  • vom Typ: USB
  • mit der Seriennummer: xxxxxyyyy1234
  • Dateisystem-Einhängepunkt: GARMIN
  • Aktion: Hinzufühen (ADD)
gesucht wird. Sind alle Bedingungen erfüllt wird mit RUN das angegebene Skript gestartet - bei mir ein Hilfsskript.

4. Skriptaufruf
Ein Direktaufruf des Skripts ist nicht möglich, da so die grafische Oberfläche nicht sichtbar ist und wie o.e. nur mit root-Rechten ausgeführt wird.

Im Hilfsskript ist der Inhalt hier nur:
#!/bin/bash
#UpdatePQ_Helper.sh
DISPLAY=:0 LANG=de_DE.UTF-8 su -c /home/<user>/Skripte/UpdatePQ.sh <user>
DISPLAY=:0 LANG=de_DE.UTF-8 braucht man zwingend für die grafische Oberfläche.
Der zweite Teil lässt das eigentliche Skript mit einem bestimmten Benutzer ausführen.

Das Hilfsskript und das eigentliche Skript müssen noch ausführbar gemacht werden:
chmod a+x ~/Skripte/UpdatePQ.sh ~/Skripte/UpdatePQ_Helper.sh

5. Gerät anschließen
Schließt man nun das Gerät an, wird dieses automatisch eingehängt, das Skript gestartet und am Ende wieder ausgehängt.

Färtsch.

P.S. Um das alles herauszufinden, war doch ein wenig Google-Hilfe nötig, daher auch der Blogeintrag, sonst muss ich das wieder alles einzeln ermitteln, wenn ich mein System das nächste Mal neu aufsetze.

Keine Kommentare:

Kommentar veröffentlichen