En ce qui concerne les scripts bash, tous les scripts sont principalement axés sur l'opération de ligne de commande. Que vous ayez besoin d'une entrée de l'utilisateur ou que vous affichiez des messages, tout se fait via le terminal. La plupart des personnes qui écrivent des scripts à l'aide de Bash n'ont aucune idée qu'il existe un ensemble d'outils graphiques disponibles. Dans cet article, nous allons voir un de ces outils appelé Zenity - un programme simple qui vous permet de créer des boîtes de dialogue graphiques (GTK+) dans des scripts de ligne de commande et shell.
Qu'est-ce que Zenity ?
Zenity est une réécriture de gdialog, le port GNOME de dialogue qui vous permet de créer un ensemble de widgets pour différentes opérations où les utilisateurs peuvent interagir graphiquement avec le script. Les widgets sont basés sur la boîte à outils GTK.
Zenity est un programme open source écrit en C langage de programmation. Il prend en charge Linux, BSD et Windows.
Sans plus tarder, voyons comment afficher les boîtes de dialogue graphiques GTK+ à partir de la ligne de commande et des scripts shell à l'aide de Zenity.
Comment installer Zenity sous Linux
Tout d'abord, vérifiez si zenity est installé et disponible en exécutant les commandes suivantes :
$ which zenity /usr/bin/zenity
$ zenity --version 3.32.0
$ zenity --about
Si zenity n'est pas installé dans votre distribution, exécutez les commandes suivantes en fonction de votre distribution pour l'installer.
Linux alpin :
$ sudo apk add zenity
Arch Linux :
$ sudo pacman -S zenity
Fedora, RHEL, CentOS, Alma Linux et Rocky Linux :
$ sudo dnf install zenity
Debian, Ubuntu, Linux Mint, Pop OS :
$ sudo apt install zenity
openSUSE :
$ sudo zypper install zenity
1. Aide Zenity et options courantes
Pour chaque widget, il existe une option d'aide associée à travers laquelle vous pouvez obtenir un ensemble d'options prises en charge.
Exécutez la commande suivante pour accéder à la section d'aide.
$ zenity --help
Certaines options courantes peuvent être utilisées avec n'importe quel widget. Ce ne sont pas des options obligatoires, mais si elles sont utilisées, elles vous permettront de modifier le comportement du widget.
Pour obtenir la liste des options courantes, exécutez la commande suivante.
$ zenity --help-general
Nous verrons comment ces options fonctionnent dans les sections suivantes.
2. Boîte de dialogue Message
Une boîte de dialogue de message affiche une boîte de dialogue d'erreur, d'avertissement, d'informations et de question. Selon la situation, vous devez utiliser la boîte de dialogue appropriée dans le script.
2.1. Boîte de dialogue d'erreur
Pour accéder à la liste des options prises en charge pour la boîte de dialogue d'erreur, exécutez la commande suivante :
$ zenity --help-error
Pour afficher la boîte de dialogue d'erreur dans le script, utilisez la commande suivante. Ici, le --error
flag créera la boîte de dialogue d'erreur et --text
flag imprimera le message texte. Vous pouvez voir sur l'image qu'il y a une icône d'erreur associée à la boîte de dialogue.
zenity --error \ --title "Error Message" \ --width 500 \ --height 100 \ --text "Permission denied. Run with sudo or as root user."
Vous pouvez également voir sur l'image ci-dessus que certaines des options courantes telles que --width, --height sont utilisées pour contrôler la géométrie de la boîte de dialogue. Le drapeau --title est utilisé pour imprimer la barre de dialogue avec le titre.
2.2. Boîte de dialogue d'avertissement
Pour accéder à la liste des options prises en charge pour la boîte de dialogue d'avertissement, exécutez la commande suivante :
$ zenity --help-warning
Utilisez --warning
drapeau dans le script pour afficher la boîte d'avertissement et --text
drapeau pour afficher le message d'avertissement.
zenity --warning \ --title "Warning Message" \ --width 500 \ --height 100 \ --text "Disk space exceeded the threshold limit. Check ASAP."
2.3. Boîte de dialogue d'informations
Pour accéder à la liste des options prises en charge pour la boîte de dialogue d'informations, exécutez la commande suivante :
$ zenity --help-info
Utilisez --info
drapeau dans le script pour afficher l'infobox et --text
drapeau pour afficher le message d'information.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
2.4. Boîte de dialogue Question
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de question, exécutez la commande suivante :
$ zenity --help-question
La boîte de dialogue de la question affichera un message accompagné d'un Oui ou Non option. Si vous appuyez sur "Oui" , le code de retour sera "zéro" et pour "Non" le code de retour sera "un" . Vous devez utiliser les codes de sortie pour écrire davantage de logique dans vos scripts.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
3. Boîte de dialogue de saisie de texte
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de saisie de texte, exécutez la commande suivante :
$ zenity --help-entry
La boîte de dialogue de saisie de texte invite l'utilisateur à saisir. Le drapeau --entry
à utiliser pour créer une boîte de dialogue de saisie. Pour afficher du texte dans la boîte de dialogue, utilisez le --text
drapeau. La valeur saisie dans la zone de texte sera imprimée dans le terminal une fois que vous aurez appuyé sur OK. Vous devez stocker la sortie dans une variable si vous souhaitez traiter davantage l'entrée de la zone de texte comme je l'ai fait ci-dessous.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name"); echo $USR
Si vous ne souhaitez pas rendre le texte saisi visible lors de la saisie, utilisez le --hide-text
drapeau.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --hide-text); echo $USR
Vous pouvez également définir une valeur par défaut dans la zone de saisie en utilisant le --entry-text
drapeau. Vous devez supprimer la valeur et fournir votre entrée ou la valeur existante sera prise par défaut.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --entry-text $USER); echo $USR
4. Boîte de dialogue Mot de passe
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de mot de passe, exécutez la commande suivante :
$ zenity --help-password
La boîte de dialogue de mot de passe acceptera le nom d'utilisateur et le mot de passe en utilisant le --username
et --password
drapeau. La sortie sera affichée sous la forme (Nom d'utilisateur | Mot de passe). Vous devez affecter la sortie de la commande à une variable et extraire le nom d'utilisateur et le mot de passe pour un traitement ultérieur.
$ zenity --password --username
5. Boîte de dialogue d'informations textuelles
Pour accéder à la liste des options prises en charge pour la boîte de dialogue d'informations textuelles, exécutez la commande suivante :
$ zenity --help-text-info
La boîte de dialogue d'informations textuelles imprime tout texte d'un fichier ou ouvre une URL dans la boîte de dialogue. Par exemple, pour lire un fichier et afficher le texte, utilisez le drapeau --filename
. Dans l'exemple ci-dessous, je lis le /etc/hosts
fichier.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"
Le --checkbox
flag peut être utilisé pour obtenir une entrée de l'utilisateur. Un bon exemple serait "Accepter le contrat de licence". À moins que vous ne cochiez la case, le bouton ok sera désactivé.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"
6. Boîte de dialogue Calendrier
Pour accéder à la liste des options prises en charge pour la boîte de dialogue du calendrier, exécutez la commande suivante :
$ zenity --help-calendar
La boîte de dialogue du calendrier affichera un calendrier et vous permettra de choisir une date. Vous devez stocker la sortie dans une variable, sinon la date sélectionnée sera imprimée dans le terminal.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record."
Par défaut, la date d'aujourd'hui est sélectionnée mais nous pouvons également sélectionner une date personnalisée en utilisant --day
, --month
, et --year
drapeaux.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --year 2015 \ --month 7 \ --day 15
Le format de sortie par défaut sera DD\MM\YY
. Il est également possible de créer une sortie de date personnalisée en utilisant le --date-format
drapeau.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --date-format %m-%d-%y
7. Boîte de dialogue de sélection de couleur
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de sélection des couleurs, exécutez la commande suivante :
$ zenity --help-color-selection
La boîte de dialogue de sélection des couleurs affichera une palette et vous permettra de choisir une couleur et la sortie sera la valeur RVB. Utilisez --color-selection
drapeau avec --show-palette
drapeau.
$ COLOR_RGB=$(zenity --color-selection --show-palette) $ echo $COLOR_RGB
8. Boîte de dialogue de sélection de fichier
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de sélection de fichiers, exécutez la commande suivante :
$ zenity --help-file-selection
La boîte de dialogue de sélection de fichiers vous permettra de sélectionner des fichiers ou des répertoires et le chemin est affiché en sortie. Le drapeau --file-selection
Devrait être utilisé. Il y a quelques drapeaux qui peuvent être utilisés dans la boîte de dialogue de sélection de fichier.
--filename
=> Chemin vers le fichier/répertoire par défaut--directory
=> Uniquement les répertoires à sélectionner--multiple
=> Permet de choisir plusieurs noms de fichiers--save
=> Passer en mode sauvegarde
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple
En cas de sélections multiples, le chemin du fichier sera séparé à l'aide du "|"
symbole.
Il est possible de définir un séparateur personnalisé en utilisant le --separator
drapeau. Dans l'exemple ci-dessous, j'utilise colon (:
) comme séparateur.
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple \ --separator :
9. Boîte de dialogue Formulaires
Pour accéder à la liste des options prises en charge pour la boîte de dialogue des formulaires, exécutez la commande suivante :
$ zenity --help-forms
La boîte de dialogue des formulaires vous permet de créer des formulaires. Un bon exemple est le formulaire d'inscription d'un nouvel utilisateur. Utilisez --forms
indicateur pour créer une boîte de dialogue de formulaire. Il y a quelques drapeaux supplémentaires qui peuvent être utilisés avec le --forms
drapeau.
--add-entry
=> Ajouter une nouvelle entrée dans la boîte de dialogue du formulaire pour que l'utilisateur entre l'entrée.--text
=> Texte à afficher dans la boîte de dialogue.--add-password
=> Accepte le mot de passe mais n'affichera pas la valeur à l'écran.--calendar
=> Ouvrez le calendrier et choisissez-y une date.
Vous trouverez ci-dessous un exemple simple de formulaire d'inscription d'utilisateur utilisant la boîte de dialogue des formulaires.
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"
Le séparateur par défaut pour les valeurs d'entrée est le "|"
symbole. Vous pouvez également personnaliser le séparateur en utilisant --separator
drapeau.
10. Boîte de dialogue de progression
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de la barre de progression, exécutez la commande suivante :
$ zenity --help-progress
Utilisez --progress
drapeau pour créer une barre de progression. Pour créer une barre de progression, vous devez comprendre son fonctionnement. Deux entrées doivent être fournies de votre côté.
- La ligne qui contient uniquement le numéro avec le
echo
commande sera considérée comme le pourcentage de la progression. - La ligne qui commence par
#
symbole dans leecho
la commande sera imprimée en tant que message de progression.
( 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
Une fois la barre de progression remplie, vous pouvez créer une boîte de dialogue à fermer automatiquement à l'aide de l'indicateur --auto-close.
11. Boîte de dialogue Liste
Pour accéder à la liste des options prises en charge pour la boîte de dialogue de liste, exécutez la commande suivante :
$ zenity --help-list
La boîte de dialogue de liste vous permet de créer une liste de lignes et de colonnes. Utilisez --list
indicateur pour créer une boîte de dialogue de liste et --column
drapeau pour ajouter des colonnes.
$ zenity --list \ --column "Player" \ --column "Club" \ --column "Country" \ Messi PSG Argentina \ Neymar PSG Brazil \ Ronaldo Manu Portugal
Jetez un oeil à l'exemple ci-dessus. Utilisation de la --column
flag, j'ai créé trois colonnes. Une fois les colonnes créées, vous pouvez entrer la valeur dans les lignes suivantes qui seront affichées pour chaque ligne comme je l'ai fait dans l'image ci-dessus.
Dans la première colonne, des cases à cocher ou des boutons radio peuvent être créés. Pour créer un bouton radio, utilisez --radiolist
flag et pour créer une case à cocher, utilisez --checklist
drapeau. Lors de la création d'une liste radio, il est obligatoire d'ajouter TRUE ou FAUX mots-clés comme première valeur de votre ligne. True sélectionnera la radioliste ou la case à cocher tandis que false laissera la case non sélectionnée.
zenity --list \ --checklist \ --column "checkbox" \ --column "Player" \ --column "Club" \ --column "Country" \ FALSE Messi PSG Argentina \ FALSE Neymar PSG Brazil \ FALSE Ronaldo Manu Portugal
Lorsque vous sélectionnez la ligne et cliquez sur OK, la valeur sera imprimée sur le terminal avec (|
) comme séparateur. Par défaut, seule la première colonne est imprimée sur le terminal. Pour imprimer toute la ligne, passez --print-column ALL
.
Conclusion
Nous sommes arrivés à la fin de l'article. J'ai brièvement expliqué ce qu'est zenity et les différents widgets disponibles pour être utilisés. Vous n'aurez peut-être pas besoin d'utilitaires GUI tout le temps. Cependant, lorsque vous avez besoin de widgets graphiques GTK + dans les scripts bash, Zenity sera utile parmi d'autres outils graphiques.