Was passiert, wenn ich auf der Benutzeroberfläche auf "Herunterfahren" drücke?

15

Ich habe jetzt schon eine ganze Weile meinen Kopf dagegen geschlagen. Es hängt mit dieser Frage zusammen . Ich möchte genau wissen, was passiert, wenn ich meine Linux-Box über die GUI herunterfahre. Dies scheint (wenn überhaupt) schlecht dokumentiert zu sein.

Im Idealfall hoffe ich auf eine DE- und OS-agnostische Antwort. Ansonsten interessiert mich der spezielle Fall von Mandriva 2010.1 und Debian 6.x (Squeeze) und 7.0 (Wheezy), auf denen Gnome läuft. (Wenn Sie genau hinschauen, ist das Gnome 2 und Gnome 3)

Grundsätzlich möchte ich wissen, welcher Befehl / welches Skript / welche Sequenz von Skripten gestartet wird, wenn ich "Herunterfahren" oder "Neustart" drücke, damit ich ihr Verhalten ändern kann. Einige Forenbeiträge, die ich mir angesehen habe, schlagen Hacking vor, /etc/polkit-1/*aber diese Verzeichnisstruktur ist nur ein Grundgerüst auf meiner Debian (Squeeze) -Box.

Kann jemand helfen?


BEARBEITEN

Was ich bisher ausprobiert habe

  • Die shutdownausführbare Datei wurde durch ein eigenes Skript ersetzt. Dies funktioniert nicht: Wenn ich auf shutdownGnome drücke, meldet sich Gnome ab, ohne mein Skript auszuführen.
  • Es wurde versucht, das Gnome 2-Menü zu bearbeiten. Keine Freude: Die Optionen "Herunterfahren", "Abmelden" und "Bildschirm sperren" werden im Menü-Editor nicht angezeigt.
  • Gesehen /usr/share/menu, nichts hilfreiches da.

Mögliche Lösungswege

  • stracedie GUI-Optionen (ist das überhaupt möglich?)
  • Seht shutdowneuch den Quellcode an
  • Seht gnome-sessioneuch den Quellcode an

Aktualisieren

Gemäß meinen Kommentaren zur Antwort unten habe ich die polkitAktionen unter untersucht /usr/share/polkit-1/actions/und (in der Datei org.freedesktop.consolekit.policy) eine Aktion namens gefunden org.freedesktop.consolekit.system.stop-multiple-users, die die Nachricht auslöst

System policy prevents stopping the system when other users are logged in

Ich denke (aufgrund der org.freedesktop.*Namenskonvention), dass dies eine Art Signal ist, das über den D-BUS an den DM gesendet wird. Darüber hinaus wird diese Meldung angezeigt, wenn versucht wird, das System grafisch herunterzufahren, während andere Benutzer angemeldet sind. Daher muss der auslösende Mechanismus derselbe sein, der ausgelöst wird, wenn "Herunterfahren" oder "Ausschalten" auf der GUI ausgewählt wird.

Kann jemand bestätigen / widerlegen? Gibt es eine Möglichkeit, dieses Signal abzufangen oder zu modifizieren?

Joseph R.
quelle
Was versuchst du zu erreichen? Möglicherweise können Sie eine Bearbeitung hinzufügen, /etc/init.d/rc.localum ein Skript aufzurufen, wenn es angehalten wird .
depquid
@depquid Was ich versuche zu erreichen, ist in meiner älteren Frage, die ich verlinkt habe: Ich versuche zu verhindern, dass ein lokal angemeldeter Benutzer die SSH-Sitzung eines anderen Benutzers blockiert.
Joseph R.

Antworten:

9

Das hängt von Ihrem Display Manager ab! (dh KDM, GDM)

Bitte denken Sie daran, dass Ihr DM als root ausgeführt wird! (Es benötigt Root-Rechte, um Ihren Sitzungsprozess als der Benutzer auszuführen, bei dem Sie sich anmelden.)

Wenn Sie in KDE oder GNOME auf Herunterfahren klicken, sendet Ihr DE ein Signal an Ihren DM, um ihn nach Beendigung der Sitzung auszuschalten oder neu zu starten. Dann weist Ihr DE jedes Programm an, zu beenden, und sobald alle anderen Prozesse beendet wurden (oder eine Zeitüberschreitung abgelaufen ist), wird der letzte Prozess Ihres DE - der Sitzungsprozess - beendet.

Der Sitzungsprozess ist der erste Prozess, der in einer X11-Sitzung gestartet wird. Wenn es getötet oder beendet wird, wird die Sitzung beendet. Haben Sie dieses xterm schon einmal gesehen, wenn Sie X ohne DE ausführen? Das ist ein Sitzungsprozess. Dieser Vorgang wird kdeinitin KDE und gnome-sessionin GNOME aufgerufen .

Sobald die Sitzung beendet ist, wird die Steuerung an Ihren DM zurückgegeben (der darauf gewartet hat, dass der X-Prozess beendet wird), und es wird überprüft, was der DE ihm befohlen hat, zu tun. Wenn es das Ausschalten oder Neustarten anordnet, wird es das tun. In anderen Fällen wird nur ein neuer Anmeldebildschirm in X gestartet.

Dies hängt auch mit Problemen zusammen, die Sie möglicherweise in der Vergangenheit hatten. Einige DEs können sich nicht ausschalten oder neu starten, nur um sich abzumelden, wenn sie in Kombination mit anderen DMs verwendet werden.

In jedem Fall ist dies nicht so schlecht dokumentiert. GDM hat eine Handbuchseite eines Befehls, mit der Sie ihm mitteilen können, dass er heruntergefahren werden soll, wie ich es zuvor gesagt habe ( gdm-control). KDM hat auch eine ausgezeichnete Dokumentation und ein ähnliches (etwas komplexeres) Dienstprogramm namens kdmctl.


Das Herunterfahren und Neustarten ist ohne PolicyKit möglich, aber PolicyKit dient vielen Zwecken, die heutzutage auf Systemen erforderlich sind, z. Und es ist auch nicht schlecht dokumentiert!

Sehen Sie sich das an, wenn Sie mehr über PolicyKit und dessen Funktionsweise erfahren möchten: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

Alicia
quelle
Hört sich gut an. Danke für die Links zu den Dokumenten. Ich bezweifle nicht, dass diese Handbücher umfassend und klar sind, aber sie hätten genauso gut nicht existieren können. Ihre Antwort ist das erste Mal, dass ich den im Zusammenhang mit diesem Problem erwähnten Display-Manager gesehen habe, es ist also nicht gerade allgemein bekannt. Ich werde es versuchen und dich wissen lassen ...
Joseph R.
IN ORDNUNG. gdm-controlwar keine Hilfe. Die Dokumentation, die Sie im PolicyKit bereitgestellt haben, erscheint vielversprechender. Ich werde mich damit befassen und prüfen, ob ich eine benutzerdefinierte Regel implementieren kann. Fortsetzung
Joseph R.
1
Ich habe etwas gelesen (überfliegen, mehr wie) und bitte korrigiere mich, wenn ich falsch liege: Der DE wird, wenn er zum Herunterfahren aufgefordert wird, eine Nachricht über das Polkit auf D-BUS an den DM senden. Während die Authentifizierung aussteht, kann die Sitzung entweder beendet oder die Anforderung widerrufen werden. Dies wird in einer definierten polkitAktion aufgerufen org.freedesktop.consolekit.system.stop-multiple-usersin /usr/share/polkit-1/actionssie gesetzt ist die Anforderung für inaktive Benutzer zu widerrufen und auth_admin_keepfür den aktiven Benutzer. Die Frage ist, was diese Aktion definiert. Was genau führt es aus?
Joseph R.
@don_crissti Soviel verstehe ich jetzt. Was mich interessiert, ist genau dieses "Signal". Was ist der Client, der es sendet?
Joseph R.
@don_crissti Möchtest du diesen Kommentar zu meiner anderen Frage verschieben, um sie weiter zu verfolgen?
Joseph R.