Próbuję oszczędzać energię, przełączając komputery stacjonarne w tryb zawieszenia, gdy są nieaktywne. Ale do wielu komputerów stacjonarnych ma również dostęp przez SSH ich właścicieli. Wdrożono rozwiązanie Wakeonlan, aby umożliwić właścicielom włączenie komputera, ale problem polega na tym, że komputery automatycznie zawieszą się ponownie za 10 minut, nawet jeśli połączenie SSH jest włączone.
Staram się zawrzeć aktywne sesje SSH w definicjach „aktywności”.
Pytanie, czy można to zrobić, ustawiając regułę polkit? Czy można to zrobić, umieszczając skrypt działający przed rzeczywistym zawieszeniem i przerywający go, jeśli zostaną znalezione sesje SSH? Potrzebuję czystego, legalnego sposobu na zrobienie tego. Jeśli nie to, mile widziane są również metody hakerskie.
Obecne naiwne hacky rozwiązanie: edytuj /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
Służy to celowi. Ale nie wiem, kiedy aktualizacja zastąpi plik /usr/sbin/pm-suspend
. Nie wiem też, jak to będzie działać z innymi implementacjami zawieszenia, takimi jak smoking.
źródło
grep -cv :0
zamiast przejściawc
?[
jeśli piszeszif who | grep -qv :0; then
(zakładając, że masz POSIX zgodny zgrep
GNU grep).Odpowiedzi:
Do Ubuntu 14.10 (w oparciu o Upstart)
Zajrzyj
pm-action(8)
i wyszukaj/etc/pm/sleep.d
w dziale „PLIKI”. Jeśli jeden z tych skryptów powróci z niezerowym statusem wyjścia, zawieszenie jest niemożliwe.Zaktualizowane instrukcje dla przejrzystości:
Utwórz plik
/etc/pm/sleep.d/05_ssh_keepawake
.Wpisz shebang (
#!/bin/sh
) i kod wymieniony w pytaniu w tym pliku.Ustaw uprawnienia do wykonywania na nim:
Od wersji Ubuntu 15.04 (systemowa)
systemd nie używa pm-utils do zarządzania przechwytami stanu zasilania, ale ma własną infrastrukturę do tego samego celu. Kontrolery wstrzymujące sen nie są już wykonywane podczas snu, ale muszą być ustawione przez działanie, które hamuje sen (patrz 1 ).
W związku z tym musisz dodać polecenia do sesji logowania SSH i wylogowania, które rejestruje inhibitor snu w systemd (np. Via
systemd-inhibit(1)
), a następnie zwalnia inhibitor. Jeśli ktoś wie, jak podłączyć się do logowania i wylogowania z SSH, powitałbym komentarz lub edycję, abyśmy mogli opracować odpowiednie kroki i polecenia.Poniższa sekcja jest w toku - używaj jej tylko wtedy, gdy wiesz, co robisz!
Możesz być w stanie napisać jednostkę systemową,
/etc/systemd/system/ssh-inhibt-sleep.service
która uzależnia się odsleep.target
korzystania zRequiredBy
opcji. Jeśli twoja nowa jednostka ulegnie awarii (z niezerowym statusem wyjścia z wywołanego procesu), wykona ona,sleep.target
a tym samym kolejne działanie uśpienia.Jak zawsze musisz aktywować systemowe jednostki, aby zaczęły działać:
Aby uzyskać więcej informacji, zobacz
systemd.unit(5)
isystemd.service(5)
.źródło