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
systemctl hibernate
Kopieren Sie die Originaldatei suspend.target
:
sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target
Bearbeiten Sie dann die Datei /etc/systemd/system/suspend.target
und fügen Sie die Zeile hinzu:
Requires=delayed-hibernation.service
zu dem [Unit]
Abschnitt dieser Datei.
Erstellen Sie die Datei /etc/systemd/system/delayed-hibernation.service
mit folgendem Inhalt:
[Einheit]
Beschreibung = Auslöser für verzögerten Ruhezustand
Vorher = suspend.target
Konflikte = hibernate.target hybrid-suspend.target
StopWhenUnneeded = true
[Bedienung]
Typ = Einschuss
RemainAfterExit = yes
ExecStart = / usr / local / bin / delayed-hibernation.sh vor dem Suspendieren
ExecStop = /usr/local/bin/delayed-hibernation.sh post suspend
[Installieren]
WantedBy = sleep.target
- Erstellen Sie die Konfigurationsdatei
/etc/delayed-hibernation.conf
für das Skript mit dem folgenden Inhalt:
# Konfigurationsdatei für das Skript 'delayed-hibernation.sh'
# Geben Sie die Zeit in Sekunden an, die Sie im Energiesparmodus verbringen möchten, bevor der Computer in den Ruhezustand wechselt
TIMEOUT = 1200 #in Sekunden, ergibt 20 Minuten
Erstellen Sie das Skript, das tatsächlich die harte Arbeit erledigt.
Erstelle eine Datei /usr/local/bin/delayed-hibernation.sh
mit dem Inhalt:
#! / bin / bash
# Skriptname: delayed-hibernation.sh
# Zweck: Auto-Ruhezustand nach einer bestimmten Zeit des Schlafes
# Bearbeiten Sie die Variable `TIMEOUT` in der Datei` $ hibernation_conf`, um die Anzahl der Sekunden für den Ruhezustand festzulegen.
hibernation_lock = '/ var / run / delayed-hibernation.lock'
hibernation_fail = '/ var / run / delayed-hibernation.fail'
hibernation_conf = '/ etc / delayed-hibernation.conf'
# Überprüfen der Konfigurationsdatei
wenn [ ! -f $ hibernation_conf]; dann
echo "Fehlende Konfigurationsdatei ('$ hibernation_conf') wird abgebrochen."
Ausfahrt 1
fi
hibernation_timeout = $ (grep "^ [^ #]" $ hibernation_conf | grep "TIMEOUT =" | awk -F '=' '{print $ 2}' | awk -F '#' '{print $ 1}' | tr -d '[[\ t]]')
if ["$ hibernation_timeout" = ""]; dann
echo "Fehlender 'TIMEOUT'-Parameter in der Konfigurationsdatei (' $ hibernation_conf '), Abbruch."
Ausfahrt 1
elif [[! "$ hibernation_timeout" = ~ ^ [0-9] + $]]; dann
echo "Fehlerhafter 'TIMEOUT'-Parameter (' $ hibernation_timeout ') in Konfigurationsdatei (' $ hibernation_conf '), erwartete Anzahl von Sekunden, Abbruch."
Ausfahrt 1
fi
# Verarbeitet die angegebenen Parameter
if ["$ 2" = "suspend"]; dann
Kurzzeit = $ (Datum +% s)
if ["$ 1" = "pre"]; dann
if [-f $ hibernation_fail]; dann
echo "Der Ruhezustand ist fehlgeschlagen. Der eingestellte RTC-Weck-Timer wird übersprungen."
sonst
echo "Suspend erkannt. Aufnahmezeit, RTC-Timer einstellen"
echo "$ curtime"> $ hibernation_lock
rtcwake -m no -s $ hibernation_timeout
fi
elif ["$ 1" = "post"]; dann
if [-f $ hibernation_fail]; dann
rm $ hibernation_fail
fi
if [-f $ hibernation_lock]; dann
sustime = $ (cat $ hibernation_lock)
rm $ hibernation_lock
if [$ (($ curtime - $ sustime)) -ge $ hibernation_timeout]; dann
echo "Automatisches Fortsetzen nach Suspendieren erkannt. Ruhezustand ..."
Systemctl Ruhezustand
wenn [$? -ne 0]; dann
echo "Der automatische Ruhezustand ist fehlgeschlagen. Stattdessen wurde versucht, den Vorgang anzuhalten."
Berühre $ hibernation_fail
systemctl suspend
wenn [$? -ne 0]; dann
echo "Der automatische Ruhezustand und das Suspend-Failover sind fehlgeschlagen. Es ist nichts anderes zu versuchen."
fi
fi
sonst
echo "Manuelle Fortsetzung nach Unterbrechung erkannt. RTC-Timer löschen"
rtcwake -m deaktivieren
fi
sonst
echo "Datei '$ hibernation_lock' wurde nicht gefunden, nichts zu tun"
fi
sonst
echo "Unbekannter erster Parameter: '$ 1', erwartet 'vor' oder 'nach'"
fi
sonst
echo "Dieses Skript soll von systemctl delayed-hibernation.service ausgeführt werden (erwarteter zweiter Parameter: 'suspend')"
fi
- Machen Sie das Skript ausführbar:
chmod 755 /usr/local/bin/delayed-hibernation.sh
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
sudo systemctl daemon-reload
sudo systemctl enable delayed-hibernation.service
um sicherzustellen, dass neue Dienste / Konfigurationen verwendet werden.
Um das Serviceprotokoll zu überprüfen, können Sie Folgendes verwenden:
sudo systemctl status delayed-hibernation.service
oder für ein vollständiges Protokoll der Dienstnutzung:
sudo journalctl -u verzögert-Ruhezustand
Ein normales Protokoll, das ich vom laufenden Dienst erhalte, lautet:
mile @ mile-ThinkPad: ~ $ sudo systemctl status delayed-hibernation.service
● delayed-hibernation.service - Trigger für verzögerten Ruhezustand
Loaded: loaded (/etc/systemd/system/delayed-hibernation.service; enabled; Herstellervoreinstellung: enabled)
Aktiv: inaktiv (tot)
Jun 09 20:35:42 mile-ThinkPad systemd [1]: Start des Triggers für verzögerten Ruhezustand ...
09. Juni 20:35:42 Meilen-ThinkPad delayed-hibernation.sh [2933]: Unterbrechung erkannt. Aufnahmezeit, RTC-Timer einstellen
Jun 09 20:35:42 mile-ThinkPad delayed-hibernation.sh [2933]: rtcwake: unter der Annahme, dass RTC UTC verwendet ...
09. Juni 20:35:42 mile-ThinkPad delayed-hibernation.sh [2933]: rtcwake: Aufwachen mit / dev / rtc0 am 9. Juni 18:55:43 2016
09. Juni 20:55:44 Meile-ThinkPad-Systemd [1]: Auslöser für verzögerten Ruhezustand gestartet.
09.06. 20:55:44 Meile-ThinkPad-Systemd [1]: Verzögerter Ruhezustand. Service: Gerät wird nicht mehr benötigt. Anhalten.
Jun 09 20:55:44 mile-ThinkPad systemd [1]: Anhalten des Triggers für verzögerten Ruhezustand ...
Jun 09 20:55:44 mile-ThinkPad delayed-hibernation.sh [3093]: Automatisches Fortsetzen nach Suspendieren erkannt. Winterschlaf halten ...
09.06. 20:55:44 Meile-ThinkPad-Systemd [1]: Auslöser für verzögerten Ruhezustand gestoppt.
Meile @ Meile-ThinkPad: ~ $
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.