Ansichtssache. In einem Netzwerk mag das ja Sinnvoll sein, aber ich arbeite an meinem Rechner zu Hause alleine dran. Da währe es Egal. bei mir jedenfalls. Da machen die ganzen Passwörter sowieso nicht so viel Sinn....In sofern ist das nicht "der Preis der Freiheit", sondern ein sinnvolles Feature.
Linux Herunterfahren...[gelöst}
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Linux Herunterfahren...
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 489
- Registriert: Sa 5. Apr 2008, 09:37
- OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
- CPU-Target: 32Bit /64 Bit
- Wohnort: Nähe Freiburg i.Br.
Re: Linux Herunterfahren...
corpsman hat geschrieben: Dieses Cron von dem ihr da sprecht kannte., kenne ich nicht.
"dieser Cron" ist meiner Meinung nach Basiswissen unter Unix.
Wenn du den nicht kennst, gehe ich davon aus, dass du von Unix nicht all zu viel Ahnung hast.
Damit solltest lieber die Finger von BS-Funktionen weg lassen.
Gruss KH
- corpsman
- Lazarusforum e. V.
- Beiträge: 1632
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Linux Herunterfahren...
Es Stimmt wohl das ich neu bin beu Linux,
Und weil ich weis das man nicht einfach so im System Rumpfuscht, frage ich ja hier nach. Um den Schaden Minimal und den gewünschten Maximal zu halten.
Und weil ich weis das man nicht einfach so im System Rumpfuscht, frage ich ja hier nach. Um den Schaden Minimal und den gewünschten Maximal zu halten.
--
Just try it
Just try it
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Linux Herunterfahren...
Naja, das Runter fahren kann eigentlich nicht so viel Schaden verursachen. Das Problem ist halt nur, wenn man hier was falsches Einträgt, fährt der Rechner z.b. alle paar Sekunden runter *G*.Damit solltest lieber die Finger von BS-Funktionen weg lassen.
MFG
Michael Springwald
Michael Springwald
-
- 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: Linux Herunterfahren...
Das über Cronjobs zu erledigen finde ich in diesem Fall auch nicht wirklich die eleganteste Lösung.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Linux Herunterfahren...
Ich dachte, die seien eher dazu gedacht, regelmäßig zur gleichen Zeit eine Aktion auszuführen. Die würden sich schon anbieten, wenn die Zeiten sich nicht (oder eher selten) ändern. Wenn sie aber immer unterschiedlich sind/sein können, gibt es mit Sicherheit bessere Methoden.Targion hat geschrieben:Das über Cronjobs zu erledigen finde ich in diesem Fall auch nicht wirklich die eleganteste Lösung.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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: Linux Herunterfahren...
So, ich habe mich ein wenig durch das freedesktop.org Archiv gewühlt (Desktop-Linuxe fahren den Computer mittels ConsoleKit herunter) und dabei die ultimative Lösung gefunden:
Dieser Code fähr Linux sofort herunter, wenn der Nutzer die Berechtigung durch ConsoleKit erhalten hat. Dafür verantwortlich ist das Paket consolekit (o.Ä.), welches auf jedem Linux-System mit GUI installiert ist. Die Berechtigung wird durch eine Gruppe oder PolicyKit (seit neuestem) geregelt.
ACHTUNG: Die Prozedur fährt Linux sofort herunter, es gibt keine Möglichkeit, noch vorher Daten zu sichern.
EDIT: Fehler im Codeschnipsel korrigiert
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;
halt(0);
end else writeLn('DBus command line utility not found!');
end;
ACHTUNG: Die Prozedur fährt Linux sofort herunter, es gibt keine Möglichkeit, noch vorher Daten zu sichern.
EDIT: Fehler im Codeschnipsel korrigiert
Zuletzt geändert von Targion am Mo 10. Aug 2009, 17:51, insgesamt 2-mal geändert.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1632
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Linux Herunterfahren...
Also das Paket Konsolekit habe ich installiert:
aber leider, du ahnst es schon :

