Qu'est-ce que dialog ?
Dialog est un utilitaire en ligne de commande qui permet de créer des interfaces utilisateur graphiques (GUI) simples, mais efficaces, directement depuis vos scripts Bash. Il vous offre la possibilité d'interagir avec l'utilisateur à travers des boîtes de dialogue, des menus, des listes déroulantes, et bien plus encore, sans avoir à recourir à des langages de programmation plus complexes comme Python ou C++.
Installation et configuration
L'installation de dialog varie en fonction de votre distribution Linux. Généralement, vous pouvez l'installer à l'aide de votre gestionnaire de paquets :
- Debian/Ubuntu:
sudo apt install dialog
- Fedora/CentOS:
sudo dnf install dialog
Une fois installé, vous pouvez l'utiliser directement dans vos scripts Bash.
Boîtes de dialogue de base
-
Message: Affiche un simple message à l'utilisateur.
Bash
dialog --msgbox "Hello, World!" 10 30
-
Oui/Non: Pose une question à l'utilisateur et attend une réponse Oui ou Non.
Bash
dialog --yesno "Voulez-vous continuer ?" 10 30
-
Entrée de texte: Permet à l'utilisateur de saisir du texte.
Bash
dialog --inputbox "Entrez votre nom :" 10 30 2> input.txt
Menus et listes déroulantes
-
Menu: Propose un choix parmi plusieurs options.
Bash
dialog --menu "Choisissez une option" 10 30 2 \ 1 "Option 1" \ 2 "Option 2"
-
Liste déroulante: Permet de sélectionner une valeur dans une liste.
Bash
dialog --checklist "Sélectionnez les couleurs" 10 30 2 3 \ 1 "Rouge" on \ 2 "Vert" off \ 3 "Bleu" off
Barres de progression
-
Barre de progression: Affiche une barre de progression pour simuler une tâche en cours.
Bash
for i in {1..100}; do dialog --gauge "Progression" 10 30 $i 100 sleep 0.1 done
- Couleurs, titres, tailles: Vous pouvez personnaliser l'apparence des boîtes de dialogue en utilisant différentes options. Par exemple,
--title
pour définir un titre,--backtitle
pour un titre de fond, et--color
pour les couleurs. - Gestion des événements utilisateur: Dialog peut capturer les réponses de l'utilisateur et les utiliser pour contrôler le flux de votre script.
- Création d'un menu de démarrage: Vous pouvez créer un menu interactif pour lancer différentes applications ou scripts.
- Automatisation de tâches répétitives: Dialog peut être utilisé pour guider l'utilisateur à travers une série de questions afin de configurer automatiquement des paramètres ou exécuter des commandes.
En résumé
Dialog est un outil puissant pour créer des interfaces utilisateur simples et efficaces dans vos scripts Bash. Il vous permet d'interagir avec l'utilisateur de manière intuitive et de rendre vos scripts plus conviviaux.
Ce script utilise la commande dialog
pour créer une interface utilisateur interactive dans le terminal. Il inclut des menus pour :
- 👤La gestion des utilisateurs.
- 💻La gestion des ordinateurs.
- 🔐Une connexion SSH sécurisée.
local choix=$(dialog --stdout \
--title "Connexion SSH" \
--menu "Veuillez choisir une option :" 15 50 6 \
1 "Connexion en SSH à un poste client")
case $choix in
1)
# Demande des informations de connexion
Utilisateur=$(dialog --stdout --inputbox "Entrez le nom d'utilisateur client" 8 40)
IP=$(dialog --stdout --inputbox "Entrez l'adresse IP de l'ordinateur distant" 8 40)
Port=22
MotDePasse=$(dialog --stdout --insecure --passwordbox "Entrez le mot de passe pour ${Utilisateur}" 8 40)
# Exécution de la commande SSH
resultat=$(sshpass -p "${MotDePasse}" ssh ${Utilisateur}@${IP} -p ${Port} "echo 'Connexion SSH réussie à ${Utilisateur}@${IP}'")
# Affichage du résultat
dialog --msgbox "$resultat" 8 40
;;
*)
# Quitter le script en cas d'option invalide
clear
exit 0
;;
esac
}
Option Fonctionnalité :
- --inputbox: Permet à l'utilisateur de saisir du texte, généralement utilisé pour demander le nom d'utilisateur et l'adresse IP dans ce contexte.
- --passwordbox: Assure une saisie sécurisée du mot de passe, masquant les caractères saisis pour des raisons de confidentialité.
- sshpass: Un utilitaire externe qui automatise la saisie du mot de passe pour les commandes SSH, rendant la connexion plus fluide.
local choix=$(dialog --stdout \
--title "Menu Principal" \
--menu "Veuillez choisir une option :" 15 50 6 \
1 "Gestion des utilisateurs" \
2 "Gestion des ordinateurs")
case $choix in
1)
menu_util
;;
2)
menu_ordi
;;
*)
clear
exit 0
;;
esac
}
Options principales :
- --title : Titre de la fenêtre.
- --menu : Affiche des options avec un menu interactif.
- 15 50 6 : Définit la taille de la fenêtre (15 lignes, 50 colonnes) et le nombre maximal d'options visibles.
local choix=$(dialog --stdout \
--title "Menu Utilisateur" \
--menu "Veuillez choisir une option :" 15 50 6 \
1 "Informations utilisateur" \
2 "Actions sur les utilisateurs" \
3 "Retour au menu principal")
...
}
Ce menu offre des options pour :
Afficher des informations utilisateur. Gérer les comptes utilisateur (création, suppression, modification).
local choix=$(dialog --stdout \
--title "Menu Ordinateur" \
--menu "Veuillez choisir une option :" 15 50 6 \
1 "Obtenir des informations sur l'ordinateur" \
2 "Effectuer des actions sur l'ordinateur" \
3 "Retour au menu précédent")
...
}
Inclut des fonctionnalités pour :
Afficher les informations du système (disques, RAM, système d'exploitation). Gérer l'alimentation, les répertoires, et les logiciels.
executer_commande() {
local commande="$1"
sshpass -p "${MotDePasse}" ssh ${Utilisateur}@${IP} -p ${Port} "$commande" 2>&1
}
Cette fonction centralise l'exécution de commandes sur une machine distante via SSH.
local chemin=$(dialog --stdout --inputbox "Entrez le chemin du répertoire à créer :" 8 40)
if [ -n "$chemin" ]; then
if executer_commande "mkdir -p '$chemin'"; then
dialog --msgbox "Répertoire '$chemin' créé avec succès." 8 40
else
dialog --msgbox "Échec de la création du répertoire '$chemin'." 8 40
fi
else
dialog --msgbox "Chemin non fourni." 8 40
fi
}
local logiciel=$(dialog --stdout --inputbox "Entrez le nom du logiciel à installer :" 8 40)
if [ -n "$logiciel" ]; then
if executer_commande "sudo apt install -y '$logiciel'"; then
dialog --msgbox "Logiciel '$logiciel' installé avec succès." 8 40
else
dialog --msgbox "Échec de l'installation de '$logiciel'." 8 40
fi
else
dialog --msgbox "Nom du logiciel non fourni." 8 40
fi
}
Résumé des principales commandes dialog
- --title Définit le titre de la fenêtre.
- --menu Affiche un menu avec des options.
- --inputbox Demande une saisie utilisateur.
- --msgbox Affiche un message d'information.
- --passwordbox Permet une saisie sécurisée du mot de passe.
- --yesno Affiche une boîte de dialogue Oui/Non.
Pour exécuter le script, utilisez la commande suivante :
chmod +x script.sh
./script.sh
Présentation de PowerShell
PowerShell est un shell de ligne de commande et un langage de script développé par Microsoft. Il est conçu pour l'automatisation des tâches et la gestion de la configuration des systèmes d'exploitation Windows, mais il est également disponible sur Linux et macOS. PowerShell offre une approche orientée objet de la gestion des systèmes, ce qui le rend très puissant pour des tâches complexes.
Comparaison avec Bash et dialog
- Bash: Un shell de commande traditionnel pour les systèmes Unix-like. Il est excellent pour l'automatisation de tâches, mais ses capacités pour créer des interfaces graphiques sont limitées. Dialog est un outil complémentaire qui permet d'ajouter des éléments graphiques simples à des scripts Bash.
- PowerShell: Offre une intégration plus poussée avec le système d'exploitation Windows et dispose de fonctionnalités natives pour créer des interfaces graphiques plus sophistiquées. Il est également orienté objet, ce qui facilite la gestion de données complexes.
Modules et cmdlets à utiliser
Pour créer des interfaces graphiques en PowerShell, vous utiliserez généralement des modules comme :
- Windows Forms: Un framework .NET pour créer des applications Windows avec une interface utilisateur graphique.
- WPF (Windows Presentation Foundation): Un framework plus récent et plus puissant pour créer des interfaces utilisateur riches.
Ces modules fournissent des cmdlets (commandes) pour créer des fenêtres, des boutons, des champs de texte, etc.
Exemple concret : une fenêtre avec des boutons
[System.Windows.Forms.Application]::EnableVisualStyles()
$form = New-Object System.Windows.Forms.Form
$form.Text = "Ma première fenêtre PowerShell"
$form.Size = New-Object System.Drawing.Size(300, 200)
$button = New-Object System.Windows.Forms.Button
$button.Text = "Cliquez ici"
$button.Location = New-Object System.Drawing.Point(100, 50)
$form.Controls.Add($button)
$form.Add_Load({
$button.Add_Click({
[System.Windows.Forms.MessageBox]::Show("Vous avez cliqué sur le bouton !")
})
})
[void]$form.ShowDialog()
- Puissant et flexible: PowerShell offre de nombreuses possibilités pour créer des interfaces utilisateur personnalisées.
- Intégration avec .NET: Vous pouvez utiliser toutes les fonctionnalités de .NET pour créer des applications riches.
- Automatisation: PowerShell est excellent pour automatiser la création et la gestion d'interfaces utilisateur.
- Courbe d'apprentissage: Il faut maîtriser les concepts de programmation orientée objet et les modules spécifiques pour créer des interfaces complexes.
- Performance: Pour des applications graphiques très performantes, des outils comme C# ou C++ peuvent être plus adaptés.
PowerShell est un outil puissant pour créer des interfaces graphiques, en particulier pour les administrateurs système qui ont besoin d'automatiser des tâches et de créer des outils personnalisés. Bien que la courbe d'apprentissage puisse être plus raide que pour des outils plus simples, les possibilités sont presque infinies.
🖥️ Notre Projet : Interface Graphique Intuitive
Pour notre projet, nous avons opté pour Windows Form afin de créer une interface graphique conviviale. Cette approche offre plusieurs avantages :
🎯 Accessibilité Pour Tous
- Interface claire avec des boutons intuitifs
- Utilisation simple pour les débutants
- Fonctionnalités avancées pour les experts
🔐 Connexion à Distance
- Utilisation du protocole SSH
- Gestion des machines distantes
- Exécution d'actions à distance
- Récupération d'informations en temps réel
📊 Suivi et Sécurité
- Système de logs intégré
- Traçabilité des actions
- Surveillance des opérations
Cette solution permet de combiner simplicité d'utilisation et fonctionnalités avancées dans une interface unique et professionnelle. 🚀
Ce document explique comment créer une interface graphique simple en PowerShell, incluant des fenêtres, des boutons, et leur personnalisation.
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
- System.Windows.Forms : Fournit les classes pour créer des fenêtres et composants GUI.
- System.Drawing : Permet de personnaliser les couleurs, tailles et styles des composants.
$selectForm = New-Object System.Windows.Forms.Form
$selectForm.Text = "Connexion SSH"
$selectForm.Size = New-Object System.Drawing.Size(400, 200)
$selectForm.StartPosition = "CenterScreen"
- $selectForm : Crée une fenêtre avec un titre et une taille fixe.
- StartPosition : Positionne la fenêtre au centre de l'écran.
$lblComputer = New-Object System.Windows.Forms.Label
$lblComputer.Text = "Adresse serveur:"
$lblComputer.Location = New-Object System.Drawing.Point(10, 20)
$selectForm.Controls.Add($lblComputer)
$txtComputer = New-Object System.Windows.Forms.TextBox
$txtComputer.Location = New-Object System.Drawing.Point(120, 20)
$txtComputer.Size = New-Object System.Drawing.Size(250, 20)
$selectForm.Controls.Add($txtComputer)
- Label : Affiche un texte fixe comme "Adresse serveur".
- TextBox : Permet de saisir une valeur.
Le même principe est appliqué pour "Utilisateur" et "Mot de passe".
$btnConnect = New-Object System.Windows.Forms.Button
$btnConnect.Text = "Connecter"
$btnConnect.Location = New-Object System.Drawing.Point(150, 120)
$btnConnect.Add_Click({
$securePwd = $txtPassword.Text | ConvertTo-SecureString -AsPlainText -Force
if (Establish-SSHSession -ComputerName $txtComputer.Text -Username $txtUsername.Text -Password $securePwd) {
$selectForm.DialogResult = [System.Windows.Forms.DialogResult]::OK
$selectForm.Close()
}
})
$selectForm.Controls.Add($btnConnect)
- Bouton : Ajoute un bouton avec une action qui tente d’établir une session SSH.
- Add_Click : Définit une action au clic.
$mainForm = New-Object System.Windows.Forms.Form
$mainForm.Text = "Outil d'Administration"
$mainForm.Size = New-Object System.Drawing.Size(800, 600)
$mainForm.StartPosition = "CenterScreen"
- Création d'une fenêtre principale pour l’application avec un titre et une taille spécifique.
$navPanel = New-Object System.Windows.Forms.Panel
$navPanel.Location = New-Object System.Drawing.Point(0, 0)
$navPanel.Size = New-Object System.Drawing.Size(200, 600)
$navPanel.BackColor = [System.Drawing.Color]::FromArgb(240, 240, 240)
- Panel : Crée un panneau vertical pour les boutons de navigation.
$contentPanel = New-Object System.Windows.Forms.Panel
$contentPanel.Location = New-Object System.Drawing.Point(200, 0)
$contentPanel.Size = New-Object System.Drawing.Size(600, 600)
- Panel : Zone pour afficher le contenu qui change selon la navigation.
function New-NavButton {
param (
[string]$text,
[int]$yPosition,
[scriptblock]$action
)
$button = New-Object System.Windows.Forms.Button
$button.Text = $text
$button.Location = New-Object System.Drawing.Point(10, $yPosition)
$button.Size = New-Object System.Drawing.Size(180, 30)
$button.Add_Click($action)
$navPanel.Controls.Add($button)
}
- Paramètres :
$text
: Texte à afficher sur le bouton.$yPosition
: Position verticale du bouton.$action
: Script à exécuter lors du clic.
- Controls.Add : Ajoute le bouton au panneau de navigation.