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