Herunterfahren von Computer (Linux) mit Python

7

Ich versuche ein Skript zu schreiben, das den Computer herunterfährt, wenn einige Anforderungen mit dem Befehl

erfüllt sind %Vor%

hat es auch versucht

%Vor%

und ein paar andere. aber nichts passiert, wenn ich es ausführe, der Computer durchläuft den Code ohne Absturz oder produziert keine Fehlermeldungen und beendet das Skript normal, ohne den Computer herunterzufahren.

Wie beendet man den Computer in Python?

bearbeiten:

Scheint, dass die Befehle, die ich ausprobiert habe, Root-Zugriff benötigen. Gibt es eine Möglichkeit, den Rechner ohne erhöhte Rechte vom Skript zu trennen?

    
user3522859 11.04.2014, 12:58
quelle

7 Antworten

15

Viele der Linux-Distributionen benötigen Super-User-Privilegien, um shutdown oder halt auszuführen. Aber wie kommt es, dass Sie, wenn Sie auf Ihrem Computer sitzen, das System ausschalten können, ohne root zu sein? Nun, die Idee dahinter ist, dass Sie, wenn Sie physischen Zugang zum Computer haben, das Stromkabel ziemlich oft ziehen und ausschalten können. Heutzutage erlauben viele Distributionen das Ausschalten, obwohl der Zugriff auf den lokalen Systembus zugänglich ist durch dbus . Problem mit dbus (oder die dadurch bereitgestellten Dienste)? Es ändert sich ständig. Ich würde empfehlen, ein dbus-Viewer-Tool wie D-Füße zu installieren (Hinweis: es ist immer noch schwer zu visualisieren, aber es kann helfen)

Sehen Sie sich diese Dbus-Shutdown-Skripte an .

Wenn du immer noch HAL in deiner Distribution hast (ist auf dem Weg zu veraltet), versuche dies:

%Vor%

Das funktioniert auf einem Ubuntu 12.04 (Ich habe gerade meinen Computer ausgeschaltet, um sicherzustellen, dass es funktioniert). Wenn Sie etwas neueres haben ... nun, es funktioniert vielleicht nicht. Es ist der Nachteil dieser Methode: Sie ist sehr verteilungsspezifisch.

Sie müssen möglicherweise das Paket dbus-python installieren, damit dies funktioniert ( Ссылка )

UPDATE 1:

Ich habe ein bisschen Nachforschungen angestellt und es sieht so aus, als ob dies in neueren Ubuntu-Versionen über ConsoleKit . Ich habe den Code unten in meinem Ubuntu 12.04 getestet (der die veraltete HAL und das neuere ConsoleKit hat) und es hat meinen Computer ausgeschaltet:

%Vor%

UPDATE 2:

Wahrscheinlich warum können Sie dies tun, ohne dass root ein bisschen eine breitere Erklärung verdient. Lassen Sie uns auf die neuere ConsoleKit konzentrieren ( HAL ist viel komplizierter und unordentlich, IMHO).

Der ConsoleKit ist ein Dienst, der in Ihrem System als root ausgeführt wird:

%Vor%

Nun ist d-bus nur ein Nachrichtenübergabesystem. Sie haben einen Dienst wie ConsoleKit , der eine Schnittstelle für d-bus verfügbar macht. Eine der angezeigten Methoden ist Stop (siehe oben). Die Berechtigungen von ConsoleKit werden mit PolKit gesteuert, was (trotz der Tatsache, dass es auf normalen Linux-Berechtigungen basiert) eine feinere Kontrolle für "Wer kann mach was ". Zum Beispiel kann PolKit Dinge sagen wie "Wenn der Benutzer am Computer angemeldet ist, dann erlauben Sie ihm, etwas zu tun. Wenn es remote verbunden ist, dann nicht." . Wenn PolKit feststellt, dass Ihr Benutzer die Methode Stop von ConsoleKit aufrufen darf, wird diese Anfrage an (oder bis ) übergeben. co_de% to ConsoleKit (das wird den Computer anschließend herunterfahren, weil es ... weil es das wert ist ... weil es d-bus ist)

Weiterführende Literatur:

Zusammenfassend: Sie können einen Computer nicht ausschalten, ohne root zu sein. Sie können jedoch einen Dienst angeben, der als root ausgeführt wird, um das System für Sie herunterzufahren.

BONUS :

Ich habe in einem Ihrer Kommentare gelesen, dass Sie den Computer nach einer zeitraubenden Aufgabe ausschalten möchten, um eine Überhitzung zu vermeiden ... Wussten Sie, dass Sie wahrscheinlich zu einem gegebenen Zeitpunkt einschalten können? Zeit mit RTC? (Siehe dies und dies ) Ziemlich cool, uh? (Ich war so aufgeregt, als ich herausfand, dass ich das tun könnte ...) : - D

    
BorrajaX 11.04.2014, 13:27
quelle
11
%Vor%

Führen Sie Ihr Skript mit root-Rechten aus.

    
Rahul R Dhobi 11.04.2014 13:03
quelle
2
  

eine Möglichkeit, herunterzufahren ... ohne erhöhte Privilegien?

Nein, das ist nicht (zum Glück!).

Beachten Sie, dass Sie mehrere Systemfeatures verwenden können, um die Rechteweiterleitung für normale Benutzer zu vereinfachen:

Brian Cain 11.04.2014 13:13
quelle
2

Der beste Weg, um ein System herunterzufahren, ist die Verwendung der folgenden Codes

%Vor%     
Sushin Pv 31.01.2017 18:03
quelle
1

Nur um die Antwort von @BorrajaX für diejenigen zu ergänzen, die logind verwenden (neuere Fedora-Systeme):

%Vor%     
Roeften 13.01.2017 23:15
quelle
0

Ich benutze Fedora und es funktioniert mit mir. Alles, was ich tun muss, ist diese Zeile im Terminal schreiben:

%Vor%     
Black Kinght 28.05.2016 20:57
quelle
-1

Es gibt eine Möglichkeit, den Computer herunterzufahren, ohne erweiterte Berechtigungen zu verwenden.

%Vor%     
RyanKramer 03.12.2016 02:25
quelle