Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

[bash] une GUI pour nos scripts bash

#1Messageil y a 7 ans

Suite à une question sur un autre forum, j'ai réalisé qu'il est en fait très rare que l'on habille nos scripts bash pour qu'ils puissent être utilisés directement avec notre bureau.

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
Maintenant il fonctionne bien mais en ligne de commande :rigole:
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
Avec ce lanceur, nous avons un véritable programme Gtk :pompom:

Pour l'utiliser (plus de console :siffle ), 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é.
drag-drop dans dolphin : Image
et avec thunar (clic droit) :Image
Répondre