Yad erzeugt in Shell-Skripten einfache bis komplexe Dialoge. Ganz ohne Tücken funktioniert das sehr leistungsfähige Tool allerdings nicht.
Bei Yad [1] handelt es sich um einen Fork des früher häufig benutzten Programms Zenity [2], den der Entwickler Victor Ananjevsky seit vielen Jahren kontinuierlich weiterentwickelt. Er konzipierte Yad für den direkten Einsatz in der Standard-Shell Bash. Das Tool nimmt Eingaben entgegen und produziert grafisch aufbereitete Ausgaben. Ein Artikel aus der Ausgabe 06/2014 unserer Schwesterzeitschrift LinuxUser fasst die damals zur Verfügung stehenden Dialogtypen zusammen [3]. Inzwischen kamen neue Dialoge hinzu, etwa Benachrichtigungen in Form einfacher Menüs.
In vielen Fällen lassen sich mit Yad auf sehr einfache Weise gute Ergebnisse erzielen, manchmal bedarf es aber auch einer Vor- oder Nachbereitung der Daten. In diesem Artikel geht es zunächst einmal um einfache Beispiele.
Zähler und Countdown
Ein einfacher Zähler, der im Sekundentakt von 1 bis 10 zählt und damit eine einfache Stoppuhr simuliert, lässt sich mit Yad in einer Zeile realisieren (Listing 1, Zeile 1). Die runden Klammern erzeugen in diesem Beispiel in der Bash eine Sub-Shell, deren Ausgaben via Pipe bei Yad landen. Die Sub-Shell führt die For-Schleife durch die Anweisung sleep 1 im Sekundentakt aus. $(seq 1 10) erzeugt dabei die gewünschte Zahlenfolge von 1 bis 10 (Abbildung 1).
Listing 1
Zähler und Countdown
( for i in $(seq 1 10); do echo $i; sleep 1; done ) | yad --progress [...] | yad --progress --title=Countdown --geometry=200x50 ( for i in $(seq 0 10 100); do echo "#$i"; sleep 1; done ) | yad --progress --auto-close --geometry=300x50 yad --timeout-indicator=top --timeout=5 yad --timeout-indicator=top --timeout=3 ; if [ $? -eq 70 ] ; then echo TIMEOUT ; fi

