Wie den PC herunterfahren?

Antworten
meister0815
Beiträge: 43
Registriert: Sa 26. Jun 2010, 17:10

Wie den PC herunterfahren?

Beitrag von meister0815 »

Hallöchen,

Mit welchen Befehlen kann ich den (Ubuntu-)PC herunterfahren? Und zwar ohne Root-Rechte!
Es gibt ja zahlreiche Progrämmchen die das schaffen, dann sollte das doch auch mit Lazarus hinzubekommen sein.

Dankeschön, Meister0815

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Wie den PC herunterfahren?

Beitrag von theo »


Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Wie den PC herunterfahren?

Beitrag von Targion »

Ganz easypeasy:

Code: Alles auswählen

procedure ShutdownLinux;
var p: TProcess;
begin
if FileExists('/usr/bin/dbus-send') then
begin
 p:=TProcess.Create(nil);
 p.Options:=[poStderrToOutPut];
 writeLn('Shutting down Linux...');
 p.CommandLine:='dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop';
 p.Execute;
 p.Free;
 //Application.Terminate; //Close application, system is shutting down
end else writeLn('DBus command line utility not found!');
end;

dbus-send muss installiert sein, ebenso wie ConsoleKit, welches aber auf jedem Linux-System mit Mehrbenutzerdesktop (also jedem mit GUI) zu finden ist.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Wie den PC herunterfahren?

Beitrag von lrlr »

das Programm muss dann aber mit su gestartet worden sein ?

edit: hier die antworte auf meine frage: viewtopic.php?f=16&t=2835&hilit=herunterfahren&start=15

(es gibt wohl unter linux auch eine art UAC)

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Wie den PC herunterfahren?

Beitrag von Targion »

Mein Code oben sendet eine Nachricht über DBus (ein Interprozesskommunikationsdienst und Object Request Broker) an einen Dienst namens "ConsoleKit", welcher eine Art Universalwerkzeug zum Session-Management ist. Über diesen kann jeder Benutzer, entsprechende Rechte vorrausgesetzt, den Rechner herunterfahren. Root-Rechte sind nicht nötig.
Der Code oben geht natürlich sauberer, wenn man die DBus-Anbindung von FPC benutzt, dann wird der Code aber viel, viel umfangreicher. (Mit FPC kann man nur elementares DBus nutzen, DBus-GLib oder QtDBus ist (noch) nicht verfügbar)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Wie den PC herunterfahren?

Beitrag von carli »

Für solche Fälle gibt es das PolicyKit, das für bestimmte Programme für die Ausführung von bestimmten Befehlen Root-Rechte verleihen kann.

du programmierst es so, dass es root-rechte braucht und stellst dann ein, dass es diese für die Asuführung von "halt" auch bekommt.

http://linuxundich.de/en/ubuntu/shutdow ... er-jaunty/

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Wie den PC herunterfahren?

Beitrag von Targion »

Für PolicyKit musst du dein Programm aber aufsplitten in einen Hintergrunddienst, der mit Root-Rechten läuft und ein Frontend. Dann kann das Frontend über Sockets oder besser DBus dem Backend Befehle senden. Dazwischen hängt PolicyKit und blockt den Zugriff, wenn der Nutzer keine Rechte hat. In diesem Fall halte ich PolicyKit für den absoluten overkill. Aber wenn es größere Sachen sind, die als Root ausgeführt werden müssen, würde ich diese Technik sehr empfehlen!
PolicyKit kontrolliert auch HAL, über welches man Linux ebenfalls herunterfahren kann. HAL ist aber deprecated, und ich weiß nicht, wie es mit der UDev-Unterstützung von PolicyKit aussieht. (Dann muss aber ebenfalls nur das DBus-Kommando ausgetauscht werden)

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Wie den PC herunterfahren?

Beitrag von felix96 »

Unterstützt ubuntu batch?
In der Konsole geht es glaubich per shutdown -h
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Wie den PC herunterfahren?

Beitrag von carli »

der genaue Befehlt lautet "shutdown -h 0" und den kann man auch als TProcess starten.
Was vielleicht machbar wäre, wäre ein Init-Script (welches dadurch automatisch Root-Rechte hat), das im Hintergrund läuft.
Auch gehen wäre, dass du den Prozess "shutdown -h 0" suspended (TProcess-Doku lesen..) startest mit root-Rechten und sobald du herunterfahren musst, kannst du den Job resumen. Dadurch verlagert sich die Passworteingabe aber nur auf den Start des Programms.

Antworten