GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erstellen Sie GUI-Dialogfelder in Bash-Skripten mit Zenity in Linux und Unix

Wenn es um Bash-Skripte geht, konzentrieren sich alle Skripte hauptsächlich auf die Befehlszeilenoperation. Ob Sie Eingaben vom Benutzer benötigen oder einige Nachrichten anzeigen, alles wird über das Terminal erledigt. Die meisten Leute, die Skripte mit Bash schreiben, haben keine Ahnung, dass es eine Reihe von GUI-Tools gibt. In diesem Artikel werden wir uns mit einem solchen Tool namens Zenity befassen - ein einfaches Programm, mit dem Sie grafische (GTK+) Dialogfelder in Befehlszeilen- und Shell-Skripten erstellen können.

Was ist Zenity?

Zenity ist eine Neufassung von gdialog, der GNOME-Portierung von Dialog, mit der Sie eine Reihe von Widgets für verschiedene Vorgänge erstellen können, bei denen Benutzer grafisch mit dem Skript interagieren können. Die Widgets basieren auf dem GTK-Toolkit.

Zenity ist ein Open-Source-Programm, das mit C geschrieben wurde Programmiersprache. Es unterstützt Linux, BSD und Windows.

Lassen Sie uns ohne weiteres Umschweife sehen, wie grafische GTK+-Dialogfelder von der Befehlszeile und von Shell-Skripten mit Zenity angezeigt werden.

So installieren Sie Zenity unter Linux

Überprüfen Sie zunächst, ob Zenity installiert und verfügbar ist, indem Sie die folgenden Befehle ausführen:

$ which zenity
/usr/bin/zenity
$ zenity --version
3.32.0
$ zenity --about

Wenn Zenity nicht in Ihrer Distribution installiert ist, führen Sie je nach Distribution die folgenden Befehle aus, um es zu installieren.

Alpines Linux:

$ sudo apk add zenity

Arch-Linux:

$ sudo pacman -S zenity

Fedora, RHEL, CentOS, Alma Linux und Rocky Linux:

$ sudo dnf install zenity

Debian, Ubuntu, Linux Mint, Pop-Betriebssystem:

$ sudo apt install zenity

openSUSE:

$ sudo zypper install zenity

1. Zenity-Hilfe und allgemeine Optionen

Für jedes Widget gibt es eine zugehörige Hilfeoption, über die Sie eine Reihe von unterstützten Optionen abrufen können.

Führen Sie den folgenden Befehl aus, um auf den Hilfebereich zuzugreifen.

$ zenity --help

Es gibt einige allgemeine Optionen, die zusammen mit jedem Widget verwendet werden können. Dies sind keine obligatorischen Optionen, aber wenn sie verwendet werden, können Sie das Widget-Verhalten ändern.

Führen Sie den folgenden Befehl aus, um die Liste der allgemeinen Optionen abzurufen.

$ zenity --help-general

Wir werden sehen, wie diese Optionen in den nächsten Abschnitten funktionieren.

2. Meldungsdialogfeld

Ein Meldungsdialogfeld zeigt ein Fehler-, Warn-, Info- und Fragedialogfeld an. Je nach Situation müssen Sie das entsprechende Dialogfeld im Skript verwenden.

2.1. Fehlerdialogfeld

Um auf die Liste der unterstützten Optionen für das Fehlerdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-error

Verwenden Sie den folgenden Befehl, um das Fehlerdialogfeld im Skript anzuzeigen. Hier der --error flag erstellt das Fehlerdialogfeld und --text flag druckt die Textnachricht. Sie können auf dem Bild sehen, dass dem Dialogfeld ein Fehlersymbol zugeordnet ist.

zenity --error \
       --title "Error Message" \
       --width 500 \
       --height 100 \
       --text "Permission denied. Run with sudo or as root user."

Sie können auch aus dem obigen Bild sehen, dass einige der allgemeinen Optionen wie --width, --height verwendet werden, um die Geometrie des Dialogfelds zu steuern. Das Flag --title wird verwendet, um die Dialogleiste mit dem Titel zu drucken.