Abbildung 1: Um einen einfachen Zähler zu generieren genügt der Aufruf yad --progress.
Das Beispiel lässt sich beliebig anpassen und erweitern. Zunächst versieht Yad die Anzeige des aktuellen Werts mit einem Prozentzeichen. Um das zu verhindern, hilft es, bei der Ausgabe der Zahlenfolge eine Raute (#) voranzustellen. Dann interpretiert Yad die Daten als reine Werte. Den Code echo $i ersetzen Sie dafür durch echo "# $i". Das Leerzeichen zwischen der Raute und $i dient nur der besseren Lesbarkeit und hat sonst keine weitere Bedeutung. Alternativ funktioniert der Zähler auch als Countdown. In diesem Fall muss die mittels seq erzeugte Zahlenfolge also umgekehrt erscheinen. Dafür sorgt die Anweisung seq 10 -1 1.
Auch das Ändern der Fensteroptik steuert Yad über Optionen. Die Dimensionen passen Sie mit --width und --height an, die Angabe erfolgt in Pixeln. Zusammengefasst funktioniert das auch via --geometry. Die Anweisung --title versieht das Fenster mit einem Titel. Enthält das Argument Leerzeichen, muss es zwischen doppelten Hochkommas stehen (Listing 1, Zeile 2) (Abbildung 2).

Abbildung 2: Mit wenigen Optionen gestaltet Yad die Ausgabe als Countdown und versieht das in seiner Größe festgelegte Fenster mit einem Titel.
Nun benötigt das generierte Fenster möglicherweise gar keinen Close-Button, der in unserem Beispiel viel zu groß ausfällt. Die Anweisung --no-buttons unterdrückt dessen Darstellung. Für Fälle, in denen das Zählen aufwärts erfolgt, kennt Yad noch die Option --auto-close. Sie bewirkt, dass sich der erzeugte Dialog automatisch beim Erreichen des Endwerts schließt (Listing 1, Zeile 3).
Es gibt aber auch eine ganz andere Möglichkeit, einen Countdown-Zähler zu realisieren, Yad kennt einen eigenen, speziellen Modus dafür. Mit der Option --timeout lässt sich das Schließen der Dialogfenster und das Terminieren von Yad selbst festlegen. Auf Wunsch zeigt die Option --timeout-indicator (Abbildung 3) dazu auch einen Verlaufsbalken an (Listing 1, Zeile 4). Solange Sie nur eine Anzeige benötigen, gestalten sich beide Varianten mehr oder weniger identisch. Wenn es aber darum geht, die verstrichene Zeit für etwas zu nutzen, dann wandelt sich die reine Darstellung zu einer im Skript zu verarbeitenden Eingabe.

Abbildung 3: Auf Wunsch blendet Yad auch einen Verlaufsbalken im Fenster ein.
Yad kennt zwei Arten von Rückgaben: Der Standardausgabekanal gibt Werte (Texte oder Zahlen) aus, die sich in normalen Variablen speichern lassen. Unabhängig davon generiert der Befehl aber auch einen klassischen, von der Situation abhängigen Rückgabewert, wie ihn die meisten Programme auf der Shell erzeugen. Wie immer bedeutet der Rückgabewert 0: alles in Ordnung, keine besonderen Vorkommnisse. Alle anderen Rückgabewerte weisen auf Besonderheiten wie etwa Fehler hin. Wenn Yad einen Dialog aufgrund eines abgelaufenen Timeouts terminiert, erzeugt es stets den Rückgabewert 70. Um diese Exit-Codes auszuwerten, verwenden Sie die interne Bash-Variable $?, die den Rückgabewert des zuletzt ausgeführten Befehls enthält (Listing 1, Zeile 5).
Es gibt noch viele weitere Optionen, die bei den unterschiedlichsten Dialogtypen eine Rolle spielt. Die wichtigsten fasst die Tabelle “Wichtige allgemeine Optionen von Yad” zusammen.
|
Option |
Funktion |
|---|---|
|
|
Setzt den Fenstertitel. |
|
|
Definiert ein Icon für das Fenster. |
|
|
Stellt Breite und Höhe des Dialogfensters ein. |
|
|
Legt die Position des Dialogfensters von der linken oberen Bildschirmecke fest. |
|
|
Fasst |
|
|
Zeit bis zum automatischen Beenden des Dialogs. Als Return Code generiert Yad |
|
|
Mögliche Werte für die Position: |
|
|
Definiert einen im Dialogfenster angezeigten Text, die dafür verwendete Breite der Textbox und die Textausrichtung darin. |
|
|
Ein kleines Bild oder Icon, das in Originalgröße am linken Rand des Dialogfensters erscheint. |
|
|
Erlaubt ein anderes als das voreingestellte Icon-Theme zu verwenden. |
|
|
Behält die Originalgröße von Icons bei. |
|
|
Legt einen Pfad fest, unter dem Yad zusätzlich nach Icons sucht. Die Option lässt sich auch mehrfach angeben. |
|
|
Text lässt sich aus dem Dialogfenster heraus ins Clipboard kopieren. |
|
|
Erzeugt abweichende Ausgaben für logische Ausdrücke; voreingestellt verwendet Yad |
|
|
Liest Argumente beispielsweise für Listen (aber keine Optionen) aus der angegebenen Datei. Jede Zeile entspricht einem Argument. |
|
|
Erlaubt es, einen anderen als den voreingestellten Rückgabewert |
|
|
Erlaubt GTK+, den CSS-Code aus dem angegebenen String zu verwenden. Enthält der Parameter einen Dateinamen mit Pfad, wertet Yad den Inhalt aus. |
|
|
Legt fest, wie Yad horizontale und vertikale Rollbalken verwendet. Es gibt die drei Möglichkeiten |
Menüs gestalten
Eine der neueren Entwicklungen von Yad betrifft den Notification-Modus. Er ermöglicht auf einfache Weise und mit wenig Code das Erzeugen eigener Menüs. Dazu nutzen Notifications die bei den modernen Desktop-Environments vorhandenen speziellen Anzeigebereiche. Bei XFCE und vielen anderen befindet er sich in der Leiste beziehungsweise dem Panel oder lässt sich dort hinzufügen (Abbildung 4).
Eine Besonderheit bei Yads Notification-Menüs besteht in der extrem einfachen Syntax, was schon die Online-Hilfe zeigt (Listing 2). Die Option --notification erzeugt das Menü. Was darin steht, legt das Argument von --menu fest. Der Schalter --no-middle verhindert, dass Yad sich beendet, sobald Sie die mittlere Maustaste drücken, was voreingestellt geschieht. Die Größe von Icons, die Yad im Notification-Bereich anzeigt, stellen Sie mit dem Argument hinter --icon-size ein, der Schalter --hidden unterdrückt eine Anzeige des Icons. Allerdings funktionieren dann auch keine Menüs mehr.







