Je me cogne la tête contre cela depuis un bon moment maintenant. C'est lié à cette question . Je voudrais savoir exactement ce qui se passe lorsque je choisis d'arrêter ma boîte Linux à partir de l'interface graphique. Cela semble être mal (voire pas du tout) documenté.
Idéalement, j'espère une réponse agnostique DE et OS. Sauf cela, je suis intéressé par le cas spécifique de Mandriva 2010.1 et Debian 6.x (Squeeze) et 7.0 (Wheezy) qui exécutent tous Gnome. (Si vous faites très attention, oui c'est Gnome 2 et Gnome 3)
Fondamentalement, je voudrais savoir quelle commande / script / séquence de scripts est démarrée lorsque j'appuie sur "Arrêter" ou "Redémarrer" pour pouvoir modifier leur comportement. Certains messages sur le forum que j'ai consultés suggèrent de pirater, /etc/polkit-1/*
mais cette structure de répertoire n'est qu'un squelette sur ma boîte Debian (Squeeze), par exemple.
Quelqu'un peut-il aider?
ÉDITER
Ce que j'ai essayé jusqu'à présent
- Remplacé l'
shutdown
exécutable par un script personnel. Cela ne fonctionne pas: lorsque j'appuie surshutdown
Gnome, il se déconnecte sans exécuter mon script. - J'ai essayé de modifier le menu Gnome 2. Pas de joie: les options "Shutdown", "Log out" et "Lock Screen" n'apparaissent pas dans l'éditeur de menu.
- Regardé
/usr/share/menu
, rien d'utile là-bas.
Voies possibles pour la solution
strace
en utilisant les options GUI (est-ce même possible?)- Regarder
shutdown
le code source de - Regarder
gnome-session
le code source de
Mise à jour
Selon mes commentaires sur la réponse ci-dessous, j'ai examiné les polkit
actions sous /usr/share/polkit-1/actions/
et trouvé (dans le fichier org.freedesktop.consolekit.policy
) une action appelée org.freedesktop.consolekit.system.stop-multiple-users
qui lance le message
System policy prevents stopping the system when other users are logged in
Je pense (en raison de la org.freedesktop.*
convention de dénomination) qu'il s'agit d'une sorte de signal envoyé au DM via D-BUS. De plus, ce message apparaît lorsque vous essayez de vous arrêter graphiquement alors que d'autres utilisateurs sont connectés, donc le mécanisme qui le déclenche doit être le même mécanisme déclenché lorsque "Shut Down" ou "Power Off" est sélectionné dans l'interface graphique.
Quelqu'un peut-il confirmer / réfuter? Y a-t-il une possibilité d'intercepter ou de modifier ce signal d'une manière ou d'une autre?
/etc/init.d/rc.local
pour appeler un script lors de son arrêt .Réponses:
Cela dépend de votre gestionnaire d'affichage! (c.-à-d. KDM, GDM)
Veuillez garder à l'esprit que votre DM s'exécute en tant que root! (il a besoin des privilèges root pour exécuter votre processus de session en tant qu'utilisateur auquel vous vous connectez)
Lorsque vous cliquez sur arrêt dans KDE ou GNOME, votre DE envoie un signal à votre DM pour s'éteindre ou redémarrer une fois la session terminée. Ensuite, votre DE indique à chaque programme de se terminer et une fois que tous les autres processus se sont terminés (ou ont expiré un délai), le dernier processus de votre DE - le processus de session - se termine.
Le processus de session est le premier processus démarré dans une session X11. Lorsqu'il est tué ou qu'il se termine, la session se termine. Avez-vous déjà vu ce xterm lorsque vous exécutez X sans DE? C'est un processus de session. Ce processus est appelé
kdeinit
dans KDE etgnome-session
dans GNOME.Une fois la session terminée, le contrôle est retourné à votre DM (qui attendait la fin du processus X) et vérifie ce que le DE lui a dit de faire. S'il lui a dit de s'éteindre ou de redémarrer, il le fera. Dans les autres cas, il démarrera simplement un nouvel écran de connexion dans X.
Cela est également lié à des problèmes que vous avez pu avoir dans le passé, certains DE ne pouvant pas s'éteindre ou redémarrer, simplement pour se déconnecter, lorsqu'ils sont utilisés en combinaison avec d'autres DM.
En tout cas, ce n'est pas si mal documenté. GDM a une page de manuel d'une commande qui vous permet de lui dire de s'arrêter comme je l'ai déjà dit (
gdm-control
). KDM a également une excellente documentation et a un utilitaire similaire (un peu plus complexe) nommékdmctl
.L'arrêt et le redémarrage sont possibles sans PolicyKit, mais PolicyKit remplit de nombreuses fonctions nécessaires sur les systèmes actuels comme le montage de disques sans être root, suspendre ou mettre en veille prolongée l'ordinateur. Et ce n'est pas mal documenté non plus!
Vérifiez ceci si vous voulez en savoir plus sur ce qu'est PolicyKit et comment cela fonctionne: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
la source
gdm-control
n'était d'aucune aide. La documentation que vous avez fournie sur le PolicyKit semble plus prometteuse. Je vais creuser cela et voir si je peux implémenter une règle personnalisée. À suivre ...polkit
action appeléeorg.freedesktop.consolekit.system.stop-multiple-users
dans/usr/share/polkit-1/actions
Il est défini pour révoquer la demande d'utilisateurs inactifs etauth_admin_keep
pour l'utilisateur actif. La question est, qu'est-ce qui définit cette action? Que fait-il exactement?