Il existe une bibliothèque (paquet a installer) zenity pour GTK et une autre kdialog pour environnement QT
On a la possibilité de
- demander une entrée (boite avec champ de saisie texte, sélection de fichiers)
- afficher des notifications (boites de dialogue info,erreur ...)
- afficher un résultat
Il est très facile de reprendre un script existant pour le mettre à la sauce GUI
Pour l'exemple, le script va afficher à quel paquet appartient un fichier
La version console :
#!/usr/bin/bash
fichier="$1"
[ -f "$fichier" ] || { echo "entrez le nom d'un fichier"; exit 1; }
paquet=$(/usr/bin/pacman -Qoq "$fichier")
if [ -n "${paquet}" ]; then
echo "paquet: ${paquet}"
pacman -Qlq "${paquet}"
pacman -Qi "${paquet}"
else
echo "fichier non installé par pacman"
fi
Passons à notre GUI avec zenity (gtk)
Nous pouvons afficher une boite de sélection de fichier si aucun nom n'est rentré, un gros plus par rapport à la version console.
fichier=$(zenity --file-selection --title="Sélectionnez un fichier")
une erreur a un moment ?
zenity --error --text "Erreur Manjaro Système ;)"
et pour afficher le résultat, on va écrire du html dans un simple fichier texte
zenity --text-info --html --filename=monfichier.html
Voila nous avons tout pour réécrire notre script (fichier "
pacman-qo
" avec droits en exécution)#!/usr/bin/bash
# trouver le paquet auquel appartient le fichier
# dependance zenity : doc : https://help.gnome.org/users/zenity/stable/index.html.fr
# dependance kdialog si kde
# fichier passé en paramètres sauvé dans variable "fichier"
fichier="$1"
if [ -z "${fichier}" ]; then
# pas de paramètres, on charge un fichier
if [[ "$XDG_CURRENT_DESKTOP" == "KDE" ]]; then
fichier=$(kdialog --getopenfilename / '*.* |tous fichiers' 2>/dev/null) # version kde
else
fichier=$(zenity --file-selection --title="Sélectionnez un seul fichier") # version GTK+
fi
if (($? != 0)); then
zenity --error --text "Annulé"
exit 111
fi
fi
# commandes pacman dans un fichier temporaire au format html
paquet=$(/usr/bin/pacman -Qoq "$fichier")
if [ -n "${paquet}" ]; then
# resultat non vide
# on retourne tous les textes dans un fichier html temporaire
# la conversion (rapide) html est faite avec la commande sed
echo "Le fichier: <b>${fichier}</b>
appartient au paquet <big><b>${paquet}</b></big>
<hr>Contenu de ce paquet:<br>" > /tmp/pacman-qo
pacman -Qlq "${paquet}" | sed -e 's|usr/bin/\(.*\)|usr/bin/<b>\1</b>|g' | sed 's/$/<br>/g' >> /tmp/pacman-qo
echo '<hr>' >> /tmp/pacman-qo
pacman -Qi "${paquet}" | sed 's/$/<br>/g' >> /tmp/pacman-qo
# on affiche le résultat :)
zenity --text-info --html --filename=/tmp/pacman-qo --title="pacman -Qo" 2> /dev/null
else
# résultat est vide !
zenity --error --text "Fichier <b>${fichier}</b> non installé par pacman"
exit 1
fi
[ -f "/tmp/pacman-qo" ] && rm "/tmp/pacman-qo"
exit 0
Il nous faut donc créer un lanceur, fichier
pacman-qo.desktop
avec les bons paramètres dans la ligne Exec
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=bash unity
Exec=/home/monlogin/workspace/bash/zenity/pacman-qo
GenericName[fr_FR]=pacman -Qo
GenericName=pacman -Qo
Icon=autopackage-manager-gtk
Name[fr_FR]=pacman-Qo
Name=pacman-Qo
StartupNotify=true
Terminal=false
Type=Application
Pour l'utiliser (plus de console ), 3 façons de faire
- un double clic sur le lanceur (ou via menu applications si intégré) et une boite de sélection de fichier s'ouvre et va nous afficher en résultat toutes les infos sur le paquet lié
- un glisser/relacher d'un de nos fichier sur l'icone (du lanceur) et nous avons directement les infos pacman.
- il est possible de l'intégrer dans le clic droit de votre navigateur de fichier préféré.
et avec thunar (clic droit) :