Comment utiliser des widgets graphiques dans des scripts bash avec Zenity

Comment utiliser des widgets graphiques dans des scripts bash avec Zenity

Zenity est un utilitaire très utile qui nous a permis de créer des interfaces utilisateur graphiques pour nos scripts shell. Plusieurs widgets existent et peuvent être utilisés en invoquant le programme avec les options respectives. Les widgets sont basés sur le Gtk Toolkit et renvoyez le résultat de l'interaction utilisateur soit sur la sortie standard, soit comme code de retour.

Dans ce tutoriel, vous apprendrez:

  • Quelles sont les options de zénité générale
  • Quels sont certains des widgets les plus utiles disponibles et comment les utiliser



Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution
Logiciel L'utilitaire Zenity
Autre Familiarité avec la coquille (bash dans ce cas) et des concepts comme les codes de sous-coque et de sortie
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Installation

Le zénité Le package est inclus dans les référentiels de toutes les principales distributions Linux, et il peut être déjà installé si vous utilisez le GNOME environnement de bureau. Pour l'installer, nous pouvons utiliser notre gestionnaire de packages de distribution préféré, dans Feutre, Par exemple, nous pouvons utiliser DNF:

$ sudo dnf installer zenity


Lorsque vous utilisez des distributions basées sur Debian et Debian comme Ubuntu, nous pouvons utiliser la commande APT-GET:

$ sudo apt-get install zenity

Zenity est déjà incluse dans l'Archlinux supplémentaire référentiel, donc nous pouvons l'installer via Pac-Man:

$ sudo pacman -s zenity

Options génériques

Avant de commencer à voir certains des widgets les plus utiles fournis par zénité, Nous devons mentionner certaines des options génériques disponibles que nous pouvons utiliser pour modifier le comportement du programme.

Nous les appelons génériques car ils peuvent être appliqués indépendamment du widget choisi: --titre, --veuve-icon, --largeur, --hauteur et --temps libre.

Tout d'abord, nous avons le --titre Option: nous pouvons l'utiliser pour spécifier un titre pour la fenêtre de dialogue. De même, le --fenêtre Option Laissez-nous spécifier une icône qui sera utilisée comme icône de la fenêtre, et sera visible, par exemple, dans la barre des tâches. Pour afficher une icône dans le widget, nous pouvons plutôt utiliser le --nom icône Option et fournir l'un des noms d'icônes autorisées (voici la liste complète) comme argument. Pour utiliser les icônes de stock fournies dans l'erreur, les informations, les questions ou les dialogues d'avertissement, par exemple, nous pouvons spécifier respectivement: error de dialogue, dialogue-info, quête de dialogue ou avertissement de dialogue.

Le --largeur et --hauteur Les options sont assez explicites: ils nous ont permis de définir la géométrie de notre fenêtre de dialogue.

Enfin, en utilisant le --temps libre Option Nous pouvons définir un délai d'expiration en quelques secondes pour le dialogue: après la durée spécifiée, il sera automatiquement fermé.



Les widgets disponibles

Il y a plusieurs widgets que nous pouvons utiliser grâce à Zenity: chacun d'eux a un objectif spécifique. Voyons certains d'entre eux.

Le widget de calendrier

Le widget du calendrier affichera un calendrier et permettra à l'utilisateur de choisir une date, en sélectionnant le mois, le jour et l'année. Les valeurs sélectionnées seront renvoyées sur le sortie standard. Pour lancer le calendrier des widgets, tout ce que nous avons à faire est d'invoquer Zenity, avec le --calendrier option:

$ Zenity - Calendar

Nous pouvons utiliser une série d'options pour affiner le comportement du widget, par exemple, en utilisant --jour, --mois, --année et fournir un Int Comme la valeur, nous pouvons définir, respectivement, le jour, le mois et l'année par défaut qui seront affichés dans le widget. Pour spécifier un format spécifique dans lequel la date sélectionnée doit être retournée, nous pouvons utiliser le --date option et spécifiez le modèle dans le strime style.



Le widget de calendrier

Le widget d'entrée

Le widget d'entrée est vraiment utile lorsque nous devons demander à l'utilisateur un texte. Dites par exemple, nous devons demander à l'utilisateur de saisir son nom; Nous pouvons exécuter la commande suivante:

$ zenity --entry - title "demande de nom" --xt "Veuillez entrer votre nom:"


Ici, nous avons utilisé le --titre et --texte Options pour personnaliser, respectivement, le titre et l'étiquette qui pour le widget. Une fois que nous exécutons la commande ci-dessus, le widget apparaît:



Le widget d'entrée

Le texte entré par l'utilisateur sera retourné sur la sortie standard.

Widget de sélection de fichiers

Le widget de sélection de fichiers nous affichons une belle interface graphique pour permettre à l'utilisateur de sélectionner un ou plusieurs fichiers. Tout comme nous l'avons fait dans les exemples précédents, nous pouvons utiliser une série d'options pour modifier le comportement et l'apparence du dialogue. L'un des plus importants est --nom de fichier qui peut être utilisé pour définir le fichier / répertoire qui sera sélectionné par défaut. Voici un aperçu rapide des options et des fonctionnalités qu'ils fournissent:

