GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer des boîtes de dialogue GUI dans des scripts Bash avec Zenity sous Linux et Unix

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

  1. La ligne qui contient uniquement le numéro avec le echo commande sera considérée comme le pourcentage de la progression.
  2. La ligne qui commence par # symbole dans le echo 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.


Linux
  1. Comment créer une sauvegarde avec la commande tar sous Linux

  2. Ajout d'une interface graphique simple aux scripts shell Linux avec kdialog

  3. Comment créer des scripts Bash à l'aide de variables externes et de scripts intégrés

  4. Comment installer Linux KVM et créer une machine virtuelle invitée avec des exemples

  5. Comment créer et lancer des conteneurs Linux LXC avec les commandes LXC

Comment créer un groupe de volumes sous Linux avec LVM

Comment créer des documents avec des scripts Bash

Comment utiliser la commande echo dans les scripts Bash sous Linux

Comment créer et utiliser un fichier d'échange sous Linux

Comment créer une base de données et ajouter une collection avec MongoDB GUI Compass

Comment exécuter des applications d'interface graphique Linux sur Windows 10 avec WSL et WSLg