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
shutdown
ausführbare Datei wurde durch ein eigenes Skript ersetzt. Dies funktioniert nicht: Wenn ich aufshutdown
Gnome 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
strace
die GUI-Optionen (ist das überhaupt möglich?)- Seht
shutdown
euch den Quellcode an - Seht
gnome-session
euch den Quellcode an
Aktualisieren
Gemäß meinen Kommentaren zur Antwort unten habe ich die polkit
Aktionen 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?
/etc/init.d/rc.local
um ein Skript aufzurufen, wenn es angehalten wird .Antworten:
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
kdeinit
in KDE undgnome-session
in 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 namenskdmctl
.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
quelle
gdm-control
war 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. Fortsetzungpolkit
Aktion aufgerufenorg.freedesktop.consolekit.system.stop-multiple-users
in/usr/share/polkit-1/actions
sie gesetzt ist die Anforderung für inaktive Benutzer zu widerrufen undauth_admin_keep
für den aktiven Benutzer. Die Frage ist, was diese Aktion definiert. Was genau führt es aus?