Options de widget de sélection de fichiers Zenity
Option Fonction
-nom de fichier Définissez le répertoire / fichier par défaut qui sera sélectionné dans le widget
-plusieurs Activer la possibilité de sélectionner plusieurs fichiers à la fois
-fichier de fichiers Spécifiez un filtre pour les noms de fichiers
-annuaire Restreindre la sélection aux répertoires
-sauvegarder Exécutez le widget en mode «Enregistrer».
-Confirmer-Overwrite Demandez à l'utilisateur une confirmation lors de l'écrasement d'un fichier existant
-séparateur Spécifiez un séparateur qui sera utilisé pour séparer les chemins lorsque plusieurs fichiers
sont sélectionnés

Voyons un exemple de l'utilisation du widget. Disons que nous voulons laisser l'utilisateur sélectionner plusieurs fichiers et nous voulons le contenu de l'utilisateur $ Home répertoire à afficher dans le widget lorsqu'il est ouvert. Tout ce que nous avons à faire est d'exécuter la commande suivante:

$ Zenity - File-Selection - Multiple --FileName "$ home /"

Vous pouvez remarquer que nous avons fourni un suivi / / au chemin: de cette façon, le contenu du répertoire s'affiche, au lieu du répertoire lui-même. Voici notre widget:



Le widget de sélection de fichiers

Une fois que nous avons cliqué sur le bouton «OK», le chemin d'accès absolu du (s) fichier (s) sélectionné sera renvoyé sur la sortie standard, séparée par un caractère, qui soit par défaut est |:

/ Home / Egdoc / Téléchargements / A.txt | / home / egdoc / téléchargements / b.SMS

Nous pouvons facilement modifier le séparateur, fournissant le caractère que nous voulons utiliser comme argument de l'option-Separator.

Si nous ouvrons le dialogue dans mode sauvegarde, L'utilisateur sera invité à fournir le nom du fichier qu'il souhaite enregistrer. Si le fichier existe et nous avons fourni le --Confirmer-Overwrite Option, il sera invité à confirmer qu'il veut l'écraser:

$ Zenity - File-Selection - Save - Confirm-Overwrite --FileName "$ home /"

Le chemin choisi sera renvoyé à la sortie standard, et nous serons libres de l'utiliser dans notre script.

Le widget de progression

Un autre widget intéressant est le progrès: nous pouvons le lancer en utilisant en invoquant Zenity avec le --progrès option. Nous pouvons l'utiliser, par exemple, pour montrer la progression des opérations de longue date. Voici quelques-unes des options les plus utiles que nous pouvons utiliser avec le widget:

Option Fonction
-pourcentage Définit la valeur de pourcentage initiale de la barre de progression
-fermeture automatique Fermez automatiquement le dialogue lorsque les progrès sont terminés
-kill automatique Tuez le processus parent si le dialogue est fermé avec l'annulation
bouton
-pas de liconel N'affichez pas le bouton Annuler

Voici un exemple de la façon dont nous pouvons utiliser le widget dans un script bash:



#!/ bin / bash # # script mande! (Echo 25 Echo "# Configuration…" Sleep 2 Echo 30 Echo "# Reading Files…" Sleep 2 Echo 70 Echo "# Création de contenu…" Sleep 1 echo 100 echo "# Done!") | Zenity - title" Progress Bar Exemple "--progress - Auto-kill
Copie

Le script ci-dessus n'effectue aucune opération, mais il est utile de comprendre comment fonctionne le widget. Il y a deux principales choses qui doivent être remarquées dans le code: tout d'abord, les commandes à exécuter sont enveloppées entre parenthèses, donc sont exécutées dans un sous-coque: Ceci est nécessaire pour que le widget fonctionne correctement; Deuxièmement, lorsque nous faisons écho à une ligne commençant par un nombre, cela sera interprété comme le pourcentage de la barre de progrès.

De la même manière, lorsque nous faisons écho à une ligne qui commence par le # caractère, il sera utilisé comme texte à afficher dans le widget. Voici une courte vidéo du script en action:

Widgets d'infos, d'avertissement et d'erreur

Pour afficher des informations, d'avertissement ou d'erreur, nous pouvons utiliser Zenity avec le --Info, --avertissement et --erreur Options, respectivement. Dans ce cas, nous utilisons le --texte Option pour spécifier le message. Voici un exemple de notification:

$ zenity - info - largeur = 400 - height = 200 --xt "Ceci est une notification!"



Le widget de notification

L'utilisation du widget d'avertissement est tout aussi facile:

$ zenity --warning - largeur = 400 - height = 200 --xt "Ceci est un avertissement!"



Le widget d'avertissement

Ceci est plutôt un exemple de message d'erreur:

$ zenity --error - largeur = 400 - height = 200 --xt "Ceci est une erreur!"



Le widget d'erreur

Le widget de question

