Zenity - eine Einführung

Christian Sagmüller


Inhaltsverzeichnis

Was ist Zenity eigentlich?
Wozu soll das gut sein?
Wie funktioniert das Ganze?
Beispiel
Grenzen

Was ist Zenity eigentlich?

Zenity ermöglicht es uns aus einfachen Shell Skripten GUI Fenster anzuzeigen.

Wozu soll das gut sein?

Es gibt User, die nicht, sobald der Computer hochgefahren ist, als erstes die Shell starten (man soll es nicht für möglich halten, aber empirische Studien haben ergeben, dass das sogar auf die Mehrheit an Usern zutrifft ;)). Da es nun für manche Aufgaben einen unnötigen Overhead bedeutet an stelle von Shell Skripting auf Skriptsprachen wie Perl oder Python zurückzugreifen, welche GUIs über Module zur Verfügung stellen, gibt es Tools - wie zB Zenity - die das als ausfürbare Anwendung auch für Shells zur Verfügung stellen.

Wie funktioniert das Ganze?

zenity wird einfach aus dem Skript gestartet und stellt je nach übergebenem Paramter zB Einfabedialoge, Infodialoge oder Warndialoge bereit, die vom User Input verlangen oder aber einfach nur den aktüllen Status anzeigen.

Am einfachsten lässt es sich allerdings anhand eines Beispieles beschreiben. Dazu wird im Folgendem ein sehr simples Interface gebaut, mit dem Dateien mittels wget aus dem Internet geladen werden können.

Beispiel

Als erstes muss ein File vorbereitet werden:

echo "#!/bin/sh" > zenity-wget.sh; chmod +x zenity-wget.sh;

nun geht es auch schon zur Sache. Dazu benötigen wir 2 Files: ein logfile und ein tmpfile

tmpfile=/tmp/wget.$$
logfile=/tmp/wget-log.$$

jetzt muss der User gefragt werden, welche Datei heruntergeladen werden soll

zenity 1--entry 2--title=wget 3--text="Choose a file to Download" >> $tmpfile

1

--entry bestimmt dabei, dass dem User ein Engabefeld presentiert wird. Die Eingabe wird auf die Standardausgabe (in diesem Fall $tmpfile) geschrieben.

2

--title defintert den Test, der in der Titelleiste angezeit werde soll

3

--text beschreibt den Text, der im Dialogfenster erscheint.

Falls der Cancel Button gedrückt wurde soll das Programm nun beendet werden

if [ $? == 1 ]
rm -f $logfile
rm -f $tmpfile
then exit 1
fi

Nun kann auch schon wget gestartet werden:

for file in `cat $tmpfile`
do wget -o $logfile $file

Bis hierher sollte alles klar sein. Nun möchte der User allerdings auch wissen, wann der Download beendet ist, und ob es erfolgreich war.

if [ $? == 0 ]
then zenity --info --title=wget \
--text="$file was downloaded successfull"
else zenity --error --title=wget \
--text="An error occoured while downloading $file"
fi

So wird im Erfolgsfall ein Inforamtionsdialog angezeit, der dem User mitteilt, dass der Download der Datei $file erfolgreich verlaufen ist. Anderenfalls bekommt der User eine Fehlermeldung. Nun sind nur noch einige Abschlussarbeiten zu erledingen

done
rm -f $logfile
rm -f $tmpfile
exit 0

Es ist also sehr einfach mit zenity den einen oder anderen Terminal aufruf zu umgehen. Es könnten nun auch noch weitere Features eingebaut werden, wie zB das Downloaden mehrerer Files, eine Progress Bar (ja, das ist auch mit Zenity möglich) oder es kann ein bestimmter Termin zum Runterladen eingestellt werden (zenity --calendar). Evtl. könnte auch noch ein Zielordner abgefragt werden, aber das sind dann alles Spielereien. Genautere Informationen bietet wie immer `man zenity`.

Grenzen

Wenn man nur an all die Parameter denkt, die an wget übergeben werden können, dann wird schnell klar, dass nicht sehr viel Freihet weitergegeben kann und Zenity Skripte alles andere als flexibel sind.