Pokud jde o skriptování bash, všechny skripty jsou zaměřeny hlavně na operace příkazového řádku. Ať už potřebujete vstup od uživatele nebo zobrazit nějaké zprávy, vše se děje přes terminál. Většina lidí, kteří píší skripty pomocí Bash, netuší, že je k dispozici sada nástrojů GUI. V tomto článku se podíváme na jeden takový nástroj s názvem Zenity - jednoduchý program, který vám umožňuje vytvářet grafická (GTK+) dialogová okna v příkazovém řádku a skriptech shellu.
Co je Zenity?
Zenity je přepsáním gdialogu, portu dialogu GNOME, který vám umožňuje vytvářet sadu widgetů pro různé operace, kde mohou uživatelé graficky pracovat se skriptem. Widgety jsou založeny na sadě nástrojů GTK.
Zenity je open source program napsaný pomocí C programovací jazyk. Podporuje Linux, BSD a Windows.
Bez dalších okolků se podívejme, jak zobrazit grafická dialogová okna GTK+ z příkazového řádku a skriptů shellu pomocí Zenity.
Jak nainstalovat Zenity v Linuxu
Nejprve zkontrolujte, zda je zeity nainstalován a dostupný k použití spuštěním následujících příkazů:
$ which zenity /usr/bin/zenity
$ zenity --version 3.32.0
$ zenity --about
Pokud zeity není ve vaší distribuci nainstalován, spusťte následující příkazy v závislosti na vaší distribuci a nainstalujte jej.
Alpine Linux:
$ sudo apk add zenity
Arch Linux:
$ sudo pacman -S zenity
Fedora, RHEL, CentOS, Alma Linux a Rocky Linux:
$ sudo dnf install zenity
Debian, Ubuntu, Linux Mint, Pop OS:
$ sudo apt install zenity
openSUSE:
$ sudo zypper install zenity
1. Nápověda Zenity a běžné možnosti
Ke každému widgetu je přidružena možnost nápovědy, jejímž prostřednictvím můžete získat sadu podporovaných možností.
Spusťte následující příkaz pro přístup k části nápovědy.
$ zenity --help
Existuje několik běžných možností, které lze použít spolu s jakýmkoli widgetem. Tyto možnosti nejsou povinné, ale pokud je použijete, budete moci změnit chování widgetu.
Chcete-li získat seznam běžných možností, spusťte následující příkaz.
$ zenity --help-general
Jak tyto možnosti fungují, uvidíme v následujících sekcích.
2. Dialogové okno zprávy
V dialogovém okně se zprávou se zobrazí dialogové okno s chybou, varováním, informací a otázkou. V závislosti na situaci musíte použít příslušné dialogové okno ve skriptu.
2.1. Dialogové okno chyby
Chcete-li zobrazit seznam podporovaných možností pro chybové dialogové okno, spusťte následující příkaz:
$ zenity --help-error
Chcete-li ve skriptu zobrazit dialogové okno chyby, použijte následující příkaz. Zde je --error
flag vytvoří chybové dialogové okno a --text
flag vytiskne textovou zprávu. Z obrázku můžete vidět, že k dialogovému oknu je přidružena ikona chyby.
zenity --error \ --title "Error Message" \ --width 500 \ --height 100 \ --text "Permission denied. Run with sudo or as root user."
Z obrázku výše můžete také vidět, že některé běžné možnosti jako --width, --height se používají k ovládání geometrie dialogového okna. Příznak --title se používá k tisku dialogového panelu s názvem.
2.2. Dialogové okno upozornění
Chcete-li zobrazit seznam podporovaných možností pro dialogové okno varování, spusťte následující příkaz:
$ zenity --help-warning
Použijte --warning
příznak ve skriptu pro zobrazení varovného pole a --text
příznak pro zobrazení varovné zprávy.
zenity --warning \ --title "Warning Message" \ --width 500 \ --height 100 \ --text "Disk space exceeded the threshold limit. Check ASAP."
2.3. Dialogové okno Informace
Chcete-li získat přístup k seznamu podporovaných možností pro informační dialogové okno, spusťte následující příkaz:
$ zenity --help-info
Použijte --info
příznak ve skriptu pro zobrazení informačního pole a --text
příznak pro zobrazení informační zprávy.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
2.4. Dialogové okno otázky
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno otázky, spusťte následující příkaz:
$ zenity --help-question
V dialogovém okně otázky se zobrazí zpráva spolu s Ano nebo Ne volba. Pokud stisknete Ano , návratový kód bude "nula" a pro „Ne“ návratový kód bude "jeden" . K zápisu další logiky do skriptů musíte použít výstupní kódy.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
3. Dialogové okno pro zadávání textu
Chcete-li zobrazit seznam podporovaných možností pro dialogové okno pro zadávání textu, spusťte následující příkaz:
$ zenity --help-entry
Dialogové okno pro zadávání textu vyzve uživatele k zadání. Příznak --entry
použít k vytvoření vstupního dialogového okna. Chcete-li v dialogovém okně zobrazit nějaký text, použijte --text
vlajka. Hodnota zadaná do textového pole bude vytištěna v terminálu, jakmile stisknete ok. Pokud chcete dále zpracovávat vstup z textového pole, musíte výstup uložit do proměnné, jak jsem to udělal níže.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name"); echo $USR
Pokud si nepřejete, aby byl vstupní text při psaní viditelný, použijte --hide-text
vlajka.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --hide-text); echo $USR
Můžete také nastavit výchozí hodnotu uvnitř vstupního pole pomocí --entry-text
vlajka. Musíte odstranit hodnotu a zadat svůj vstup, jinak bude stávající hodnota považována za výchozí.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --entry-text $USER); echo $USR
4. Dialogové okno hesla
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno hesla, spusťte následující příkaz:
$ zenity --help-password
Dialogové okno hesla bude přijímat uživatelské jméno a heslo pomocí --username
a --password
vlajka. Výstup se zobrazí jako (Uživatelské jméno | Heslo). Výstup příkazu musíte přiřadit proměnné a extrahovat uživatelské jméno a heslo pro další zpracování.
$ zenity --password --username
5. Dialogové okno Textové informace
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno textových informací, spusťte následující příkaz:
$ zenity --help-text-info
Dialogové okno textových informací vytiskne libovolný text ze souboru nebo v dialogovém okně otevře adresu URL. Například pro čtení souboru a zobrazení textu použijte parametr --filename
. V níže uvedeném příkladu čtu /etc/hosts
soubor.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"
--checkbox
příznak lze použít k získání vstupu od uživatele. Dobrým příkladem by bylo „Přijímám licenční smlouvu“. Pokud toto políčko nezaškrtnete, tlačítko OK bude deaktivováno.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"
6. Dialogové okno Kalendář
Chcete-li zobrazit seznam podporovaných možností pro dialogové okno kalendáře, spusťte následující příkaz:
$ zenity --help-calendar
V dialogovém okně kalendáře se zobrazí kalendář a umožní vám vybrat datum. Výstup musíte uložit do proměnné, jinak se vybrané datum vytiskne v terminálu.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record."
Ve výchozím nastavení je vybráno dnešní datum, ale můžeme také vybrat vlastní datum pomocí --day
, --month
a --year
příznaky.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --year 2015 \ --month 7 \ --day 15
Výchozí výstupní formát bude DD\MM\YY
. Je také možné vytvořit vlastní výstup data pomocí --date-format
vlajka.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --date-format %m-%d-%y
7. Dialogové okno pro výběr barvy
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno pro výběr barvy, spusťte následující příkaz:
$ zenity --help-color-selection
Dialog pro výběr barvy zobrazí paletu a umožní vám vybrat barvu a výstupem bude hodnota RGB. Použijte --color-selection
příznak spolu s --show-palette
vlajka.
$ COLOR_RGB=$(zenity --color-selection --show-palette) $ echo $COLOR_RGB
8. Dialogové okno pro výběr souboru
Chcete-li otevřít seznam podporovaných možností pro dialogové okno pro výběr souboru, spusťte následující příkaz:
$ zenity --help-file-selection
Dialog pro výběr souboru vám umožní vybrat soubory nebo adresáře a jako výstup se zobrazí cesta. Příznak --file-selection
by měl být použit. Existuje několik příznaků, které lze použít v dialogu pro výběr souboru.
--filename
=> Cesta k výchozímu souboru/adresáři--directory
=> Pouze adresáře k výběru--multiple
=> Umožňuje vybrat více názvů souborů--save
=> Nastavit úsporný režim
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple
V případě vícenásobného výběru bude cesta k souboru oddělena pomocí "|"
symbol.
Je možné nastavit vlastní oddělovač pomocí --separator
vlajka. V níže uvedeném příkladu používám dvojtečku (:
) jako oddělovač.
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple \ --separator :
9. Dialogové okno Formuláře
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno formulářů, spusťte následující příkaz:
$ zenity --help-forms
Dialogové okno formulářů umožňuje vytvářet formuláře. Dobrým příkladem je formulář pro registraci nového uživatele. Použijte --forms
příznak pro vytvoření dialogového okna formuláře. Existuje několik dalších příznaků, které lze použít spolu s --forms
vlajka.
--add-entry
=> Přidejte nový záznam do dialogového okna formuláře, aby uživatel mohl zadat vstup.--text
=> Text, který se zobrazí v dialogovém okně.--add-password
=> Přijímá heslo, ale nezobrazí hodnotu na obrazovce.--calendar
=> Otevřete kalendář a vyberte z něj datum.
Níže je jednoduchý příklad formuláře pro přihlášení uživatele pomocí dialogového okna formulářů.
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"
Výchozí oddělovač pro vstupní hodnoty je "|"
symbol. Můžete si také přizpůsobit oddělovač pomocí --separator
vlajka.
10. Dialogové okno průběhu
Chcete-li získat přístup k seznamu podporovaných možností pro dialogové okno ukazatele průběhu, spusťte následující příkaz:
$ zenity --help-progress
Použijte --progress
příznak pro vytvoření ukazatele průběhu. Abyste mohli vytvořit ukazatel průběhu, musíte pochopit, jak funguje. Z vaší strany by měly být poskytnuty dva vstupy.
- Řádek, který obsahuje pouze číslo s
echo
příkaz bude považován za procento průběhu. - Řádek, který začíná znakem
#
symbol vecho
příkaz bude vytištěn jako zpráva o průběhu.
( 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
Jakmile je ukazatel průběhu dokončen, můžete pomocí příznaku --auto-close vytvořit dialogové okno, které se automaticky zavře.
11. Dialogové okno seznamu
Chcete-li otevřít seznam podporovaných možností pro dialogové okno seznamu, spusťte následující příkaz:
$ zenity --help-list
Dialogové okno seznamu umožňuje vytvořit seznam řádků a sloupců. Použijte --list
příznak pro vytvoření dialogového okna seznamu a --column
příznak pro přidání sloupců.
$ zenity --list \ --column "Player" \ --column "Club" \ --column "Country" \ Messi PSG Argentina \ Neymar PSG Brazil \ Ronaldo Manu Portugal
Podívejte se na výše uvedený příklad. Pomocí --column
vlajky, vytvořil jsem tři sloupce. Po vytvoření sloupců můžete do dalších řádků zadat hodnotu, která se zobrazí pro každý řádek, jako jsem to udělal na obrázku výše.
V prvním sloupci lze vytvořit zaškrtávací políčko nebo přepínače. Chcete-li vytvořit přepínač, použijte --radiolist
flag a pro vytvoření checkboxu použijte --checklist
vlajka. Při vytváření seznamu rádií je povinné přidat PRAVDA nebo NEPRAVDA klíčová slova jako první hodnotu pro váš řádek. True vybere radiolist nebo zaškrtávací políčko, zatímco false ponechá políčko nezaškrtnuté.
zenity --list \ --checklist \ --column "checkbox" \ --column "Player" \ --column "Club" \ --column "Country" \ FALSE Messi PSG Argentina \ FALSE Neymar PSG Brazil \ FALSE Ronaldo Manu Portugal
Když vyberete řádek a kliknete na ok, hodnota se vytiskne na terminál s (|
) jako oddělovač. Ve výchozím nastavení se na terminál tiskne pouze první sloupec. Chcete-li vytisknout celý řádek, předejte --print-column ALL
.
Závěr
Dostali jsme se na konec článku. Stručně jsem vysvětlil, co je to zeity, a různé dostupné widgety, které lze použít. Nemusíte neustále vyžadovat nástroje GUI. Pokud však potřebujete grafické GTK+ widgety v bash skriptování, Zenity se vám bude hodit mezi ostatními nástroji GUI.