Wer regelmässig mit Shell-Skripten unter Linux arbeitet, kennt das Problem: Viele Skripte laufen ausschliesslich im Terminal und wirken für weniger technikaffine Anwender schnell abschreckend. Genau hier kommt Zenity ins Spiel.
Mit Zenity lassen sich einfache grafische Dialogfenster direkt aus der Kommandozeile oder aus Bash-Skripten heraus erzeugen – ohne dass man eine komplette GUI-Anwendung programmieren muss. Das Tool eignet sich hervorragend, um Skripte benutzerfreundlicher zu gestalten und Eingaben, Meldungen oder Fortschritte visuell darzustellen.
Was ist Zenity?
Zenity ist ein kleines Hilfsprogramm aus dem Umfeld von GNOME, das grafische GTK-Dialoge über die Shell bereitstellt. Statt komplexe Fenster mit Toolkits wie GTK oder Qt selbst zu entwickeln, ruft man einfach einen Konsolenbefehl auf.
Ein simples Beispiel:
zenity --info --text="Backup erfolgreich abgeschlossen."Der Befehl öffnet ein Informationsfenster mit einer OK-Schaltfläche. Das Prinzip erinnert an klassische Dialogwerkzeuge wie dialog oder whiptail, allerdings mit nativer grafischer Oberfläche.
Zenity wird häufig eingesetzt für:
- Desktop-nahe Shell-Skripte
- Administrationswerkzeuge
- Installer und Setup-Skripte
- Backup- oder Wartungsskripte
- Benutzerinteraktionen in Automatisierungen
- Einfache grafische Frontends für CLI-Tools
Besonders praktisch ist, dass Zenity Standard-Ein- und Ausgaben nutzt. Dadurch lässt es sich problemlos mit anderen Shell-Befehlen kombinieren.
Installation
Auf vielen Linux-Distributionen ist Zenity bereits vorinstalliert. Falls nicht, kann es einfach über den Paketmanager installiert werden.
Debian / Ubuntu
sudo apt install zenityFedora
sudo dnf install zenityArch Linux
sudo pacman -S zenityGrundlegende Funktionsweise
Zenity arbeitet nach einem einfachen Prinzip:
- Ein Shell-Befehl erzeugt ein Dialogfenster
- Der Benutzer interagiert damit
- Das Ergebnis wird an das Skript zurückgegeben
Dadurch können grafische Eingaben direkt in Variablen gespeichert werden.
Beispiel:
NAME=$(zenity --entry --title="Benutzer" --text="Wie lautet dein Name?")
echo "Hallo $NAME"Das Fenster fragt den Namen ab und speichert die Eingabe in der Variable NAME.
Wichtige Dialogtypen
Zenity unterstützt zahlreiche Dialogarten. Die wichtigsten davon werden im Folgenden vorgestellt.
Informationsdialog
zenity --info --text="Der Vorgang wurde erfolgreich abgeschlossen."Geeignet für einfache Statusmeldungen oder Hinweise.
Fehlermeldungen
zenity --error --text="Datei konnte nicht gefunden werden."Ideal für Fehlerbehandlungen in Skripten.
Warnungen
zenity --warning --text="Der Speicherplatz wird knapp."Texteingabe
zenity --entry \
--title="Login" \
--text="Bitte Benutzernamen eingeben:"Optional kann auch ein Standardwert gesetzt werden:
zenity --entry \
--text="Hostname:" \
--entry-text="localhost"Passwortabfrage
zenity --password --title="Authentifizierung"Das Passwort wird maskiert dargestellt.
Dateiauswahl
zenity --file-selectionOder für mehrere Dateien:
zenity --file-selection --multipleSehr nützlich für Backup- oder Import-Skripte.
Verzeichnis auswählen
zenity --file-selection --directoryKalenderdialog
zenity --calendarDas ausgewählte Datum wird anschliessend an das Skript zurückgegeben.
Listen und Tabellen
zenity --list \
--title="Server auswählen" \
--column="Name" \
"Webserver" \
"Datenbank" \
"Backup"Mehrere Spalten sind ebenfalls möglich:
zenity --list \
--column="ID" \
--column="Status" \
1 "Online" \
2 "Offline"Fortschrittsanzeige
Einer der praktischsten Einsatzzwecke ist die Anzeige laufender Prozesse.
(
echo "10"
sleep 1
echo "50"
sleep 1
echo "100"
) | zenity --progress \
--title="Backup läuft" \
--percentage=0So lassen sich lange Prozesse deutlich benutzerfreundlicher darstellen.
Wichtige Parameter im Überblick
Zenity besitzt eine Vielzahl von Optionen. Einige davon tauchen in fast jedem Skript auf.
| Parameter | Beschreibung |
|---|---|
--title | Fenstertitel setzen |
--text | Inhalt des Dialogs |
--width | Fensterbreite |
--height | Fensterhöhe |
--ok-label | Text des OK-Buttons |
--cancel-label | Text des Abbrechen-Buttons |
--timeout | Fenster automatisch schliessen |
--icon-name | Eigenes Icon verwenden |
--no-wrap | Zeilenumbruch deaktivieren |
Um sich alle Parameter anzeigen zu lasen kann man Zenity folgender massen aufrufenl:
zenity --help-allRückgabewerte verstehen
Zenity liefert Exit-Codes zurück, die in Skripten ausgewertet werden können.
| Exit-Code | Bedeutung |
|---|---|
0 | OK bestätigt |
1 | Abbrechen |
5 | Timeout |
Dadurch können Skripte auf Benutzerentscheidungen reagieren.
Beispiel:
if zenity --question --text="System wirklich herunterfahren?"
then
shutdown now
else
echo "Abgebrochen"
fiPraktische Einsatzbeispiele
Backup-Skript mit Fortschrittsanzeige
#!/bin/bash
(
echo "25"
sleep 1
echo "50"
sleep 1
echo "75"
sleep 1
echo "100"
) | zenity --progress \
--title="Backup läuft" \
--text="Dateien werden gesichert..." \
--auto-closeBenutzerbestätigung vor kritischen Aktionen
zenity --question \
--title="Bestätigung" \
--text="Möchtest du wirklich alle Logs löschen?"
if [ $? -eq 0 ]; then
rm -rf /var/log/*
fiGrafische Auswahl eines Zielordners
TARGET=$(zenity --file-selection --directory)
cp backup.tar.gz "$TARGET"Einfache GUI für Shell-Skripte
Mit etwas Kreativität kann Zenity sogar als minimalistisches GUI-Framework genutzt werden:
#!/bin/bash
while true
do
ACTION=$(zenity --list \
--title="Aktion auswählen" \
--width=400 \
--height=300 \
--column="Option" \
"Backup starten" \
"Logs anzeigen" \
"Systeminformationen" \
"Beenden")
# Prüfen ob Fenster geschlossen wurde
if [ $? -ne 0 ]; then
break
fi
case "$ACTION" in
"Backup starten")
OUTPUT=$(
echo "Backup wird gestartet..."
sleep 1
echo ""
echo "Sichere /home ..."
sleep 1
echo "Sichere /etc ..."
sleep 1
echo ""
echo "Backup erfolgreich abgeschlossen."
)
echo "$OUTPUT" | zenity --text-info \
--title="Backup-Ausgabe" \
--width=600 \
--height=400
;;
"Logs anzeigen")
LOGS=$(ls -lah /var/log 2>&1)
echo "$LOGS" | zenity --text-info \
--title="Log-Verzeichnis" \
--width=700 \
--height=500
;;
"Systeminformationen")
SYSINFO=$(
echo "Kernel:"
uname -a
echo ""
echo "Hostname:"
hostname
echo ""
echo "Speicher:"
free -h
)
echo "$SYSINFO" | zenity --text-info \
--title="Systeminformationen" \
--width=700 \
--height=500
;;
"Beenden")
break
;;
esac
doneVorteile von Zenity
Zenity überzeugt vor allem durch seine Einfachheit.
Schnell einsetzbar
Für einfache grafische Oberflächen reichen oft wenige Zeilen Shell-Code aus.
Keine GUI-Programmierung notwendig
Wer Bash beherrscht, kann sofort grafische Dialoge erzeugen.
Gute Integration in Linux-Desktops
Zenity verwendet GTK und integriert sich optisch gut in GNOME-basierte Systeme.
Ideal für Administration und Automatisierung
Gerade Systemadministratoren profitieren von kleinen grafischen Helfern für Wartungs- oder Deploymentskripte.
Grenzen des Tools
Trotz aller Vorteile ersetzt Zenity keine vollwertige GUI-Entwicklung.
Weniger geeignet ist das Tool für:
- Komplexe Desktop-Anwendungen
- Dynamische Oberflächen
- Umfangreiche Formulare
- Moderne responsive GUIs
- Anwendungen mit vielen Fenstern
Für solche Szenarien sind Frameworks wie GTK, Qt oder Electron besser geeignet.
Fazit
Zenity ist ein äusserst praktisches Werkzeug für Linux-Nutzer, die Shell-Skripte um einfache grafische Dialoge erweitern möchten. Mit minimalem Aufwand lassen sich Eingabefenster, Fehlermeldungen, Fortschrittsanzeigen oder Dateiauswahlen realisieren.
Gerade Administratoren und DevOps-Anwender profitieren davon, bestehende Bash-Skripte deutlich benutzerfreundlicher zu gestalten, ohne eine komplette Desktop-Anwendung entwickeln zu müssen.
Wer bereits mit Bash arbeitet, sollte Zenity definitiv ausprobieren – der Einstieg gelingt in wenigen Minuten, und der praktische Nutzen ist enorm.