[Edit]
Generell scheint das Process ding aber zu gehen, denn wenn ich stattdessen schreibe :
dann öffnet sich gwenview...
[Edit2]
Der Befehl scheint aber zu gehen, denn wenn ich
Gibts da evtl noch nen anderen Modus das der Process den Befehl Ausführt ?
aber leider, du ahnst es schon :
Und dann passiert nichts mehr, sprich das System fährt nicht heruntercorpsman@corpsman2:~/Desktop/Shutdown$ ./project1
[WARNING] Out of OEM specific VK codes, changing to unassigned
[WARNING] Out of unassigned VK codes, assigning $FF
Shutting down Linux...
WARNING: TLCLComponent.Destroy with LCLRefCount>0. Hint: Maybe the component is processing an event?
process 5404: arguments to dbus_message_set_destination() were incorrect, assertion "destination == NULL || _dbus_check_is_valid_bus_name (destination)" failed in file dbus-message.c line 2891.
This is normally a bug in some application using the D-Bus library.
Not enough memory
corpsman@corpsman2:~/Desktop/Shutdown$

[Edit]
Generell scheint das Process ding aber zu gehen, denn wenn ich stattdessen schreibe :
Code: Alles auswählen
procedure ShutdownLinux;
var p: TProcess;
begin
if FileExists('/usr/bin/dbus-send') then
begin
p:=TProcess.Create(nil);
p.Options:=[];
writeLn('Shutting down Linux...');
p.CommandLine:= 'gwenview';
//'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop';
p.Execute;
p.Free;
halt(0);
end else writeLn('DBus command line utility not found!');
end;
[Edit2]
Der Befehl scheint aber zu gehen, denn wenn ich
in einer Konsole eingebe ist der Rechner schneller aus, als das ich noch irgendwas klicken kann ...dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Gibts da evtl noch nen anderen Modus das der Process den Befehl Ausführt ?
--
Just try it
Just try it
-
- 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: Linux Herunterfahren...
Könnte mal jemand anderes das Teil testen? Bei mir funktioniert's nämlich perfekt.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1632
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Linux Herunterfahren...
ho Targio, magst du mal meine Binary ausführen, wenn das Programm bei dir den selben Fehler erzeugt, liegts wohl an meinem Compiler ...
- Dateianhänge
-
project1.tar.gz
- (1.29 MiB) 189-mal heruntergeladen
--
Just try it
Just try it
-
- 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: Linux Herunterfahren...
Da war noch ein kleines Problem in meinem Code. Hast du die neue Variante (ich habe einfach den Beitrag geändert) mal ausprobiert? Funktioniert bei mir. Zuvor waren noch ein paar überflüssige Anführungszeichen drinn, die die korrekte Funktion des Befehls verhinderten.
Re: Linux Herunterfahren...
Probier mal so, mit der libhal unit aus diesem Thread http://www.lazarusforum.de/viewtopic.php?p=30962#p30962" onclick="window.open(this.href);return false;.
Hibernate funzt bei mir, Shutdown habe ich nicht getestet, müsste aber auch gehen.
Habe ich nur eben übersetzt. Wenn's nicht geht, musst du vielleicht die Fehlermeldugen ausgeben lassen. Original Code hier:
http://www.share-linux.com/hal2.php" onclick="window.open(this.href);return false;
Wenn man hibernaten will, müsste man zuerst noch checken, ob das System das kann (Wenn man's nicht weiss) Das steht hier:
http://www.share-linux.com/hal1.php" onclick="window.open(this.href);return false;
Hibernate funzt bei mir, Shutdown habe ich nicht getestet, müsste aber auch gehen.
Habe ich nur eben übersetzt. Wenn's nicht geht, musst du vielleicht die Fehlermeldugen ausgeben lassen. Original Code hier:
http://www.share-linux.com/hal2.php" onclick="window.open(this.href);return false;
Wenn man hibernaten will, müsste man zuerst noch checken, ob das System das kann (Wenn man's nicht weiss) Das steht hier:
http://www.share-linux.com/hal1.php" onclick="window.open(this.href);return false;
Code: Alles auswählen
uses dbus, libhal;
procedure PowerManagement(Command: Pchar);
const
HAL_DBUS_SERVICE = 'org.freedesktop.Hal';
HAL_ROOT_COMPUTER = '/org/freedesktop/Hal/devices/computer';
HAL_DBUS_INTERFACE_POWER = 'org.freedesktop.Hal.Device.SystemPowerManagement';
var connection: PDBusConnection;
mess, reply: PDBusMessage;
error: DBusError;
exit_code: integer;
begin
dbus_error_init(@error);
connection := dbus_bus_get(DBUS_BUS_SYSTEM, @error);
if (dbus_error_is_set(@error) <> 0) then
begin
//printf("Unable to connect to the daemon bus: %s",error.message);
dbus_error_free(@error);
exit;
end;
mess := dbus_message_new_method_call(HAL_DBUS_SERVICE,
HAL_ROOT_COMPUTER,
HAL_DBUS_INTERFACE_POWER,
Command);
if (mess = nil) then
begin
//printf("Out of memory");
exit;
end;
reply := dbus_connection_send_with_reply_and_block(connection,
mess,
-1, // Default DBus timeout
@error);
dbus_message_unref(mess);
if (dbus_error_is_set(@error) <> 0) then
begin
//printf("Error occured while trying to hibernate: %s", error.message);
dbus_error_free(@error);
exit;
end;
if (reply = nil) then
begin
//printf("Message hibernate didn't get a reply");
exit;
end;
// If we have received a reply then there is a return code from the util that HAL executed
case (dbus_message_get_type(reply)) of
DBUS_MESSAGE_TYPE_METHOD_RETURN: begin
dbus_message_get_args(reply, nil,
DBUS_TYPE_INT32,
[@exit_code,
DBUS_TYPE_INVALID]);
dbus_message_unref(reply);
exit;
end;
DBUS_MESSAGE_TYPE_ERROR:
begin
dbus_message_unref(reply);
//printf("Error occured while trying to hibernate");
end;
end;
dbus_connection_unref(connection);
end;
//Aufrufen mit
PowerManagement('Shutdown');
// PowerManagement('Hibernate');
- corpsman
- Lazarusforum e. V.
- Beiträge: 1632
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Linux Herunterfahren...
WOW,
also die libhal hab ich nicht gebraucht zum Kompilieren.
Das Hibernate hat er versucht und ist gleich wieder raus gegangen.
Und der Shutdown ging, zack bum und der Rechner war aus.
SUPER,
Vielen Dank für die geduldige Hilfe.
also die libhal hab ich nicht gebraucht zum Kompilieren.
Das Hibernate hat er versucht und ist gleich wieder raus gegangen.
Und der Shutdown ging, zack bum und der Rechner war aus.
SUPER,
Vielen Dank für die geduldige Hilfe.
--
Just try it
Just try it
Re: Linux Herunterfahren...
Super!
http://www.share-linux.com/hal1.php" onclick="window.open(this.href);return false;
Ja, stimmt. Aber wenn du's allgemeiner lösen willst, also z.B. herausfinden ob das System überhaupt hibernaten kann und ob man dem User dies anbieten darf, dann brauchst du libhal und den code hier:corpsman hat geschrieben: also die libhal hab ich nicht gebraucht zum Kompilieren.
http://www.share-linux.com/hal1.php" onclick="window.open(this.href);return false;
Re: Linux Herunterfahren...[gelöst}
Hier noch ein bisschen netter angerichtet: http://www.theo.ch/lazarus/dbus/powerman.tar.gz" onclick="window.open(this.href);return false;
Warnung: Kann ihren Computer herunterfahren, auch als normaler Benutzer.
Benutzung auf eigenes Risiko.
Warnung: Kann ihren Computer herunterfahren, auch als normaler Benutzer.
Benutzung auf eigenes Risiko.