Page 1 sur 1

Créer un lanceur pour éteindre avec demande de confirmation

Posté : mer. 28 oct. 2015 19:03
par Kazlu
Ce tutoriel a pour but de créer un lanceur dans le tableau de bord de MATE pour éteindre l'ordinateur, avec demande de confirmation pour éviter d'éteindre sans le vouloir. Il existe déjà un lanceur qui fait à peu près ça dans Linux Mint. Mais dans mon cas, j'ai rencontré un problème sur mon installation de Linux Mint qui faisait que je ne pouvais plus éteindre l'ordinateur via le mintmenu ou via le lanceur du tableau de bord original (voir http://forum-francophone-linuxmint.shos ... f=23&t=523). D'autre part, il est facile de personnaliser ce lanceur si on le souhaite. Il est d'ailleurs possible de faire autre chose qu'éteindre, la méthode peut être appliquée à toute commande possible et imaginable !

La première chose à faire, c'est de sauvegarder ce script dans un fichier texte quelque part sur son disque.

Code : Tout sélectionner

echo -n "Que voulez-vous faire ? Appuyez sur la touche correspondante\n"
echo -n "e : Éteindre\n"
echo -n "r : Redémarrer\n"
echo -n "v : Mettre en veille\n"
echo -n "h : Hiberner\n"
echo -n "Appuyez sur une autre touche pour annuler.\n"
stty -echo raw
c=$(dd bs=1 count=1 2>/dev/null )
stty echo -raw
if [ $c = e ]
then
	echo "Extinction..."
	 dbus-send --system --print-reply --system --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
elif [ $c = r ]
then
	echo "Redémarrage..."
	 dbus-send --system --print-reply --system --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
elif [ $c = v ]
then
	echo "Veille..."
	 dbus-send --system --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Suspend
elif [ $c = h ]
then
	echo "Hibernation..."
	 dbus-send --system --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
fi
echo 
L'idéal est de le mettre dans un dossier de son /home qui soit isolé des autres pour éviter de le supprimer avec d'autres documents. Dans la suite, je supposerai que ce script, que l'on nommera "lanceur_eteindre", est enregistré dans /home/user/scripts_perso.

Ensuite, on va créer un lanceur dans le tableau de bord de MATE. Faites un clic droit dans le panneau à l'endroit où vous voulez placer le lanceur et cliquez sur "Ajouter au tableau de bord". Sélectionnez "Créer un lanceur d'application personnalisé". Dans la fenêtre qui s'ouvre, renseignez les champs comme ceci :
Type : Application dans un terminal
Nom : Extinction
Commande : /home/user/scripts_perso/lanceur_eteindre
Commentaire : Éteindre l'ordinateur

Vous pouvez choisir une icône qui vous convient pour ce lanceur. Une fois ceci fait, essayez votre lanceur. Cliquez dessus... Crotte de bique, ça ne marche pas... Un message d'erreur vous informe que xterm n'est pas installé. Qu'à cela ne tienne, on va l'installer. Installez-le via le gestionnaire de logiciels ou via la commande

Code : Tout sélectionner

sudo apt-get install xterm
Maintenant, si vous cliquez sur votre lanceur, un terminal s'ouvre en vous demandant d'appuyer sur une touche pour sélectionner une option. Par exemple, appuyez sur "e" pour éteindre. Si vous avez cliqué sur ce lanceur par erreur, appuyez sur n'importe quelle touche qui n'est pas listée (par exemple, "a" ou "échap") et la fenêtre de terminal se terminera sans rien faire.

Pistes d'améliorations :
- xterm : Ce n'est pas très propre d'installer xterm alors qu'on dispose déjà d'un émulateur de terminal (mate-terminal sur Linux Mint MATE). Je suppose qu'il doit y avoir une solution pour que l'option "lancer dans un terminal" du tableau de bord MATE appelle mate-terminal et non pas xterm ? Une variable d'environnement à changer peut-être ?
- option déconnexion : J'aurais voulu pouvoir ajouter les options "déconnexion" et peut-être "changer d'utilisateur" dans ce script. On m'a conseillé la commande suivante pour déconnecter:

Code : Tout sélectionner

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1
mais elle ne fonctionne pas. J'ai essayé en la remplaçant par

Code : Tout sélectionner

dbus-send --session --type=method_call --print-reply --dest=org.mate.SessionManager /org/mate/SessionManager org.mate.SessionManager.Logout uint32:1
mais à cause d'un bug spécifique à mon cas ça ne fonctionne pas non plus chez moi, je ne sais pas si ça marche chez quelqu'un d'autre...

Testé dans Linux Mint MATE 17.1 32 bits.
--
Kazlu

Re: Créer un lanceur pour éteindre avec demade de confirmati

Posté : mer. 28 oct. 2015 19:37
par mpat
possible une erreur de copier coller, celle-ci testée fonctionne.

Code : Tout sélectionner

dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Logout uint32:1

Re: Créer un lanceur pour éteindre avec demade de confirmati

Posté : mer. 28 oct. 2015 21:44
par ledudulela
bonjour/bonsoir,
juste pour te donner un peu de boulot supplémentaire, ne serait-ce pas plus joli avec Zenity pour demander l'action à exécuter plutôt que des touches à enfoncer

Re: Créer un lanceur pour éteindre avec demande de confirmat

Posté : jeu. 29 oct. 2015 07:15
par dagonh
Juste une question : comme tu as fait ça sous Maté, as-tu essayé d'ajouter le lanceur d'extinction et/ou celui de fermeture de session déjà proposé dans les lanceurs "tout faits" ?

Re: Créer un lanceur pour éteindre avec demande de confirmat

Posté : ven. 30 oct. 2015 19:38
par Kazlu
ledudulela a écrit :bonjour/bonsoir,
juste pour te donner un peu de boulot supplémentaire, ne serait-ce pas plus joli avec Zenity pour demander l'action à exécuter plutôt que des touches à enfoncer
Oui c'est une idée, je ne connaissais pas. Si je trouve le temps je regarderai ça.
dagonh a écrit :Juste une question : comme tu as fait ça sous Maté, as-tu essayé d'ajouter le lanceur d'extinction et/ou celui de fermeture de session déjà proposé dans les lanceurs "tout faits" ?
Oui, j'en parle dans le fil que j'ai cité, mais les lanceurs "tout faits" ne fonctionnent pas chez moi et je n'ai pas réussi à trouver pourquoi. Mais ce lanceur custom fonctionne.