Funktioniert nicht ist die Lieblingsbeschreibung die wir lesen.
Naja, also mit der gegebenen Beschreibung ist es wohl einfach genug nachzuvollziehen - bzw. sich vorzustellen 😉
Aber gut: Das Backup-Skript startet, zenity gibt aber einen error code 255 zurück (womit ich das Skript aussteigen lasse), wenn z.B. im Titel ein Umlaut steht (wie gesagt, nur, wenn von udev gestartet, manuell gestartet geht es auch mit Umlauten).
Bei der Belegung von backupmountp habe ich übrigens auch eine Merkwürdigkeit bzgl. cut festgestellt (siehe Kommentar im Skript) - vielleicht weiß ja jemand was.
Zum Nachvollziehen hier das Backup-Skript (Werte für <username> einsetzen):
#!/bin/sh
# backup.sh
#
# Das Skript steuert das Backup auf der eingesteckten USB-Festplatte.
# Vorher fragt es, ob das Backup durchgeführt werden soll - wenn nicht, kann die
# Festplatte ganz normal verwendet werden.
backupmountp=""
backupdir=""
# Soll ein Backup / eine Synchronisation durchgeführt werden?
titlepre="Backup durchfuehren?"
textpre="USB-Festplatte wurde eingebunden. Soll eine Synchronisation der Backup-Daten auf der USB-Festplatte mit den auf dem Computer befindlichen Persoenlichen Daten vorgenommen werden?\n\nNach einem \'OK\' darf die Platte erst aus dem System entfernt werden (ueber den ueblichen Menuepunkt \'Auswerfen\'), wenn die Meldung \'Backup beendet\' erscheint.\n\nAbbrechen waehlen, um kein Backup durchzufuehren und die Festplatte normal zu benutzen."
sudo -H -u <username> /usr/bin/zenity --display :0.0 --question --title "${titlepre}" --text "${textpre}"
[ $? -eq 0 ] || exit 0
# warten bis /dev/backup erzeugt wurde
sleep 3
[ -e /dev/backup ] || exit 0
# das '-f 11' ist im Skript nötig, wenn man den Befehl "grep <...>" auf der Konsole ausführt, ein '-f 10' -- Warum?!
backupmountp=$(grep $(ls -l /dev/backup |cut -d " " -f 11) /proc/mounts |cut -d " " -f 2)
# $backupmountp darf kein leerer string sein ("" hat Länge 1)
[ $(echo ${backupmountp} |wc -m) -ge 2 ] || exit 0
# $backupmountp muss als Verzeichnis existieren
[ -d ${backupmountp} ] || exit 0
# $backupmountp darf nicht "/" sein)
[ ! ${backupmountp} = "/" ] || exit 0
backupdir=${backupmountp}/backup
# Hier die eigentlichen Backups
[ -e /home/<username>/Dateien ] && rsync -a --delete /home/<username>/Dateien ${backupdir}
# Dialog "Backup beendet" anzeigen
titlepost="Backup beendet"
textpost="Alle zu synchronisierenden Daten wurden auf die USB-Festplatte geschrieben - diese kann jetzt normal weiter vewendet und ueber den Menuepunkt \'Auswerfen\' ausgehaengt und danach entfernt werden."
sudo -H -u <username> zenity --display=":0.0" --info --title="${titlepost}" --text="${textpost}"
exit 0
Wieso schreibt das board hier statt ")" gefolgt von ":" einen zwinkernden Smily?!
Und dann noch das udev-Skript /etc/udev/rules.d/95-backup.rules (<vendor id>, <product id>, <serial number> einsetzen, herauszufinden mit lsusb, udevmonitor oder anderen udev<...>):
# unser backup script
KERNEL=="sd?1", SYSFS{idVendor}=="<vendor id>", SYSFS{idProduct}=="<product id>", SYSFS{serial}=="<serial number>", SYMLINK+="backup", RUN+="/usr/local/bin/backup.sh"