2.2. Warndialogfeld

Um auf die Liste der unterstützten Optionen für das Warndialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-warning

Verwenden Sie --warning Flag im Skript, um das Warnfeld und --text anzuzeigen Flag, um die Warnmeldung anzuzeigen.

zenity --warning \
       --title "Warning Message" \
       --width 500 \
       --height 100 \
       --text "Disk space exceeded the threshold limit. Check ASAP."

2.3. Info-Dialogfeld

Um auf die Liste der unterstützten Optionen für das Info-Dialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-info

Verwenden Sie --info Flag im Skript, um die Infobox und --text anzuzeigen Flag, um die Info-Nachricht anzuzeigen.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

2.4. Fragedialogfeld

Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Fragedialogfeld zuzugreifen:

$ zenity --help-question

Das Fragedialogfeld zeigt eine Meldung zusammen mit einem Ja an oder Nein Möglichkeit. Wenn Sie "Ja" drücken , ist der Rückgabecode "Null" und für "Nein" der Rückgabecode ist "eins" . Sie müssen die Exit-Codes verwenden, um weitere Logik in Ihre Skripte zu schreiben.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

3. Dialogfeld zur Texteingabe

Um auf die Liste der unterstützten Optionen für das Texteingabedialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-entry

Das Texteingabedialogfeld fordert den Benutzer zur Eingabe auf. Das Flag --entry zum Erstellen eines Eingabedialogs verwendet werden. Um Text im Dialogfeld anzuzeigen, verwenden Sie --text Flagge. Der in das Textfeld eingegebene Wert wird im Terminal gedruckt, sobald Sie OK drücken. Sie müssen die Ausgabe in einer Variablen speichern, wenn Sie die Eingabe aus dem Textfeld weiterverarbeiten möchten, wie ich es unten getan habe.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name"); echo $USR

Wenn Sie den Eingabetext beim Tippen nicht sichtbar machen möchten, verwenden Sie den --hide-text Flagge.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --hide-text); echo $USR

Sie können auch einen Standardwert innerhalb des Eingabefelds mit --entry-text festlegen Flagge. Sie müssen den Wert entfernen und Ihre Eingabe machen oder der vorhandene Wert wird als Standard übernommen.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --entry-text $USER); echo $USR

4. Passwort-Dialogfeld

Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Kennwortdialogfeld zuzugreifen:

$ zenity --help-password

Das Passwort-Dialogfeld akzeptiert Benutzername und Passwort mit --username und --password Flagge. Die Ausgabe wird als (Benutzername | Passwort) angezeigt. Sie müssen die Ausgabe des Befehls einer Variablen zuweisen und den Benutzernamen und das Passwort zur weiteren Verarbeitung extrahieren.

$ zenity --password --username

5. Dialogfeld „Textinformationen“

Um auf die Liste der unterstützten Optionen für das Textinformationsdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-text-info

Das Dialogfeld „Textinformationen“ druckt beliebigen Text aus einer Datei oder öffnet eine URL im Dialogfeld. Um beispielsweise eine Datei zu lesen und den Text anzuzeigen, verwenden Sie das Flag --filename . Im folgenden Beispiel lese ich /etc/hosts Datei.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"

Das --checkbox Flag kann verwendet werden, um Eingaben vom Benutzer zu erhalten. Ein gutes Beispiel wäre "Lizenzvereinbarung akzeptieren". Wenn Sie das Kontrollkästchen nicht aktivieren, ist die Schaltfläche „OK“ deaktiviert.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"

6. Dialogfeld „Kalender“

Um auf die Liste der unterstützten Optionen für das Kalenderdialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-calendar

Das Dialogfeld „Kalender“ zeigt einen Kalender an und ermöglicht Ihnen die Auswahl eines Datums. Sie müssen die Ausgabe in einer Variablen speichern, sonst wird das ausgewählte Datum im Terminal ausgegeben.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record."

