Zenity : des fenêtres pour les scripts

Anne zenity script fenêtres linux

Mon premier besoin a été d’avoir un moyen de m’avertir qu’une tâche longue qui tournait en tâche de fond était terminée, mais on peut faire plein d’autres choses avec zenity.

Notification

Pour être prévenu qu’une tâche est terminée, notify-send est déjà pas mal. On peut par exemple faire :

ma_commande_qui_prend_longtemps ; notify-send "Terminé (code de retour = $?)"

On peut faire la même chose avec zenity :

ma_commande_qui_prend_longtemps ; \
  zenity --notification --text= Terminé (code de retour = $?)"

Mais zenity offre plein d’autres possibilités comme l’affichage de différentes boites de dialogue.

Question

zenity_question

On peut par exemple utiliser zenity pour poser une question à l’utilisateur :

zenity --question --text "Voulez vous continuer ?" \
       --ok-label "OK" --cancel-label "Quitter"
if [ "$?" != "0" ] ; then
  exit 0
fi

Ou bien s’il s’agit juste d’un message d’information sans autre choix :

zenity_info

zenity --info --text "Prêt ?" --ok-label "OK"
if [ "$?" != "0" ] ; then
  exit 0
fi

Progression

Une autre option intéressante est --progress qui permet d’afficher une barre de progression. Si on n’a aucune idée de la durée, on peut utiliser l’option -pulsate qui montre simplement un curseur qui se promène. Si par contre on veux une barre qui représente un pourcentage, il faut périodiquement fournir à zenity un nombre entre 0 et 100 pour faire la mise à jour de la progression.

Par exemple:

zenity_progress

max=60
for ((t = 0 ; t < $max ; t ++ )) ; do
    sleep 1 ;
    echo "$t * (100 / $max)" | bc
  done
  ) |
  zenity --progress --text="Merci de patienter..."  \
         --percentage=0 --auto-close

L’option --auto-close ferme automatiquement la fenêtre lorsque le pourcentage atteint 100.

L’option --auto-kill permet de tuer le processus lorsque l’on annule l’attente, c’est-à-dire dans notre cas de ne pas terminer la boucle avant de rendre la main.

On peut par exemple mettre l’ensemble de la commande entre parenthèses:

max=60
(for ((t = 0 ; t < $max ; t ++ )) ; do
    sleep 1 ;
    echo "$t * (100 / $max)" | bc
  done
  ) |
  zenity --progress --text="Merci de patienter..."   \
        --percentage=0 --auto-close --auto-kill)

Les widgets

Il y a plein d’autres options disponibles dont voilà la liste :

  • --calendar : boîte de dialogue calendrier
  • --entry : boîte de dialogue de saisie de texte
  • --error : boîte de dialogue d’erreur
  • --info : boîte de dialogue d’information
  • --file-selection : boîte de dialogue de sélection de fichiers
  • --list : boîte de dialogue de liste
  • --notification : notification
  • --progress : boîte de dialogue de barre de progression
  • --question : boîte de dialogue de question
  • --warning : boîte de dialogue d’avertissement
  • --scale : boîte de dialogue de glissière
  • --text-info : boîte de dialogue de texte d’information
  • --color-selection : boîte de dialogue de sélection de couleur
  • --password : boîte de dialogue de mot de passe
  • --forms : boîte de dialogue de formulaire

Mise en forme

Malheureusement, la documentation n’est pas très détaillé, et j’ai par exemple découvert un peu par hasard que l’on peut faire de la mise en forme avec des balise HTML, comme par exemple :

--text "<span color=\"red\">rouge</span> \n\
<b>gras</b>\n\
<span font-family=\"Helvetica\">essai de polices</span>"

Documentation

Pour plus d’information, voir :

  • le manuel (pas très détaillé).
  • un peu plus d’information dans la doc Ubuntu sur zenity.
  • YAD : un fork de zenity qui permet de faire des choses un peu plus sophistiquées.

Voir aussi :