Automatycznie wybudzanie z hibernacji – budzik 18


alarm-clockWyłączenie komputera o zadanej godzinie lub po określonym czasie to żadna sztuka. Ale czemu komputer nie miałby uruchamiać się o ustalonej porze, budzić nas ulubioną piosenką i wykonać inne zadania np. uruchomić klienta pocztowego? Da się zrobić! Z pomocą przychodzi program rtcwake, który uśpi, zahibernuje lub wyłączy system na tak długo, ile zostanie mu wskazane.

Program rtcwake jest częścią pakietu util-linux i powinien być obecny w systemie bez dodatkowej konfiguracji.

Najprostszy sposób aby przetestować jego działanie:

sudo rtcwake -u -s 60 -m mem

To powinno wprowadzić komputer w stan uśpienia na 60 sekund.

Ważnym parametrem jest -m, który w powyższym poleceniu przyjął wartość mem. Możliwy jest wybór spośród kilku opcji (fragment podręcznika man opisujący parametr -m, przetłumaczony na j. polski):

standby
Stan ACPI S1. Ten stan zapewnia minimalne, ale odczuwalne oszczędności energii a jednocześnie zapewnia niewielkie opóźnienie przy powrocie do działającego systemu. Jest to domyślny tryb.

mem
Stan ACPI S3 (Suspend-to-RAM, odpowiednik opcji wstrzymanie w menu systemowym). Ten stan zapewnia znaczne oszczędności energii, ponieważ wszystkie urządzenia w komputerze ustawiane są w tryb niskiego poboru prądu, z wyjątkiem pamięci RAM, która wymaga zasilania, aby przechować wszystkie informacje do czasu wybudzenia.

disk
Stan ACPI S4 (Suspend-to-disk, odpowiednik opcji hibernacja w menu systemowym). Ten stan zapewnia największe oszczędności energii i może być użyty nawet, gdy brakuje niskopoziomowego wsparcia zarządzania zasilaniem*. Ten stan działa podobnie do Suspend-to-RAM z tym wyjątkiem, że zawiera dodatkowy krok – zapis pamięci RAM na dysk twardy (dzięki czemu pamięć RAM nie wymaga zasilania).
* – od redakcji: niestety nie wszyscy producenci sprzętu prawidłowo implementują obsługę hibernacji w systemach Linuksowych i warto mieć to na uwadze; nie bez przyczyny w Ubuntu 12.04 opcja hibernacji jest domyślnie ukryta.

off
Stan ACPI S5 (Poweroff, odpowiednik opcji wyłącz w menu systemowym). Działanie tej opcji polega na wywołaniu ‚/sbin/shutdown’. Nie jest to oficjalnie wspierana funkcja ACPI, ale zazwyczaj działa.

no
Nie usypia. Program rtcwake jedynie ustawia czas wybudzenia.

on
Nie usypia. Zamiast tego odczytuje dane z urządzenia RTC do momentu aż pojawi się sygnał alarmu. Przydatne do debugowania.

Usypianie do określonego czasu (budzenie)

Do uzyskania tego efektu posłużymy się prostym skryptem, nazwijmy go „suspend_until”.

#!/bin/bash

# Auto suspend and wake-up script
#
# Puts the computer on standby and automatically wakes it up at specified time
#
# Written by Romke van der Meulen
# Minor mods fossfreedom for AskUbuntu
# Minor mods mario_7 - using -s instad of -t
#
# Takes a 24hour time HH:MM as its argument
# Example:
# suspend_until 9:30
# suspend_until 18:45

