Cours Programmation ShellScript GUI en PDF (Intermédiaire)
Programmation ShellScript GUI : Ce qu'il faut savoir. Programmation d'interfaces graphiques pour scripts shell en exploitant des programmes de dialogue (dialog, Xdialog, zenity, gdialog, kdialog) afin d'ajouter des boîtes de dialogue et des assistants aux scripts Bash. L'intégration d'une IHM console ou X améliore l'ergonomie des outils d'administration et des utilitaires utilisateur, utile pour automatiser des tâches tout en conservant une interaction contrôlée.
Pourquoi automatiser vos scripts avec une interface GUI ?
Une interface graphique simplifie les interactions ponctuelles sans nuire à l'automatisation : formulaires et assistants réduisent les erreurs de saisie, clarifient les étapes et améliorent l'adoption par des utilisateurs non experts. Pour l'accessibilité, prioriser la navigation clavier, l'étiquetage explicite des champs et la compatibilité avec les lecteurs d'écran (Orca) afin de maintenir l'autonomie des utilisateurs. Ces principes facilitent la maintenance et la réutilisation dans des environnements hétérogènes.
Installation et configuration de l'environnement
Installer les outils requis selon la distribution et vérifier la présence des binaires pour garantir la portabilité. Les commandes suivantes illustrent les paquets courants sur Debian/Ubuntu et l'ajout du shebang pour les scripts d'installation et d'exemple.
#!/bin/bash
sudo apt update
sudo apt install dialog xdialog zenity kdialog
Sur d'autres distributions, utiliser le gestionnaire de paquets adapté (dnf, pacman, zypper). Vérifier la disponibilité des exécutables avec which ou command -v avant appel. Les scripts restent compatibles avec WSL2, sous réserve d'un serveur d'affichage X ou d'un équivalent (Xming, VcXsrv ou le support natif d'affichage sous WSLg).
🎯 Ce que vous allez apprendre
- Utiliser dialog et Xdialog — comprendre les boîtes proposées (
--inputbox,--msgbox,--checklist,--radiolist,--textbox,--logbox,--gauge,--fselect,--calendar,--timebox) et leurs paramètres de dimension. Choisir la boîte adaptée à un flux utilisateur et produire des scripts robustes qui affichent et récupèrent des données de manière cohérente. - Détecter l'environnement d'exécution — identifier si le script s'exécute en mode X ou en console via
$DISPLAYet$TERM, et basculer entreXdialogetdialogen testant la présence des binaires. Cette détection permet d'écrire un seul script portable, utilisable sur terminal et en session graphique. - Récupération des données et gestion des codes de retour — maîtriser la substitution de commande
$(commande), la redirection vers des fichiers temporaires et l'interprétation du code de sortie ($?) pour distinguer OK, Cancel et Close. Stocker et valider les saisies utilisateur et enchaîner les boîtes de dialogue en gestion d'erreur. - Flux et synchronisation de boîtes (chaînage) — enchaîner des dialogues avec
&&et||, utiliser l'option--stdoutet configurer des wizards (--wizard) pour des parcours multi-étapes. Composer des assistants et des séquences interactives sans bloquer le traitement principal. - Bonnes pratiques shell pour IHM — création sécurisée de fichiers temporaires avec
mktemp, nettoyage automatique viatrap, et protection contre les espaces via guillemets. Ces techniques réduisent les fuites et garantissent des scripts sûrs et maintenables. - Exemples pratiques et cas d'usage — études de cas fournies : checklist/textbox, logbox, et un « kill graphique » qui sélectionne et envoie un signal aux processus utilisateur. Extraits de code inclus pour réutilisation et adaptation.
Outils alternatifs : Zenity et Kdialog
Pour les environnements de bureau, Zenity (basé sur GTK+) et KDialog (pour KDE) offrent des boîtes de dialogue graphiques conformes aux styles des environnements. gdialog, historique antérieur à Zenity, a inspiré des comportements de compatibilité dans certains scripts ; Zenity est généralement préféré pour une intégration native sur GNOME, KDialog pour KDE. Avant d'adopter un outil, vérifier la distribution cible et la dépendance graphique : pour des scripts portables, prévoir une détection et un fallback vers dialog en mode console.
Comparatif : Dialog vs Zenity pour vos scripts
Dialog (ncurses) convient aux environnements console et aux sessions SSH ; il est léger et utilisable sans X. Zenity fournit des boîtes graphiques GTK+ plus adaptées aux utilisateurs de bureau et aux interactions avec la souris. Le choix dépend du contexte d'exécution : privilégier dialog pour les outils système sans X et Zenity/KDialog pour une intégration native dans GNOME/KDE.
Pourquoi choisir ce cours de scripts Bash GUI ?
Approche par l'exemple et motifs réutilisables pour administrateurs système et développeurs d'outils : extraits de scripts, cas concrets et une annexe montrant un traitement réel (wget/awk). L'auteur, Thierry Vaira, présente des scripts complets et des motifs reproductibles destinés à faciliter l'automatisation linux et le scripting shell avancé. Les recommandations incluent la vérification de la compatibilité avec lecteurs d'écran et des conseils pratiques pour le déploiement en production.
Exemples de scripts Bash avec interface graphique
- Kill graphique
- Interface permettant de sélectionner un processus et d'envoyer un signal. L'interface affiche généralement le nom du processus et son PID (Process ID) : le PID identifie de façon unique l'instance du programme en cours. La sélection peut être faite par nom + PID affichés (ex.
ps -eo pid,comm), puis l'actionkills'applique au PID choisi. Attention aux processus fils (PPID) et aux droits d'exécution : tester les permissions avant d'envoyer un signal. - Gestion de logs
- Affichage et filtrage interactif via
--textboxet--logbox, avec possibilité de rechercher et d'extraire des segments pertinents pour l'analyse. - Saisie utilisateur
- Formulaires simples avec validation, stockage sécurisé en fichier temporaire et nettoyage via
trap, adaptés aux petits assistants de configuration.
📑 Sommaire du document
Le sommaire récapitule les sections principales de premier niveau présentes dans le document afin de faciliter la navigation rapide entre les thèmes clés : architecture IHM, installation, détection d'environnement, récupération de saisies, exemples et cas pratiques, bonnes pratiques et FAQ.
- Cours Programmation ShellScript GUI en PDF (Intermédiaire)
👤 À qui s'adresse ce cours ?
- Public cible : administrateurs système, développeurs d'outils d'administration et utilisateurs avancés Linux souhaitant fournir une IHM simple à des scripts Bash pour faciliter l'interaction humaine.
- Prérequis : maîtrise des bases du shell Bash (variables, substitution, tests,
case), familiarité avec la ligne de commande Unix, connaissance élémentaire des processus et des signaux (kill), et capacité à lire/adapter des scripts existants.
❓ Foire Aux Questions (FAQ)
Comment détecter si un script doit utiliser Xdialog ou dialog ?
Tester la variable d'environnement $DISPLAY et la variable $TERM permet de décider d'exécuter Xdialog (session X) ou dialog (console). Il est recommandé de vérifier aussi la présence du binaire via command -v Xdialog ou command -v dialog avant l'appel, et de prévoir un fallback en cas d'absence.
Comment récupérer proprement la saisie d'une inputbox et gérer l'annulation ?
Utiliser --stdout ou rediriger la sortie vers un fichier temporaire créé par mktemp, puis tester le code de sortie ($?) avec case pour distinguer 0 (OK), 1 (Cancel) et 255 (Closed). Utiliser trap pour garantir la suppression du fichier temporaire en sortie.