Standardmäßig ist das heutige Datum ausgewählt, aber wir können auch ein benutzerdefiniertes Datum auswählen, indem Sie --day verwenden , --month , und --year Flaggen.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --year 2015 \
       --month 7 \
       --day 15

Das Standardausgabeformat ist DD\MM\YY . Es ist auch möglich, eine benutzerdefinierte Datumsausgabe mit dem --date-format zu erstellen Flagge.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --date-format %m-%d-%y

7. Dialogfeld zur Farbauswahl

Um auf die Liste der unterstützten Optionen für das Farbauswahldialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-color-selection

Der Farbauswahldialog zeigt eine Palette an und erlaubt Ihnen, eine Farbe auszuwählen, und die Ausgabe ist ein RGB-Wert. Verwenden Sie --color-selection zusammen mit --show-palette kennzeichnen Flagge.

$ COLOR_RGB=$(zenity --color-selection --show-palette)
$ echo $COLOR_RGB

8. Dialogfeld zur Dateiauswahl

Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Dialogfeld zur Dateiauswahl zuzugreifen:

$ zenity --help-file-selection

Im Dateiauswahldialog können Sie Dateien oder Verzeichnisse auswählen und der Pfad wird als Ausgabe angezeigt. Das Flag --file-selection sollte benutzt werden. Es gibt ein paar Flags, die im Dateiauswahldialog verwendet werden können.

  • --filename => Pfad zur Standarddatei/-verzeichnis
  • --directory => Nur Verzeichnisse auswählen
  • --multiple => Ermöglicht die Auswahl mehrerer Dateinamen
  • --save => In den Sparmodus setzen
zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple

Bei Mehrfachauswahl wird der Dateipfad mit dem "|" getrennt Symbol.

Es ist möglich, mit --separator ein benutzerdefiniertes Trennzeichen festzulegen Flagge. Im folgenden Beispiel verwende ich Doppelpunkt (: ) als Trennzeichen.

zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple \
       --separator :

9. Dialogfeld "Formulare"

Führen Sie den folgenden Befehl aus, um auf die Liste der unterstützten Optionen für das Formulardialogfeld zuzugreifen:

$ zenity --help-forms

Im Formulardialog können Sie Formulare erstellen. Ein gutes Beispiel ist das Registrierungsformular für neue Benutzer. Verwenden Sie --forms Flag zum Erstellen eines Formulardialogfelds. Es gibt ein paar zusätzliche Flags, die zusammen mit den --forms verwendet werden können Flagge.

  • --add-entry => Fügen Sie einen neuen Eintrag im Formulardialog hinzu, damit der Benutzer die Eingaben vornehmen kann.
  • --text => Text, der im Dialogfeld angezeigt werden soll.
  • --add-password => Akzeptiert das Passwort, zeigt den Wert aber nicht auf dem Bildschirm an.
  • --calendar => Kalender öffnen und ein Datum daraus auswählen.

Unten sehen Sie ein einfaches Beispiel für ein Anmeldeformular für Benutzer, das den Formulardialog verwendet.

zenity --forms \
       --text "Welcome to signup wizard" \
       --add-entry "Enter the first name" \
       --add-entry "Enter the last name" \
       --add-entry "Enter login name" \
       --add-password "Enter password"

Das Standardtrennzeichen für die Eingabewerte ist der "|" Symbol. Sie können auch ein benutzerdefiniertes Trennzeichen mit --separator verwenden Flagge.

10. Fortschrittsdialogfeld

Um auf die Liste der unterstützten Optionen für das Fortschrittsbalken-Dialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-progress

Verwenden Sie --progress Flag, um einen Fortschrittsbalken zu erstellen. Um einen Fortschrittsbalken zu erstellen, müssen Sie verstehen, wie er funktioniert. Von Ihrer Seite sollten zwei Eingaben bereitgestellt werden.

  1. Die Zeile, die nur die Zahl mit dem echo enthält Befehl wird als Prozentsatz des Fortschritts betrachtet.
  2. Die Zeile, die mit dem # beginnt Symbol im echo Befehl wird als Fortschrittsmeldung ausgegeben.
