Artisan Numérique

/bureau/le bureau/ Personaliser la déconnexion sous gnome via zenity

S'il y a un truc qui m'agace, c'est lorsqu'on allume le portable et que lors de la connexion sous Gnome, le son se mettre à hurler parce que j'ai oublié de le baisser avant de me déconnecter la veille.

Alors évidemment, une des possibilité consiste à faire un script au démarrage qui fixe le niveau sonore à, disons, 30%. Mais voila, les scripts de démarrage (situés dans ~/.config/autostart) ne se lancent qu'une fois la connexion réalisée, et il se passe donc une ou deux secondes avant que le son ne baisse à 30%, ce qui est largement suffisant pour se faire remarquer dans une réunion ou un amphi :)

L'autre possibilité consiste évidemment à ne pas garder les infos de session lors de la fermeture ... oui mais voila, j'aime bien garder ces infos pour d'autres applications. Alors il ne restait plus qu'à prendre soin de baisser le volume avant déconnexion.

Je me suis mis à chercher un moyen d'automatiser la tâche en cherchant s'il existait un dossier shutdown équivalent à autostart dans lequel on pourrait placer des scripts qui s'exécuteraient à la clôture de session ; mais n'ayant rien trouvé, je suis tombé sur une conversation décrivant comment utiliser zenity afin de créer une interface de déconnexion personnalisée.

Zenity, restez zen

Zenity permet de créer des boites de dialogue en GTK qui interagissent donc avec l'utilisateur, mais dont le traitement de fond se fait par scripts (bash, par exemple) : en fonction de l'entrée utilisateur via la boite de dialogue, zenity lance un script adapté pour le traitement de cette entrée.

Pour avoir une idée de la façon dont zenity créée une interface, tappez dans une console : zenity --entry ou zenity --calendar utilisez les pages de manuel pour avoir toutes les options, par exemple les diverses options du mode «list» de zenity s'obtiennent par zenity --help-list.

Une interface de déconnexion personnalisée

On va commencer par le créer, ce dossier ~/.config/shutdown ; c'est ce dossier qui contiendra tous les scripts susceptibles d'être lancés à la déconnexion. Ceci fait, autant continuer à bien faire les choses en proposant les options «classiques» de déconnexion : fermer la session, rebooter, éteindre. On va même pousser le vice jusqu'à permettre l'exécution d'un script différent selon le type de déconnexion qui est choisi.

Dans le script principal qui suit, et que l'on va placer dans notre dossier shutdown, nous allons donc créer une interface GTK contenant une liste avec les options "Fermer la session", "Eteindre l'ordinateur" et "Rebooter la machine".

#!/bin/sh

titre="Gestion de la session"

close="Fermer la session"
shutdown="Eteindre l'ordinateur"
reboot="Rebooter la machine"

size="--height= 220"

action=`zenity --list --title "$titre" --radiolist --column=Choix --column "Action" TRUE "$close" FALSE "$reboot" FALSE "$shutdown" "$size"`
case "$action" in
"$close")
sh ~/.config/shutdown/close_script.sh
gnome-session-save --kill
;;
"$shutdown")
sh ~/.config/shutdown/shutdown_script.sh
gnome-session-save
/sbin/halt
;;
"$reboot")
sh ~/.config/shutdown/reboot_script.sh
gnome-session-save
/sbin/shutdown -r now
esac
fichier ~/.config/shutdown/shut.sh

Comme on le voit, ce script permet de personnaliser l'exécution d'un script différent selon qu'on ne fait que fermer la session, que l'on éteint ou reboote l'ordinateur. Par exemple, le choix de l'option «rebooter la machine» entrainera l'exécution du script reboot_script.sh.

On place alors chaque script associé également dans le dossier ~/.config/shutdown ; voici le script sommaire qui baisse le volume à la déconnexion :

amixer -c 0 set Master 30% unmute
fichier ~/.config/shutdown/close_script.sh

Il suffit enfin de créer dans la barre supérieure un bouton lanceur d'application dans lequel on entre la commande sh /home/toto/.config/shutdown/shut.sh et si on choisi bien l'icone, on a alors un joli bouton de déconnexion personnalisé. On peut évidemment rajouter des tas d'autres options de déconnexion via le script zenity (proposer un backup de données juste avant la fermeture par exemple).

Les options de reboot et shutdown ne sont pas forcément accessibles aux utilisateurs par défaut. Si vous souhaitez les activer, il faut modifier les permission par un chmod +s /sbin/halt en root.

Conclusion

Il est clair que pour la simple utilisation qui consiste à baisser le volume à la sortie, on utilise là une usine à gaz (qui cependant n'est pas couteuse du tout) ; il est fort probable que d'autres solutions plus élémentaires soient disponibles. Mais l'avantage de la méthode utilisée via zenity est de permettre une personnalisation très poussée, et pas seulement que pour des scripts de déconnexion.

Pour ne citer qu'un exemple, l'affichage d'une boite "agenda" qui renvoie à un script la date choisie par l'utilisateur peut-être intéressante pour des personnes «allergiques» aux lignes de commande, qui nécessitent donc une interaction par boite de dialogue.