Pour poser une question à l'utilisateur et obtenir sa réponse, nous pouvons utiliser le question widget, invoquant la zénité avec le --question option. Nous spécifions la question en utilisant le --texte Option, et définissez les étiquettes des boutons «OK» et «Annuler», en utilisant respectivement le --étiquette et --annulaire options. Voici un exemple:

$ zenity --quêtes --text "Êtes-vous sûr de vouloir arrêter?"- no-wrap --ok-label" Oui "- Cancel-label" non "



Le widget de question



Dans ce cas, nous avons également utilisé le --ne pas enrouler Option, pour éviter l'enveloppe de texte dans le widget. Le résultat du choix de l'utilisateur ne sera pas affiché sur la sortie standard; Au lieu de cela, la commande définira son code de sortie En conséquence, il reviendra donc 0 Si l'utilisateur clique sur le bouton 'OK', et 1 S'il clique sur le `` Annuler '' ou ferme la fenêtre (cela peut sembler contre-intuitif, mais rappelez-vous qu'un code de sortie de 0 signifie qu'une commande a été exécutée avec succès dans le shell).

Le widget de mot de passe

Il s'agit du widget que nous devons utiliser lorsque nous voulons que l'utilisateur entre un mot de passe ou toute information sensible: le texte dans lequel il entre est masqué par des balles:



Le widget de mot de passe

Alors que le texte entré à partir de l'utilisateur est masqué, la valeur renvoyée par le widget sera clairement visible sur la sortie standard.

Le widget de sélection de couleurs

C'est un autre beau widget. En l'utilisant, nous pouvons faire en sorte que l'utilisateur choisir une couleur dans une palette. Pour l'exécuter, nous utilisons Zenity avec le --sélection de couleurs option. Nous pouvons spécifier la couleur initialement sélectionnée en utilisant --couleur et fournir la couleur comme argument. Voici un exemple:



Le widget de sélection de couleurs

Facultativement, nous pouvons à la place afficher la palette de couleurs, avec le --palette show option:

$ Zenity - Color-Selection - Color Red --show-Palette



La palette de widget de sélection de couleurs

La couleur sélectionnée par l'utilisateur sera retournée dans RVB Notation sur la sortie standard. Par exemple, lors de la sélection de la couleur rouge, ce qui suit sera retourné:

RVB (255,0,0)

Le widget de liste

Le prochain widget que nous allons jeter un œil, est le widget de liste. Avec lui, il est possible de créer un dialogue multi-colonnes et de permettre à l'utilisateur de sélectionner une ou plusieurs options via des cases à cocher ou des boutons radio. Pour faire afficher Zenity ce type de dialogue, nous utilisons le --liste option et définissez les colonnes et leur contenu; Si nous leur omettons, la commande échouera:

$ zenity - list pas de titres de colonne spécifiés pour la boîte de dialogue de liste.
Copie

Pour définir un en-tête de colonne, nous utilisons le --colonne option et fournir une chaîne comme argument. Nous répétons la commande pour chaque colonne que nous voulons créer:

$ zenity - liste - Sélection des colonnes - Distribution des colonnes

Avec la commande ci-dessus, nous avons créé deux colonnes, avec les en-têtes «sélection» et «distribution». Nous allons maintenant fournir à l'utilisateur une série de lignes, chacune représentant une distribution Linux. Dans la première colonne de chaque ligne, nous placerons une case à cocher pour permettre à l'utilisateur de sélectionner l'entrée correspondante:



$ zenity - list - Colonne Sélection - Colonne Distribution False Debian True Fedora -Radiolist

Chaque chaîne que nous fournissons après la définition des colonnes est associée aux colonnes, selon leur ordre d'apparence. Comme vous pouvez le voir, nous avons créé deux lignes. Dans la première colonne de chaque ligne, nous avons fourni une valeur: nous avons utilisé FAUX afin que la case à cocher ou le bouton radio correspondant ne soit pas sélectionné lorsque le widget s'affiche, et VRAI Pour définir l'entrée comme indiqué par défaut. Voici le widget généré:



Le widget de liste

Lorsque nous cliquons sur le bouton «OK» et effectuons notre sélection, la valeur associée à la ligne sera signalée sur la sortie standard. Si nous souhaitons laisser l'utilisateur sélectionner plusieurs lignes, nous pouvons utiliser le --liste de contrôle Option: le | Le caractère sera utilisé pour séparer les valeurs sélectionnées.

Conclusions

Dans ce tutoriel, nous avons appris à savoir zénité, Un utilitaire qui nous a permis d'utiliser des dialogues graphiques dans nos scripts de coquille. Nous avons vu quelles sont les options génériques que nous pouvons utiliser avec tous les widgets, comme --largeur et --hauteur, Et nous avons appris à utiliser certains des widgets les plus utiles que nous pouvons générer avec le programme. En apprendre davantage sur zénité Vous pouvez consulter sa page manuelle!

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Choses à installer sur Ubuntu 20.04
  • Boucles imbriquées dans les scripts bash
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Tutoriel de débogage GDB pour les débutants
  • Fichiers de configuration Linux: 30 premiers
  • Système linux hung? Comment s'échapper vers la ligne de commande et…