(
  echo 10
  echo "# Updating repository Index"
  sleep 5

  echo 15
  echo "# Reading input files"
  sleep 5

  echo 70
  echo "# Installing packages..."
  sleep 5

  echo 100
  echo "# Package Installation completed!"
) | zenity --title "Package Installation Progress Bar" --progress --auto-close

Sobald der Fortschrittsbalken fertig ist, können Sie ein Dialogfeld so einstellen, dass es automatisch geschlossen wird, indem Sie das Flag --auto-close verwenden.

11. Listendialogfeld

Um auf die Liste der unterstützten Optionen für das Listendialogfeld zuzugreifen, führen Sie den folgenden Befehl aus:

$ zenity --help-list

Im Listendialogfeld können Sie eine Liste mit Zeilen und Spalten erstellen. Verwenden Sie --list Flag zum Erstellen einer Liste im Dialogfeld und --column Flag zum Hinzufügen von Spalten.

$ zenity --list \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      Messi PSG Argentina \
      Neymar PSG Brazil \
      Ronaldo Manu Portugal

Schauen Sie sich das obige Beispiel an. Verwenden der --column flag, ich habe drei Spalten erstellt. Nachdem die Spalten erstellt wurden, können Sie den Wert in die nächsten Zeilen eingeben, der für jede Zeile angezeigt wird, wie ich es im obigen Bild getan habe.

In der ersten Spalte können Checkboxen oder Radiobuttons erstellt werden. Verwenden Sie zum Erstellen eines Optionsfelds --radiolist Flag und um ein Kontrollkästchen zu erstellen, verwenden Sie --checklist Flagge. Beim Erstellen einer Radioliste muss unbedingt TRUE hinzugefügt werden oder FALSCH keywords als ersten Wert für Ihre Zeile. True wählt die Radioliste oder das Kontrollkästchen aus, während false das Kontrollkästchen deaktiviert lässt.

zenity --list \
      --checklist \
      --column "checkbox" \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      FALSE Messi PSG Argentina \
      FALSE Neymar PSG Brazil \
      FALSE Ronaldo Manu Portugal

Wenn Sie die Zeile auswählen und auf OK klicken, wird der Wert mit (| an das Terminal ausgegeben ) als Trennzeichen. Standardmäßig wird nur die erste Spalte an das Terminal gedruckt. Um die gesamte Zeile zu drucken, übergeben Sie --print-column ALL .

Schlussfolgerung

Wir sind am Ende des Artikels angelangt. Ich habe kurz erklärt, was Zenity ist und welche verschiedenen Widgets verwendet werden können. Möglicherweise benötigen Sie nicht ständig GUI-Dienstprogramme. Wenn Sie jedoch grafische GTK+-Widgets in Bash-Skripten benötigen, wird Zenity neben anderen GUI-Tools nützlich sein.


Linux
  1. So erstellen Sie eine Sicherung mit dem tar-Befehl unter Linux

  2. Hinzufügen einer einfachen GUI zu Linux-Shell-Skripten mit kdialog

  3. So erstellen Sie Bash-Skripte mit externen Variablen und eingebetteten Skripten

  4. So installieren Sie Linux KVM und erstellen eine Gast-VM mit Beispielen

  5. So erstellen und starten Sie LXC-Linux-Container mit LXC-Befehlen

So erstellen Sie eine Volumengruppe in Linux mit LVM

So erstellen Sie Dokumente mit Bash-Skripten

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

So erstellen und verwenden Sie eine Auslagerungsdatei unter Linux

So erstellen Sie eine Datenbank und fügen eine Sammlung mit MongoDB GUI Compass hinzu

So führen Sie Linux-GUI-Apps unter Windows 10 mit WSL und WSLg aus