Ist es möglich, Ubuntu von Suspend in den Ruhezustand zu versetzen, auch bekannt als "Suspend Sedation"?
Ich suche
Folgendes : Wenn ich den Deckel schließe, wird der Laptop in den Standby-Modus versetzt. Wenn ich ihn dann nach einer festgelegten Zeit (auch wenn der Akku stark ist) immer noch nicht benutze, sollte er sich selbst in den Ruhezustand versetzen, um Akkustrom zu sparen.
Zum Beispiel ist mein Laptop so eingerichtet, dass er in den Standby-Modus wechselt, sobald ich den Deckel schließe. Wenn ich es dann den ganzen Tag nicht benutze, wird der Akku leer, da die Hardware auch im Suspend-Modus noch einen geringen Strom verbraucht und sich der Akku schließlich entlädt. Ich möchte, dass ich Ubuntu mitteilen kann, dass es nach einigen Stunden Inaktivität auch dann in den Ruhezustand versetzt werden muss, wenn es angehalten ist.
Windows kann das. Ubuntu kann so programmiert werden, dass es mit dem Timer in den Standby- oder Ruhezustand wechselt, aber nicht beides.
quelle
Antworten:
In Ubuntu 18.04 ist es viel einfacher. In systemd gibt es einen neuen Modus Suspend-Then-Hibernate . Um diese Funktion zu verwenden, müssen Sie eine Datei /etc/systemd/sleep.conf mit dem nächsten Inhalt erstellen :
Dann können Sie es per Befehl testen:
Sie können bearbeiten
HibernateDelaySec
, um die Verzögerung des Ruhezustands zu verringern.Wenn alles funktioniert, können Sie die Lid Close Action ändern. Dazu müssen Sie die Datei /etc/systemd/logind.conf bearbeiten
Sie müssen die Option finden
HandleLidSwitch=
, das Kommentarzeichen entfernen und zu wechselnHandleLidSwitch=suspend-then-hibernate
. Dann müssen Sie den systemd-logind-Dienst mit dem nächsten Befehl neu starten (Warnung! Ihre Benutzersitzung wird neu gestartet):Das ist alles! Jetzt können Sie diese schöne Funktion verwenden.
quelle
Die Lösung hierfür ist einfach. Beim Anhalten und Fortsetzen führt das Programm pm-suspend zunächst eine Reihe von Skripten in
/etc/pm/sleep.d
und aus/usr/lib/pm-utils/sleep.d
. Meine Lösung besteht also darin, ein Skript hinzuzufügen, das Folgendes ausführt:Hier ist ein Skript, das dies tut. Benennen Sie es
0000rtchibernate
und platzieren Sie es im/etc/pm/sleep.d
Verzeichnis (0000 ist wichtig, damit das Skript beim Anhalten zuerst und beim Fortsetzen zuletzt ausgeführt wird).Hoffentlich kommt dieser Code auf diesem Message Board durch (dies ist mein erster Beitrag hier).
Ändern Sie den Timeout-Wert
autohibernate=7200
oben, bis Sie nach wie vielen Sekunden in den Ruhezustand wechseln. Der aktuelle Wert oben beträgt 2 Stunden. Beachten Sie, dass Ihr Laptop zu diesem Zeitpunkt einige Sekunden lang aufwacht, während die Ruhezustandsfunktion ausgeführt wird.Wenn Sie also vorhaben, Ihren Laptop in eine Tasche zu legen, setzen Sie ihn nicht aus, sondern schalten Sie ihn in den Ruhezustand. Andernfalls könnte Ihr Laptop in esp überhitzen. Wenn es sich in einem eng anliegenden Schuber befindet (obwohl es nur für ein paar Sekunden bis eine Minute eingeschaltet ist).
Ich habe diese Methode in den letzten Tagen angewendet, bis jetzt war sie erfolgreich (und hat mich heute Nachmittag vor einer leeren Batterie bewahrt). Genießen.
Für andere Linux-Distributionen, die
systemd
Ubuntu und neuere Versionen verwenden, sollte dies weiterhin funktionieren, wenn Sie das Skript in/usr/lib/systemd/system-sleep
statt platzieren/etc/pm/sleep.d
. Ersetzen Sie den/usr/sbin/pm-hibernate
Befehl auch durchsystemctl hibernate
.quelle
Um in einfachen Worten zu erklären, wie dies funktioniert (ähnlich wie bei Windows): Der Computer wird nicht aus dem Standby-Modus geweckt, wenn der Akku fast leer ist, um den Status des Computers auf der Auslagerungspartition zu speichern. Er speichert alles sofort auf der Auslagerungspartition Im Standby-Modus und wenn der Akku leer ist, wird er durch Laden des Status von der Swap-Partition wiederhergestellt (wie im Ruhezustand).
AFAIK Linux wird / sollte Hybrid-Standby / Ruhezustand anstelle von "normalem" Standby verwenden, wenn es weiß, dass es für Ihre Hardware funktioniert. Es ist auch möglich, dass dies momentan wegen zu vieler Bugs oder so deaktiviert ist ...;)
Wenn Sie gerne experimentieren, können Sie vielleicht sehen, ob Sie mit pm-suspend-hybrid gute Ergebnisse erzielen .
Wenn das Folgende besagt, dass Sie Glück haben, wird der hybride Suspend theoretisch auf Ihrem System unterstützt:
quelle
Sie könnten an s2both interessiert sein . Es wird durch das Paket
uswsusp
in Ubuntu 10.10 bereitgestellt . Es wird auf der Festplatte angehalten, aber anstatt das System herunterzufahren, wird es in S3 abgelegt. Dies ist der Energiemodus, der normalerweise mit der Option "Anhalten" in Ubuntu verbunden ist. pm-suspend-hybrid ist ein weiteres Tool, das das Gleiche vorgibt.Um dies beim Schließen des Deckels zu automatisieren, lesen Sie die folgende Anleitung, in der Sie ein beliebiges Skript ausführen können, wenn ein Deckelereignis abgefangen wird:
http://ubuntuforums.org/showthread.php?t=1076486
Wenn Sie zufällig ein ThinkPad haben,
tpctl
verweist die Manpage für auf ein Argument--pm-sedation-hibernate-from-suspend-timer
, das die gesuchte Funktion zu bieten scheint. Ich möchte Sie davor warnen, dies auf Hardware zu versuchen, die nicht von ThinkPad stammt.Als Referenz habe ich in der Manpage nach hibernate.conf gesucht . es schien keine relevanten Optionen zu haben, könnte aber eine zweite Lesung wert sein.
quelle
Ubuntu 16.04 - von Suspend / Sleep in den Ruhezustand nach einer festgelegten Zeit
Es scheint, dass die Dinge auf Ubuntu 16.04 ein wenig anders sind, also habe ich folgende Schritte unternommen, damit es funktioniert:
Stellen Sie sicher, dass der Ruhezustand beim Ausführen wie erwartet funktioniert
Kopieren Sie die Originaldatei
suspend.target
:Bearbeiten Sie dann die Datei
/etc/systemd/system/suspend.target
und fügen Sie die Zeile hinzu:zu dem
[Unit]
Abschnitt dieser Datei.Erstellen Sie die Datei
/etc/systemd/system/delayed-hibernation.service
mit folgendem Inhalt:/etc/delayed-hibernation.conf
für das Skript mit dem folgenden Inhalt:Erstellen Sie das Skript, das tatsächlich die harte Arbeit erledigt.
Erstelle eine Datei
/usr/local/bin/delayed-hibernation.sh
mit dem Inhalt:Es hat ziemlich viel gedauert, bis ich dieses Skript basierend auf anderen Antworten in diesem Thread geschrieben habe, Dinge, die ich im Internet gefunden habe, wie https://bbs.archlinux.org/viewtopic.php?pid=1554259
Meine Version des Skripts versucht, viele Probleme zu lösen, z. B. erneut in den Standby-Modus zu wechseln, wenn der Ruhezustand nicht erfolgreich war, aber nach der festgelegten Zeit nicht immer wieder aufzuwachen.
Der letzte Schritt, von dem ich annehme, ist die Ausführung
um sicherzustellen, dass neue Dienste / Konfigurationen verwendet werden.
Um das Serviceprotokoll zu überprüfen, können Sie Folgendes verwenden:
oder für ein vollständiges Protokoll der Dienstnutzung:
Ein normales Protokoll, das ich vom laufenden Dienst erhalte, lautet:
Das wäre es also, ich hoffe, es hilft jemandem wirklich, da ich tagelang versucht habe, die richtige Kombination von Konfigurationen und Skriptversionen zu finden, damit diese praktische Funktion funktioniert.
quelle
/bin/systemctl hibernate
Laufen bringen. Die Ausführung gab immer 1 zurück, wenn das systemd-Skript ausgeführt wurde, obwohl es in der Befehlszeile einwandfrei funktioniert.Nur für den Fall, dass etwas schief geht
pm-hibernate
und ich den Computer lieber in den Suspend-Modus versetzen möchte, als ihn laufen zu lassen. So können Sie verwenden:quelle
Hier ist eine aktualisierte Version von Derek Pressnalls Antwort , die mit systemd funktioniert und Eliah Kagans Vorschlag enthält. Legen Sie sie einfach in /usr/lib/systemd/system-sleep/delayed_hibernation.sh ab und machen Sie sie ausführbar:
quelle
Hier ist mein Rezept (getestet auf zwei Notebooks Ubuntu 16.04):
Setzen Sie dieses Skript, wo immer Sie möchten (ich lege es auf root,
/syspend.sh
) und machen Sie es ausführbar (chmod +x /suspend.sh
)Dann erstelle systemd target:
# touch /etc/systemd/system/suspend-to-sleep.target
Füge diesen Inhalt ein:Dann aktivieren Sie es
# systemctl enable suspend-to-sleep.target
.Ich habe ein Problem mit Notebooks: Das Schließen des Deckels hat dieses Ziel nicht ausgelöst. Dies lag an xfce4-power-manager. Es gibt zwei Möglichkeiten, dieses Problem zu umgehen. Die erste ist , zu bearbeiten
/etc/systemd/logind.conf
Datei und ersetzenHandleLidSwitch=ignore
mitHandleLidSwitch=suspend
. Da es aber systemweit sein wird, habe ich meinem Skript gerade einen Symlink hinzugefügt# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
quelle
Eine weitere häufigere Problemumgehung, die Sie verwenden können
hybrid-sleep
(wie dies auch unter Mac OS der Fall ist). Wenn Ihr Computer den Ruhezustand unterstützt, können Sie diese Funktion verwenden:Dieser Befehl sollte den Computer anhalten und auf die Festplatte senden (in den Ruhezustand versetzen). Nach einiger Zeit schaltet sich der Computer aus (beim Einschalten werden die Ruhezustandsdateien zum Aufwecken verwendet).
ps: Ich weiß, dass es nicht genau das ist, was das OP gepostet hat, aber es ist ziemlich nah
quelle
Vergessen Sie nicht, diese Datei mit chmod + x auszuführen.
Es gibt eine andere Lösung ohne rtcwake mit wakealarm in / sys / class / rtc / rtc0. Verwenden Sie veralteten Code in pm-Funktionen (/ usr / lib / pm-utils), nachdem die Kommentare # nicht direkt vom Kernel unterstützt werden ... (weil der aktuelle Kernel (nach 3.6 etwas) dies direkt unterstützt). Setzen Sie diesen Code zurück und geben Sie do_suspend () anstelle von do_suspend_hybrid () ein.
Veralteter Code (aussetzen und in den Ruhezustand versetzen, wenn suspend_hybrid aufgerufen wird):
Empfohlen. Noch einfacher ist es, uswsusp zu verwenden und gleichzeitig den Nutzen von s2both zu maximieren, dh s2both beim Suspendieren. Fügen Sie den wiederhergestellten Code in den Teil do_suspend () des Moduls uswsusp (/usr/lib/pm-utils/module.d) ein.
Zurückgesetzter Code (suspend_hybrid, wenn suspend aufgerufen wird):
Mit uswsusp können wir den Fortschritt von Suspend / Hibernate und den umgekehrten Prozess im Text sehen, selbst wenn wir die Rücktaste drücken, um den Vorgang abzubrechen. Ohne uswsusp wird Suspend / Hibernate nur ärgerlich angezeigt bzw. ausgeblendet, insbesondere wenn Wakealarm ausgelöst wird und Hibernate ausgeführt wird (s2disk in uswsusp). Stellen Sie die Ruhezeit vor dem Ruhezustand an der üblichen Stelle in der pm-functions-Datei ein.
Hier ist der uswsusp-Mod: (Denken Sie daran, dass dieses Modul von pm-Funktionen aufgerufen wird, damit die eingefügten Variablen identisch sind.)
quelle