Que se passe-t-il lorsque j'appuie sur «Arrêter» dans l'interface graphique?

15

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' shutdownexécutable par un script personnel. Cela ne fonctionne pas: lorsque j'appuie sur shutdownGnome, 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

  • straceen utilisant les options GUI (est-ce même possible?)
  • Regarder shutdownle code source de
  • Regarder gnome-sessionle code source de

Mise à jour

Selon mes commentaires sur la réponse ci-dessous, j'ai examiné les polkitactions 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-usersqui 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?

Joseph R.
la source
Qu'est-ce que vous essayez d'accomplir? Vous pourriez ajouter une modification /etc/init.d/rc.localpour appeler un script lors de son arrêt .
depquid
@depquid Ce que j'essaie d'accomplir se trouve dans ma question la plus ancienne à laquelle j'ai lié: j'essaie d'empêcher un utilisateur connecté localement d'altérer la session SSH d'un autre utilisateur.
Joseph R.

Réponses:

9

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é kdeinitdans KDE et gnome-sessiondans 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

Alicia
la source
Cela semble prometteur. Merci pour les liens vers les documents. Je ne doute pas que ces manuels soient complets et clairs, mais ils pourraient tout aussi bien ne pas exister. Votre réponse est la première fois que je vois le gestionnaire d'affichage mentionné conjointement avec ce problème, ce n'est donc pas exactement de notoriété publique. Je vais essayer ceci et vous le faire savoir ...
Joseph R.
D'ACCORD. gdm-controln'é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 ...
Joseph R.
1
J'ai fait quelques lectures (écrémage, plus comme) et corrigez-moi si je me trompe: le DE, quand on lui demande d'arrêter, enverra un message au DM via le polkit sur D-BUS. Dans l'attente de l'authentification, la session peut être terminée ou la demande révoquée. Ceci est défini dans une polkitaction appelée org.freedesktop.consolekit.system.stop-multiple-usersdans /usr/share/polkit-1/actionsIl est défini pour révoquer la demande d'utilisateurs inactifs et auth_admin_keeppour l'utilisateur actif. La question est, qu'est-ce qui définit cette action? Que fait-il exactement?
Joseph R.
@don_crissti C'est ce que je comprends maintenant. Ce qui m'intéresse, c'est précisément ce "signal". Quel est le client qui l'envoie?
Joseph R.
@don_crissti Voulez-vous déplacer ce commentaire à mon autre question pour un suivi?
Joseph R.