Ich versuche Strom zu sparen, indem ich Desktops in den Suspend-Modus versetze, wenn sie inaktiv sind. Viele Desktops werden jedoch auch von ihren Eigentümern über SSH angesprochen. Es gibt eine Wakeonlan-Lösung, mit der Besitzer den Computer einschalten können. Das Problem besteht jedoch darin, dass der Computer nach 10 Minuten wieder automatisch angehalten wird, obwohl die SSH-Verbindung aktiv ist.
Ich versuche, die aktiven SSH-Sitzungen in die Definitionen der "Aktivität" aufzunehmen.
Die Frage ist, ob dies über das Setzen einer Polkit-Regel möglich ist. Kann man ein Skript erstellen, das vor dem eigentlichen Suspend ausgeführt wird, und es abbrechen, wenn SSH-Sitzungen gefunden werden? Ich brauche einen sauberen, legitimen Weg, um das zu tun. Wenn nicht, dann sind auch hackige Wege willkommen.
Aktuelle naive Hacky-Lösung: Bearbeiten /usr/sbin/pm-suspend
:
#check for SSH sessions, and prevent suspending:
if [ "$(who | grep -cv "(:")" -gt 0 ]; then
echo "SSH session(s) are on. Not suspending."
exit 1
fi
Dies dient dem Zweck. Ich weiß aber nicht, wann ein Update die Datei überschreibt /usr/sbin/pm-suspend
. Ich weiß auch nicht, wie das mit anderen Suspend-Implementierungen wie tuxonice funktioniert.
quelle
grep -cv :0
anstatt durch zu gehenwc
?[
wenn Sie schreibenif who | grep -qv :0; then
(vorausgesetzt, Sie haben ein POSIX-konformesgrep
Format wie GNU grep).Antworten:
Bis Ubuntu 14.10 (Upstart-basiert)
Schauen Sie sich den Abschnitt „DATEIEN“ an
pm-action(8)
und suchen Sie danach/etc/pm/sleep.d
. Wenn eines dieser Skripte mit einem Exit-Status ungleich Null zurückgegeben wird, wird die Suspendierung verhindert.Aktualisierte Anweisungen zur Klarheit:
Also erstelle eine Datei
/etc/pm/sleep.d/05_ssh_keepawake
.Setzen Sie ein shebang (
#!/bin/sh
) und den in der Frage genannten Code in diese Datei.Legen Sie die Ausführungsberechtigungen fest:
Seit Ubuntu 15.04 (systemd-basiert)
systemd verwendet keine pm-utils zur Verwaltung seiner Stromversorgungs-Hooks, sondern verfügt über eine eigene Infrastruktur. Schlafhemmungsprüfungen werden nicht mehr im Schlafmodus ausgeführt, sondern müssen durch die Aktion festgelegt werden, die den Schlafmodus hemmt (siehe 1 ).
Als solches müssten Sie dem Anmelden und Abmelden in der SSH-Sitzung Befehle hinzufügen, die einen Schlaf-Inhibitor bei systemd registrieren (z. B. über
systemd-inhibit(1)
) und den Inhibitor später freigeben. Wenn jemand weiß, wie man sich in SSH einloggt und ausloggt, würde ich einen Kommentar oder eine Bearbeitung begrüßen, damit wir die relevanten Schritte und Befehle ausarbeiten können.Der folgende Abschnitt ist in Arbeit - Verwenden Sie ihn nur, wenn Sie wissen, was Sie tun!
Möglicherweise können Sie eine systemd-Einheit schreiben
/etc/systemd/system/ssh-inhibt-sleep.service
, die sich selbst zur Abhängigkeit von dersleep.target
Verwendung derRequiredBy
Option macht. Wenn Ihr neues Gerät ausfällt (mit einem Nicht-Null-Ausgangsstatus aus dem aufgerufenen Prozess), wird es einesleep.target
Aktion ausführen und damit die nachfolgende Aktion für den Ruhezustand.Wie immer müssen Sie systemd units aktivieren, damit sie wirksam werden:
Weitere Infos unter
systemd.unit(5)
undsystemd.service(5)
.quelle