Zenity
Aus Fedorawiki.de
zenity ermöglicht die Darstellungen von GTK+ Dialogen aus einfachen Shell-Scripts heraus. Es ist eine simplere Alternative zu Perl und Python, welche diese Module zum Erzeugen von GUI-Elemente auch beinhalten.
Inhaltsverzeichnis |
Installation
Die Installation von zenity ist sehr einfach, da es im Repository von Core verfügbar ist. Entweder mit Yum, pirut oder yumex installieren.
Die Elemente
zenity besitzt nur einen beschränkten Funktionsumfang, jedoch ist dieser ausreichend, um alle wichtigen Dialog-Boxen zu erzeugen.
Mitteilungsdialoge
Die einfachste Form einer Hinweis-Box kann den Benutzer informieren oder ihn über den Status unterrichten.
zenity --info --text "Dies ist eine Hinweis-Box"
Die Option --text ="STRING" kann bei allen Typen verwendet werden und wird nicht mehr aufgeführt.
| Allgemeine Optionen für die Dialogbox-Typen | |
|---|---|
| Option | Beschreibung |
| --title=TITLE | legt den Dialog-Titel fest |
| --window-icon=ICONPATH | Legt das Icon des Dialoges fest |
| --width=WIDTH | Gibt die Dialogfenster-Breite an |
| --height=HEIGHT | Gibt die Dialogfenster-Höhe an |
Mitteilungs-Dialog für Text
Soll eine grössere Anzahl von Zeichen, zum Beispiel der Inhalt einer Datei, ausgegeben werden, kann dieser Dialog-Typ verwendet werden.
zenity --text-info --text "Dies ist eine Mitteilungs-Box für viel Text"
Frage-Dialoge
Die Frage-Dialoge können entweder mit ja oder nein beantwortet werden. Sie geben je nach Antwort 0 oder 1 zurück. Mit dieser Information kann weitergearbeitet werden.
zenity --question --text="Sind Sie sicher?"
Eingabe-Dialoge
Diese Dialog-Art unterscheidet sich insofern von den anderen, dass sie Informationen speichern muss, respektive an eine Variabel übergeben.
Soll der Wert in das Terminal übertragen werden.
zenity --entry --title=Name --text="Bitte Namen eingeben" || NAME
Hier wird der eingegebene Wert in ein Variabel gespeichert.
WERT=`zenity --entry --title=Name --text="Bitte Namen eingeben"`
Der Wert kann auch in eine Datei geschrieben werden. Bei der Verwendung von > wird die Datei erzeugt und der Wert hineingeschrieben, falls die Datei existiert, wird sie überschrieben. Wird >> gebraucht, wird der Wert am Ende der Datei angehängt.
tmpfile=/tmp/log_name.$$ zenity --entry --title=Name --text="Bitte Namen eingeben" >> $tmpfile
Warn-Dialoge
Diese Dialoge sind wie der Mitteilungs-Dialog, nur, dass sie bereits ein entsprechendes Icon enthalten.
zenity --warning --text "Dies ist eine Warn-Box" --title=Warn-Box
Fehler-Meldung
Analog zum Warn-Dialog
zenity --error --text "Dies ist eine Fehler-Dialog-Box" --title=Fehler-Hinweis
Kalender-Dialog
Mit diesem Dialog ist es möglich mit dem Datum zu arbeiten. Es wird eine Monats-Übersicht angezeigt.
zenity --calendar --text "Dies ist ein Kalender" --title="Kalender"
Neben den allgemeinen Optionen, gibt es für diesen Typen folgende zusätzliche Optionen.
| Spezielle Optionen für diesen Dialogbox-Typen | |
|---|---|
| Option | Beschreibung |
| --day=INT | Setzt den Kalender-Tag |
| --month=INT | Setzt den Kalender-Monat |
| --year=INT | Setzt das Kalender-Jahr |
| --date-format=STRING | Datum-Format |
Liste
Für die strukturierte Darstellung von Daten ist der Listen-Dialog eine bequeme Methode, da man sich nicht mit der Formatierung herumschlagen muss.
zenity --list --text "Dies ist eine Fehler-Dialog-Box" --title=Auswahl-Liste
Neben den allgemeinen Optionen, gibt es für diesen Typen folgendes zusätzliche Optionen
| Spezielle Optionen für diesen Dialogbox-Typen | |
|---|---|
| Option | Beschreibung |
| --column=STRING | Spalten-Kopf |
| --checklist | In der ersten Spalte hat es Check-Boxen |
| --radiolist | Radio-Knöpfe in der ersten Spalte |
| --separator=STRING | Ausgabe-Trennzeichen |
| --editable | Lässt Änderungen am Text zu |
| --print-column=STRING | Legt die Spalte fest, welche als als Standard-Ausgabe verwendet wird. Standardmässig ist es die erste Spalte. "ALL" benützt alle Spalten. |
Datei-Auswahl
Für die Auswahl von Dateien gibt es eine speziellen Dialog-Typ. Dieser stellt die gewünschte Funktion zur Verfügung.
zenity --file-selection --text "Dies ist eine Datei-Auswahl-Dialog-Box" --title=Datei-Auswahl
Neben den allgemeinen Optionen, gibt es für diesen Typen folgendes zusätzliche Optionen
| Spezielle Optionen für diesen Dialogbox-Typen | |
|---|---|
| Option | Beschreibung |
| --filename=FILENAME | Setzt den Dateinamen |
| --multiple | Lässt mehrfache Auswahl zu |
| --separator=SEPARATOR | Trennzeichen bei der Wahl bei mehreren Dateien |
Progress-Status
Bei länger dauernden Prozessen ist es für den Benutzer praktisch, wenn angezeigt wird, wie der Status der Operation ist, respektive wie lange es noch dauert, bis das Ende erreicht ist.
zenity --progress --text "Dies ist ein Progress-bar" --title=Progress-Bar
Neben den allgemeinen Optionen, gibt es für diesen Typen folgendes zusätzliche Optionen
| Spezielle Optionen für diesen Dialogbox-Typen | |
|---|---|
| Option | Beschreibung |
| --percentage=INT | Legt Start-Prozentsatz fest |
| --auto-close | Schliesst automatisch bei 100% |
| --pulsate | Progress-Bar pulsisert |
Muster
In der folgenden Tabelle werden ein paar Beispiele zur Veranschaulichung der Dialogboxen mit ihrem Code aufgelistet.
| Dialog-Boxen | ||
|---|---|---|
| Einfachste Hinweisbox | zenity --info --text "Dies ist eine Hinweis-Box" | |
| Einfache Version mit Titel | zenity --info --text "Dies ist eine Hinweis-Box" --title=Hinweis-Box | |
| Einfache Version mit Titel und mehr Text | zenity --info --text "zenity --info --text "Dies ist eine Hinweis-Box \ Diese Box enthält mehr Text. Als die vorherigen Versionen \ Und noch etwas mehr..." --title=Hinweis-Box | |
| Eingabe-Feld | zenity --entry --title=Name --text="Bitte Namen eingeben" || NAME | |
| Frage-Dialog | zenity --question --text="Sind Sie sicher?" | |
| Liste | zenity --list --radiolist --width=500 --height=250 --text "Welche Tageszeit ist momentan?" --title "Tageszeit-Auswahl" --column="" --column Punkt --column Beschreibung \ \"\" Morgen "Es ist Morgen" \ \"\" Mittag "Es ist Mittag" \ \"\" Abend "Es ist Abend" \ | |
| Kalender | zenity --calendar \
--title="Wähle ein Datum" \
--text="Klicke auf ein Datum um es zu wählen" \
--day=28 --month=2 --year=2007
| |
Programm-Beispiele
Folgende Beispiele sollen einen Einblick das Verwenden von zenity in Shell-Skripten bieten und auch als Anregung zum Erstellen von eigenen Programmen dienen. Es ist keine Abhandlung über die Shell-Programmierung und sollte so auch von weniger versierten Anwendern verstanden werden. Ich habe versucht alle relevante Teile ausführlich zu kommentieren. Viele nützliche Informationen über die Skript-Programmierung in der Shell können diesem Howto oder dieser Anleitung entnommen werden und wurden auch hier verwendet.
Zum Ausführen der Skripte, nachdem der Inhalt in eine Datei kopiert worden ist, siehe unter "Ausführen der Programme" in nächsten Kapitel.
Hallo Welt
Das bekannteste, erste Programm sollte natürlich nicht ausgelassen werden. In einer etwas anderen Form, da zenity ja nicht wirklich eine Programmiersprache ist, sondern nur auf die Shell-Programmierung aufsetzt. Ein Shell-Skript für "Hallo Welt" sieht so aus.
#! /bin/bash # echo Hallo Welt !
Ein bisschen erweitert, es wird nun eine Variabel benutzt. Als keine Anmerkung sei gesagt, dass die Variabelnamen nur alphanummerische Zeichen und Unterstrich enthalten dürfen.
#! /bin/bash # VAR="Hallo Welt" zenity --info --title=$VAR --text="$VAR"
Die Entsprechung auf Shell-Basis würde nun so aussehen.
#! /bin/bash # VAR="Hallo Welt" echo $VAR
Angemeldeter Benutzer
Im vorherigen Beispiel wurde VAR als Variabel benutzt. Es gibt jedoch auch Variabeln, welche das System für sich verwendet. Eine dieser Variabeln ist $USER und zeigt den angemeldeten Benutzer an.
#! /bin/bash # echo "Hallo $USER" exit 0
Nun die Variante mit zenity
#! /bin/bash # zenity --info --title=Benutzer --text="Hallo $USER" exit 0
Anlegen von einem Verzeichnis
Die erste Variante ist ein reines Shell-Skript. Es wird im Verzeichnis /tmp ein neues Verzeichnis verzeichnis01 angelegt.
Eine kurze Fassung sieht so aus
#! /bin/bash # # Pfad zum temprären Verzeichnis und den Namen des Verzeichnisses festlegen TMPDIR=/tmp/ VERZ_NAME=verzeichnis01 # Ein eventuell vorhandenes Verzeichnis wird gelöscht rm -rf $TMPDIR/$VERZ_NAME # Anlegen des Verzeichnisses $VERZ_NAME mkdir -p $TMPDIR/$VERZ_NAME
Die leicht erweiterte Version, welche eine einfache Integration von zenity ermöglicht.
#! /bin/bash
#
# Pfad zum temprären Verzeichnis und den Namen des Verzeichnisses festlegen
TMPDIR=/tmp/
VERZ_NAME=verzeichnis01
############################### Programm-Bereich ###############################
function verz_anlegen {
# Ein eventuell vorhandenes Verzeichnis wird gelöscht
rm -rf $TMPDIR/VERZ_NAME
# Anlegen des Verzeichnisses $VERZ_NAME
mkdir -p $TMPDIR/$VERZ_NAME
}
##############################################################
# Der Programm-Start
verz_anlegen
Nun soll der Verzeichnis-Name vom Benutzer gewählt werden können. Im vorherigen Beispiel war der Verzeichnis-Name "hardcodiert".
#! /bin/bash
#
# Pfad zum temprären Verzeichnis
TMPDIR=/tmp/
############################### Programm-Bereich ###############################
function verz_anlegen {
# Dialog-Box zur Verzeichnis-Namen-Eingabe
VERZ_NAME=`zenity --entry --title=Ping --text="Verzeichnis-Name"`
# Ein eventuell vorhandenes Verzeichnis wird gelöscht
rm -rf $TMPDIR/$VERZ_NAME
# Anlegen des Verzeichnisses $VERZ_NAME
mkdir -p $TMPDIR/$VERZ_NAME
}
##############################################################
# Der Programm-Start
verz_anlegen
In diesem Beispiel wurde nun mit einem Funktionsaufruf gearbeitet. Dies ermöglicht die einfache Wiederverwendung von Code-Segmenten, da sich die relevanten Teile innerhalb der geschweiften Klammern befindet. Der Aufruf der Funktion erfolgt mit verz_anlegen, welche ganz am Ende des Skriptes steht. Dies ist nur eine Möglichkeit, um den Code besser zu gliedern.
Anlegen einer Datei
Hier wird mit touch eine Datei angelegt, nachdem man als Benutzer das Verzeichnis eingegeben hat.
#! /bin/bash
#
############################### Programm-Bereich #################################################
function anlegen {
# Dialog-Box zur Verzeichnis-Namen-Eingabe
PFAD=`zenity --entry --title=Dateien anlegen --text="Angabe des Verzeichnises, inkl. aller /"`
# Abfrage: je nach Antwort wird 0 oder 1 zurückgegeben.
zenity --question --text="Sind Sie sicher?"
if [ $? = 0 ];then
# Anlegen einer Datei
touch $PFADTest.$$ || exit 1
else
zenity --info --text "Danke für die Benutzung"
exit 1
fi
}
##############################################################################################
# Start
anlegen
Löschen von Dateien
Teile des obigen Skriptes können auch verwendet werden zum Löschen von Dateien. Wir entnehmen nur den rm -rf-Teil. Weitere Informationen zu rm -rf gibt es hier.
| | Achtung: Bei der Verwendung diese Beispiel sollte man genau wissen, was man macht. |
#! /bin/bash
#
############################### Programm-Bereich ###############################
function loeschen {
# Dialog-Box zur Verzeichnis-Namen-Eingabe
PFAD=`zenity --entry --title=Verzeichnis--text="Angabe des Verzeichnis, inkl. aller /"`
# Abfrage: je nach Antwort wird 0 oder 1 zurückgegeben.
zenity --question --text="Sind Sie sicher?"
if [ $? = 0 ];then
# Eventuell vorhandene Dateien werden gelöscht
rm -rf $PFAD/* || exit 1
else
zenity --info --text "Danke für die Benutzung"
exit 1
fi
}
##############################################################
# Der Programm-Start
loeschen
Hier wurde nun, wie auch schon bei Beispiel zum Anlegen einer Datei, mit eine Schlaufe gearbeitet. So ist die Auswertung des Frage-Dialoges sehr einfach.
Erweiterung der Auswahl-Liste
Wir führen das Beispiel aus der obigen Muster-Liste fort. Die Auswahl-Liste lässt dem Benutzer die Wahl zwischen drei Zuständen.
#! /bin/bash
#
############################### Auswahlmenü #################################################
function menu {
AUSWAHL=`zenity --list --radiolist --width=700 --height=350 --text "Welche Tageszeit ist momentan?" --title "Tageszeit" --column="" --column Punkt --column Beschreibung \
\"\" Morgen "Es ist Morgen" \
\"\" Mittag "Es ist Mittag" \
\"\" Abend "Es ist Abend" \
`
# Auswerten der Auswahl
if [ -z "$AUSWAHL" ];then
zenity --info --text "Danke für die Benutzung"
elif [ "$AUSWAHL" = Morgen ];then
auswahl_morgen
elif [ "$AUSWAHL" = Mittag ];then
auswahl_mittag
elif [ "$AUSWAHL" = Abend ];then
auswahl_abend
fi
}
############################### Morgen #############################
function auswahl_morgen {
# Infotext
zenity --info --text "Es ist Morgen"
menu
}
############################### Mittag #############################
function auswahl_mittag {
zenity --info --text "Es ist Mittag"
menu
}
############################### Abend ###############################
function auswahl_abend {
zenity --info --text "Es ist Abend"
menu
}
##############################################################################################
# Start
menu
Darstellen von Ausgabe-Werten
Dieses Beispiel stammt aus der Man-Page von zenity und zeigt die Funktionsweise, wie Daten eleganter dargestellt werden können. Hier wird der Inhalt des aktuellen Verzeichnis angezeigt.
#! /bin/bash
#
############################### Programm-Bereich #################################################
function ausgabe {
find . -name '*' | zenity --list --width=700 --height=500 \
--title "Such-Resultat" --text "Anzeigen der Datein im aktuellen Verzeichnis..." \
--column "Informationen"
}
##############################################################################################
# Start
ausgabe
Darstellen der dmesg-Ausgabe
Das obige Beispiel kann ein wenig erweitert werden und so lässt sich die Ausgabe von dmesg nach einen bestimmten Begriff durchsuchen. Die Ausgabe wird in einer Liste dargestellt.
#! /bin/bash
#
############################### Programm-Bereich #################################################
function ausgabe {
# Dialog-Box zur Eingabe des Wertes
WERT=`zenity --entry --title=dmesg --text="Eingabe der Suchbegriffes"`
dmesg | grep $WERT | zenity --list --width=700 --height=500 \
--title "Ausgabe" --text "Anzeigen der dmesg-Ausgabe" --column "Informationen"
}
##############################################################################################
# Start
ausgabe
Durchsuchen mit Progress-Bar
Dieses Beispiel stammt ebenfalls aus der Man-Page und zeigt einen Progress-Bar an, während im Home-Verzeichnis nach Dateien gesucht wird.
#! /bin/bash
#
############################### Programm-Bereich #################################################
function suchen {
`echo $HOME` '*.pdf' | zenity --progress --pulsate
}
##############################################################################################
# Start
suchen
Datum-Auswahl
Das Datum wird vom Befehl date geliefert und in den Variabel gespeichert. So ist das angezeigte Datum der aktuelle Tag.
#! /bin/bash
#
############################### Programm-Bereich #################################################
function kalender {
TAG=`date '+%d'`
MONAT=`date '+%m'`
JAHR=`date '+%Y'`
if DATUM=`zenity --calendar \
--title="Wähle ein Datum" \
--text="Klicke auf ein Datum um es zu wählen." \
--day=$TAG --month=$MONAT --year=$JAHR`
then zenity --info --text "Es wurde $DATUM gewählt."
exit 1
else zenity --info --text "Kein Datum gewählt"
exit 1
fi
}
##############################################################################################
# Start
kalender
Ausführen der Programme
Wie jedes Skript, muss die Datei ausführbar gemacht werden.
chmod +x zenity-test.sh
Nun kann das Skript gestartet werden
bash zenity-test.sh
oder mit folgendem Syntax
./zenity-test.sh
Gnome-Menu
Wenn Skripte ohne öffnen eines Terminals gestartet werden sollen, brauchen sie einen Eintrag im Gnome-Menu. Dazu muss eine Datei in folgendem Verzeichnis /usr/share/applications/zenity-test.desktop angelegt werden. Der Inhalt muss dem folgendem Schema entsprechen.
[Desktop Entry] Encoding=UTF-8 Name=Zenity Test Comment=Testen der Zenity-Funktion Exec=zenity-test.sh Icon=pup.png Terminal=true Type=Application Categories=System;
Weitere Informationen siehe unter Gnome Menüs editieren
Weitere Beispiele
- Ein sehr umfassendes Skript ist das Fedoraforum.de-Installationshilfe.
- In diesem Artikel ist die Verwendung mit Aiglx beschreiben.
- Die Verkleinerung von Bildern ist eine weitere praktische Anwendung.
- Die Gnome-Hilfe unter System -> Hilfe biete ein Überblick der meisten Funktionen.
Siehe auch
Kategorien: HOWTO | System | Programme