# ------------------------------------------------------
# Argument check
if [ $# -lt 1 ]; then
echo "Usage: suspend_until HH:MM"
exit
fi

# Check whether specified time today or tomorrow
DESIRED=$((`date +%s -d "$1"` - `date +%s`))
if [ $DESIRED -lt 0 ]; then
DESIRED=$((DESIRED + 24*60*60))
fi

# Kill rtcwake if already running
sudo killall rtcwake

# Set RTC wakeup time
# N.B. change "mem" for the suspend option
# find this by "man rtcwake"
sudo rtcwake -l -m mem -s $DESIRED &

# feedback
echo "Suspending..."

# give rtcwake some time to make its stuff
sleep 2

# then suspend
# N.B. dont usually require this bit
#sudo pm-suspend

# Any commands you want to launch after wakeup can be placed here
# Remember: sudo may have expired by now

# Wake up with monitor enabled N.B. change "on" for "off" if
# you want the monitor to be disabled on wake
xset dpms force on

# and a fresh console
clear
echo "Good morning!"

Aby skrypt działał musimy mu nadać odpowiednie uprawnienia.

chmod +x suspend_until

Teraz wystarczy w konsoli wydać polecenie.

sudo ./suspend_until 07:30

Komputer obudzi się o 07:30, wyczyści konsolę i przywita się z nami. Żeby uruchomić klienta pocztowego, stronę www lub dowolną inną aplikację wystarczy dodać na końcu skryptu stosowne polecenie, np. „firefox http://gmail.com”.

Aktualizacja 27-05-2012: zmieniona wersja skryptu, gdyż ta oryginalna miewała problemy z określaniem prawidłowych godzin wybudzania na niektórych komputerach.

Źródło: Automatically sleep and wake-up at specific times

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

18 komentarzy do “Automatycznie wybudzanie z hibernacji – budzik

  • PL_kolek

    Ciekawy trik, komputer z muzyką jako budzik. Fajne!

    Migo, a coś wypisał Ci coś do terminala po wpisaniu: sudo ./suspend_until 07:30?

  • lukas

    Fajnie, ale to jest Linux 😉 Gdyby nie to, że testuje elementaryOS Luna, to dziś po wpisaniu uptime miałbym pewnie z dobre 6 miesięcy na Ubu 10.04.4 ;D

  • Migo

    Konsola wyświetla mi takie coś:

    rtcwake: nie znaleziono żadnego procesu
    Suspending…
    rtcwake: wakeup from „mem” using /dev/rtc0 at Sat May 26 01:04:02 2012
    Dzień dobry!

    Komputer się nie budzi a polecenie było takie:

    :~/Pulpit$ sudo ./suspend_until 23:04

  • Ciej

    Ponieważ jestem nowy w tym systemie i jeszcze nie do końca rozumiem jego zasad chciałbym zadać pytanie.
    Jak w tym skrypcie dodać kilka po sobie uruchamiających się programów? Po dopisaniu w pliku:

    banshee –play-enqueued Muzyka
    google-chrome https://mail.google.com

    Wszystko zatrzymuje mi się na banshee, która musi być wyłączona by wszystko ruszyło dalej. Dlaczego tak jest i jak to „naprawić”?

  • p3jot

    Witam.

    Mam mały problem jako niedoświadczony użytkownik. Zrobiłem wszystko krok po kroku i po wpisaniu

    sudo ./suspend_until 07:30

    w konsoli otrzymuje komunikat

    sudo: ./suspend_until: nie znaleziono polecenia

    Może ktoś powiedzieć co jest nie tak ? Plik jest na pulpicie

  • mario_7

    p3jot, pewnie zapomniałeś przejść do katalogu Pulpit zanim zacząłeś wydawać kolejne polecenia, zatem:
    cd ~/Pulpit
    chmod +x suspend_until
    sudo ./suspend_until 07:30

  • Staszek

    Witam
    zeby dzialao bez wpisywani hasla mozna w pliku sudoers w linijce admin zmienic na
    %admin ALL=(ALL) NOPASSWD: ALL
    i wtedy nigdy juz nie tzreba wpisywac hasla przy wpisywaniu sudo przy instalacjach i innych czynnosciach wymagajacych polecenia sudo
    plik znajduje sie w katalogu ETC w katalogu glownym mzoan go otworzyc jako administrator ,nautilus ma taka opcje mzona tez edytowac pzrez nano czy visudo to tylko kwestia jak kto woli ja robie to pprzez gedit jako administrator ,tzreba tylko uwazac zeby bledu skaldni w tym pliku nie zrobic bo hmm moze sie okazac ze nie mzoemy uzyc polecenia sudo wtedy jest troche zabawy bo trudno zalogowac sie wkonsoli jako root zeby cokolwiek zmienic ale i an to jest rada 🙂
    u mnie dzial bez zarzutu bez poprawek ,standartow konsola otwera sie w aktalogu domowym wiec najlepiej plik twozryc wtym katalogu i nie ma problemu
    Pozdrawiam i dzieki 🙂

    • mario_7

      Wypadałoby dodać, że ta porada jest też olbrzymią luką w bezpieczeństwie i nie powinna być stosowana. Wyłączenie pytania o hasło podczas używania sudo oznacza dobrowolne proszenie się o problemy i to z byle powodu. W sytuacji, gdy nie pojawia się pytanie o hasło dowolna aplikacja lub skrypt mogą wykonywać kod na prawach administratora bez wiedzy użytkownika – o tym, że to źle chyba nie muszę przekonywać. Zdecydowanie odradzam stosowanie tego typu „ułatwień”, bo traci się kontrolę nad tym co dzieje się w systemie. Bezpieczeństwo systemów opartych na Linuksie to między innymi przestrzeganie zasady, że użytkownik powinien mieć tylko tyle uprawnień ile jest mu potrzebne do normalnego działania oraz że działania ingerujące w system powinny być wykonywane przez administratora (lub użytkownika, który po podaniu hasła może chwilowo nabyć jego uprawnienia).

  • Staszek

    ja osobiscie mam wylaczone pytanie o haslo i nie mam jak do tej pory zadnych problemow , pytanie o haslo czesto utrudnia wiele spraw ale istniej tez mozliowsc wylazcenia pytanai dal konkrtenych polecen np shutdown mozna wykluczyc w pliku sudoers pytanie dale shutdown inczej trudno byloby uzyc skrotu do wylaczenia czy resetu , pytanei o haslo maj sens w esiciach lokalnych z wieloma uzytkownikami i komputerami ejzli ktos uzywa sam jednego kompa nie wizde problemu a intruzow zawsze mzoan odkryc i namierzyc jest wele do tego programow w arzie problemow mozan ich uzyc jak do tej pory nie malem zadnego wlamu ani problemow zpwodu wylaczonego hasla kazdy robi jak uwaza nie wizde powduzebym sam siebei ogarniczal wimei pzornego bezpiecznstwa bo jezli jaksi wlmywacz trafi domnie to i moje hsal w tym nic nie pomoga bo tozadna qwielaksztuka lamac hasla