Czy to możliwe, aby Ubuntu przeszło w stan hibernacji z Suspend, czyli „Suspend Sedation”?
To, czego szukam, to:
kiedy zamykam pokrywę, laptop przechodzi w tryb zawieszenia. Następnie, po określonym czasie (nawet jeśli bateria się rozładowuje), jeśli nadal go nie używam, powinien przełączyć się w stan hibernacji, aby oszczędzać energię baterii.
Na przykład, mój laptop jest skonfigurowany do zawieszenia, gdy zamknę pokrywę. Jeśli wtedy nie używam go przez cały dzień, bateria się rozładowuje, ponieważ nawet w trybie zawieszenia sprzęt nadal zużywa niewielką ilość energii, a bateria ostatecznie się rozładowuje. Chcę, aby móc powiedzieć Ubuntu, że nawet jeśli jest zawieszone, nadal musi przejść w stan hibernacji po kilku godzinach bezczynności.
Windows może to zrobić. Ubuntu można zaprogramować tak, aby przechodziło w tryb gotowości lub hibernacji w trybie timera, ale nie w obu przypadkach.
źródło
Odpowiedzi:
W Ubuntu 18.04 jest o wiele łatwiej. W systemd dostępny jest nowy tryb wstrzymania, a następnie hibernacji . Aby rozpocząć korzystanie z tej funkcji, musisz utworzyć plik /etc/systemd/sleep.conf z następną zawartością:
Następnie możesz to przetestować za pomocą polecenia:
możesz edytować,
HibernateDelaySec
aby zmniejszyć opóźnienie do hibernacji.Jeśli wszystko działa poprawnie, możesz zmienić akcję Zamknij pokrywkę, aby to zrobić, musisz edytować plik /etc/systemd/logind.conf
Musisz znaleźć opcję
HandleLidSwitch=
, odkomentować ją i zmienić naHandleLidSwitch=suspend-then-hibernate
. Następnie musisz zrestartować usługę logd systemd (ostrzeżenie! Sesja użytkownika zostanie zrestartowana) za pomocą następnego polecenia:To wszystko! Teraz możesz użyć tej ładnej funkcji.
źródło
Rozwiązanie tego jest proste. Po pierwsze, po zawieszeniu i wznowieniu program PM-suspend wykonuje serię skryptów w
/etc/pm/sleep.d
i/usr/lib/pm-utils/sleep.d
. Więc moim rozwiązaniem jest dodanie skryptu, który wykonuje następujące czynności:Oto skrypt, który to robi. Nazwij go
0000rtchibernate
i umieść w/etc/pm/sleep.d
katalogu (0000 jest ważne, aby skrypt był wykonywany najpierw po zawieszeniu, a ostatni po wznowieniu).Mam nadzieję, że ten kod pojawia się na tym forum (jest to mój pierwszy post tutaj).
Edytuj wartość limitu czasu
autohibernate=7200
u góry, bez względu na to, ile sekund będziesz spać przed przejściem w stan hibernacji. Obecna wartość powyżej wynosi 2 godziny. Pamiętaj, że Twój laptop obudzi się w tym czasie na kilka sekund, podczas gdy wykonuje funkcję hibernacji.Jeśli więc planujesz umieścić laptopa w etui, nie zawieszaj go, ale zamiast tego hibernuj. W przeciwnym razie laptop może się przegrzać w esp. jeśli jest w ciasno przylegającym futerale (chociaż będzie włączony tylko przez kilka sekund do minuty).
Używam tej metody przez ostatnie kilka dni, jak dotąd była skuteczna (i uratowała mnie przed wyczerpaniem baterii tego popołudnia). Cieszyć się.
W przypadku innych dystrybucji Linuksa, które używają
systemd
i nowszych wersjach Ubuntu to powinien nadal działać, jeśli umieścić skrypt w/usr/lib/systemd/system-sleep
zamiast/etc/pm/sleep.d
. Również zamień/usr/sbin/pm-hibernate
polecenie nasystemctl hibernate
.źródło
Aby wyjaśnić, jak to działa (jest to podobne do systemu Windows) w prostych słowach: maszyna nie budzi się ze stanu gotowości, gdy bateria się rozładuje, aby móc zapisać stan maszyny na partycji wymiany, natychmiast zapisuje wszystko na partycji wymiany w trybie gotowości, a kiedy bateria się wyczerpie, odzyska energię po załadowaniu stanu z partycji wymiany (tak jak w przypadku hibernacji).
AFAIK linux będzie / powinien używać hybrydowego trybu gotowości / hibernacji zamiast „normalnego” trybu gotowości, jeśli wie, że działa na twoim sprzęcie. Możliwe jest również, że jest to obecnie wyłączone z powodu zbyt wielu błędów lub czegoś takiego;)
Jeśli lubisz eksperymentować, być może zobaczysz, czy możesz uzyskać dobre wyniki dzięki PM-Suspend-Hybrid .
Jeśli poniższe informacje mówią, że masz szczęście, to teoretycznie w systemie obsługiwane jest zawieszenie hybrydowe:
źródło
Możesz być zainteresowany s2both . Jest dostarczany przez pakiet
uswsusp
w Ubuntu 10.10. Zawiesza się na dysku, ale zamiast zamykać system zamiast tego umieszcza go w S3, co jest trybem zasilania zwykle kojarzonym z opcją „Zawieś” w Ubuntu. pm-suspend-hybrid to kolejne narzędzie, które rzekomo robi to samo.Aby to zautomatyzować przy zamykaniu pokrywy, zapoznaj się z poniższym przewodnikiem, który pozwala uruchomić dowolny skrypt po wykryciu zdarzenia blokady:
http://ubuntuforums.org/showthread.php?t=1076486
Jeśli zdarzy ci się mieć ThinkPada, strona podręcznika użytkownika
tpctl
zawiera odwołanie do argumentu--pm-sedation-hibernate-from-suspend-timer
, który wydaje się zapewniać funkcję, której szukasz. Ostrzegam cię przed wypróbowaniem tego na sprzęcie innym niż ThinkPad.Dla porównania, przejrzałem stronę podręcznika dla hibernacji.conf ; wydawało się, że nie ma żadnych istotnych opcji, ale może być warte drugiego czytania.
źródło
Ubuntu 16.04 - od zawieszenia / uśpienia do hibernacji po określonym czasie
Wygląda na to, że w Ubuntu 16.04 sprawy wyglądają trochę inaczej, więc kroki, które podjąłem, aby działały, to:
Upewnij się, że hibernacja działa zgodnie z oczekiwaniami podczas uruchamiania
Skopiuj oryginalny
suspend.target
plik:Następnie edytuj plik
/etc/systemd/system/suspend.target
i dodaj wiersz:do
[Unit]
sekcji tego pliku.Utwórz plik
/etc/systemd/system/delayed-hibernation.service
o następującej treści:/etc/delayed-hibernation.conf
skryptu o następującej treści:Utwórz skrypt, który faktycznie wykona ciężką pracę.
Utwórz plik
/usr/local/bin/delayed-hibernation.sh
z zawartością:Sporo czasu zajęło mi napisanie tego skryptu na podstawie innych odpowiedzi w tym wątku. Rzeczy, które znalazłem w Internecie, takie jak https://bbs.archlinux.org/viewtopic.php?pid=1554259
Moja wersja skryptu próbuje poradzić sobie z wieloma problemami, takimi jak ponowne zawieszenie, jeśli hibernacja nie powiodła się, ale nie budzę się ponownie po określonym czasie w kółko.
Zakładam, że ostatnim krokiem byłoby po prostu wykonanie
aby upewnić się, że używane są nowe usługi / konfiguracje.
Aby sprawdzić dziennik usług, możesz użyć:
lub dla pełnego dziennika korzystania z usługi:
Normalny dziennik, który otrzymuję z uruchomionej usługi, to:
Więc to by było na tyle, mam nadzieję, że to naprawdę komuś pomaga, ponieważ spędziłem dni próbując znaleźć odpowiednią kombinację konfiguracji i wersji skryptu, aby ta przydatna funkcja działała.
źródło
/bin/systemctl hibernate
zawsze zwróciłoby 1 podczas działania w skrypcie systemd, nawet jeśli działa dobrze w wierszu poleceń.Na wypadek, gdyby coś poszło nie
pm-hibernate
tak, wolę zawiesić komputer niż pozwolić mu działać. Możesz więc użyć:źródło
Oto zaktualizowana wersja odpowiedzi Dereka Pressnalla, która działa z systemd i zawiera sugestię Eliasza Kagana , po prostu upuść ją w /usr/lib/systemd/system-sleep/delayed_hibernation.sh i uczyń ją wykonywalną:
źródło
Oto mój przepis (przetestowałem go na dwóch notebookach Ubuntu 16.04):
Umieść ten skrypt gdziekolwiek chcesz (ustawiam go na rootowanie
/syspend.sh
) i uczyń go wykonywalnym (chmod +x /suspend.sh
)Następnie utwórz systemowy cel:
# touch /etc/systemd/system/suspend-to-sleep.target
wklej tę treść:Następnie włącz to
# systemctl enable suspend-to-sleep.target
.Mam problem z jednym z notebooków: zamknięcie pokrywy nie uruchomiło tego celu. Stało się tak dzięki xfce4-power-manager. Istnieją dwa sposoby obejścia tego problemu. Pierwszym z nich jest edycja
/etc/systemd/logind.conf
pliku i zastąpienieHandleLidSwitch=ignore
goHandleLidSwitch=suspend
. Ale będzie miało charakter ogólnosystemowy, więc właśnie dodałem dowiązanie symboliczne do mojego skryptu# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
źródło
Kolejne bardziej powszechne obejście, którego można użyć
hybrid-sleep
(podobnie jak Mac OS). Jeśli twój komputer obsługuje hibernację, możesz użyć tej funkcji:To polecenie powinno zawiesić i wysłać na dysk (hibernację) komputer. Po pewnym czasie komputer wyłączy się (po włączeniu użyje plików hibernacji, aby się obudzić).
ps: Wiem, że nie jest to dokładnie to, co opublikował PO, ale jest dość blisko
źródło
Nie zapomnij chmod + x tego pliku, aby był wykonywalny.
Istnieje inne rozwiązanie bez rtcwake, używając wakealarm w / sys / class / rtc / rtc0. Używaj przestarzałego kodu w funkcjach pm (/ usr / lib / pm-utils) po komentarzach #, ponieważ jądro nie obsługuje bezpośrednio ..., (ponieważ obecne jądro (po 3.6 coś) bezpośrednio obsługuje). Cofnij ten kod i wstaw część do_suspend () zamiast do_suspend_hybrid ().
Przestarzały kod (wstrzymaj, a następnie hibernuj, gdy wywołane zostanie zawieszenie_hybryd):
Zalecana. Jeszcze łatwiejszy w użyciu uswsusp, jednocześnie maksymalizując korzyści z s2both, tj. S2both po zawieszeniu. Umieść odwrócony kod w części do_suspend () modułu uswsusp (/usr/lib/pm-utils/module.d).
Cofnięty kod (suspend_hybrid po wywołaniu zawieszenia):
Za pomocą uswsusp możemy zobaczyć postęp zawieszenia / hibernacji i proces odwrotny wyświetlany w tekście, nawet możemy go przerwać, naciskając klawisz Backspace. Bez uswsusp, zawieszanie / hibernacja po prostu pojawiają się - znikają irytujące, szczególnie gdy wakealarm jest uruchamiany i wykonuje hibernację (s2disk w uswsusp). Ustaw czas snu przed hibernacją w zwykłym miejscu w pliku funkcji pm.
Oto mod uswsusp: (pamiętaj, ten moduł jest wywoływany z funkcji pm, więc wstawiane zmienne są takie same)
źródło