Zenity – Grafische Dialoge für Shell-Skripte unter Linux

Verfasst von

in

,

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:

Bash
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

Bash
sudo apt install zenity

Fedora

Bash
sudo dnf install zenity

Arch Linux

Bash
sudo pacman -S zenity

Grundlegende Funktionsweise

Zenity arbeitet nach einem einfachen Prinzip:

  1. Ein Shell-Befehl erzeugt ein Dialogfenster
  2. Der Benutzer interagiert damit
  3. Das Ergebnis wird an das Skript zurückgegeben

Dadurch können grafische Eingaben direkt in Variablen gespeichert werden.

Beispiel:

Bash
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

Bash
zenity --info --text="Der Vorgang wurde erfolgreich abgeschlossen."

Geeignet für einfache Statusmeldungen oder Hinweise.


Fehlermeldungen

Bash
zenity --error --text="Datei konnte nicht gefunden werden."

Ideal für Fehlerbehandlungen in Skripten.


Warnungen

Bash
zenity --warning --text="Der Speicherplatz wird knapp."

Texteingabe

Bash
zenity --entry \
  --title="Login" \
  --text="Bitte Benutzernamen eingeben:"

Optional kann auch ein Standardwert gesetzt werden:

Bash
zenity --entry \
  --text="Hostname:" \
  --entry-text="localhost"

Passwortabfrage

Bash
zenity --password --title="Authentifizierung"

Das Passwort wird maskiert dargestellt.


Dateiauswahl

Bash
zenity --file-selection

Oder für mehrere Dateien:

Bash
zenity --file-selection --multiple

Sehr nützlich für Backup- oder Import-Skripte.


Verzeichnis auswählen

Bash
zenity --file-selection --directory

Kalenderdialog

Bash
zenity --calendar

Das ausgewählte Datum wird anschliessend an das Skript zurückgegeben.


Listen und Tabellen

Bash
zenity --list \
  --title="Server auswählen" \
  --column="Name" \
  "Webserver" \
  "Datenbank" \
  "Backup"

Mehrere Spalten sind ebenfalls möglich:

Bash
zenity --list \
  --column="ID" \
  --column="Status" \
  1 "Online" \
  2 "Offline"

Fortschrittsanzeige

Einer der praktischsten Einsatzzwecke ist die Anzeige laufender Prozesse.

Bash
(
echo "10"
sleep 1
echo "50"
sleep 1
echo "100"
) | zenity --progress \
           --title="Backup läuft" \
           --percentage=0

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

ParameterBeschreibung
--titleFenstertitel setzen
--textInhalt des Dialogs
--widthFensterbreite
--heightFensterhöhe
--ok-labelText des OK-Buttons
--cancel-labelText des Abbrechen-Buttons
--timeoutFenster automatisch schliessen
--icon-nameEigenes Icon verwenden
--no-wrapZeilenumbruch deaktivieren

Um sich alle Parameter anzeigen zu lasen kann man Zenity folgender massen aufrufenl:

Bash
zenity --help-all

Rückgabewerte verstehen

Zenity liefert Exit-Codes zurück, die in Skripten ausgewertet werden können.

Exit-CodeBedeutung
0OK bestätigt
1Abbrechen
5Timeout

Dadurch können Skripte auf Benutzerentscheidungen reagieren.

Beispiel:

Bash
if zenity --question --text="System wirklich herunterfahren?"
then
    shutdown now
else
    echo "Abgebrochen"
fi

Praktische Einsatzbeispiele

Backup-Skript mit Fortschrittsanzeige

Bash
#!/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-close

Benutzerbestätigung vor kritischen Aktionen

Bash
zenity --question \
       --title="Bestätigung" \
       --text="Möchtest du wirklich alle Logs löschen?"

if [ $? -eq 0 ]; then
    rm -rf /var/log/*
fi

Grafische Auswahl eines Zielordners

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

Bash
#!/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

done

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