Hlavní navigace

Ukolébavka pro tučňáka aneb uspáváme notebook

1. 10. 2008
Doba čtení: 6 minut

Sdílet

Čím dál více uživatelů dnes při nákupech sáhne raději po notebooku než po tradičním stolním počítači. Důvodem je především vysoká flexibilita a mobilita takového řešení. Vše se navíc ještě zjednoduší, pokud místo tradičního vypínání počítač hibernujeme neboli uspíme. Jak funguje usínání v Linuxu?

Je jasné, že většina dnešních „desktopových“ distribucí, jakými jsou například Ubuntu, Mandriva, OpenSUSE či Fedora, dnes možností usínání disponuje automaticky. Patříte-li ale mezi uživatele jiného typu systému či vás jen zajímá, jak je vlastně usínání v Linuxu zařízeno, může se vám tento návod, nebo chcete-li informační článek, hodit.

Jak vlastně usnout?

Obecně je u notebooků (a nejen u nich) rozlišováno mezi dvěma různými způsoby usínání. Ty se označují jako:

  • suspend to RAM – usínání do paměti
  • suspend to disk – usínání na disk

Ačkoliv se v principu jedná o dvě velmi podobné věci, každá z nich má svá specifika a rozdílné výhody a nevýhody. V principu jde samozřejmě o částečné odstavení operačního systému a všech jeho součástí do takového stavu, abychom posléze mohli hardware vypnout a poté (což je zásadní) jej zase kdykoliv „probudit“ a pokračovat v rozdělané práci.

Zásadních výhod je přitom několik: jednak je to rychlost probuzení, která je výrazně rychlejší než v případě klasického bootu „od nuly“, a především se po zapnutí dostaneme přesně do původního stavu – hudba hraje, prohlížeč má otevřené všechny panely i se stránkami, textový editor zůstal otevřený na naší poslední stránce a podobně.

V každém případě je potřeba, aby na celém procesu spolupracoval jak operační systém, tak i hardware. Jedině v tom případě jsme schopni zajistit, že se vše provede bez úhony na našem systému (a software a datech…). Naštěstí zde dnes již příliš často problémy nebývají – existuje totiž standardní komunikační rozhraní mezi hardwarovou a softwarovou vrstvou, které komunikaci obou stran výrazně usnadňuje. Toto rozhraní se nazývá ACPI – Advanced Configuration and Power Interface.

RAM nebo disk?

Jak jsem již řekl, je potřeba před samotným vypnutím počítače šikovně „odklidit“ obsah paměti, která by jako jediná nepřežila odstávku energie. Později ji pak musíme bez poškození obnovit a systém zase spustit.

V případě uložení na disk je paměť vysypána na disk, kde je bezpečně zapsána a uložena k dalšímu vyzvednutí. Výhoda tohoto řešení je jasná: počítač je vypnut zcela a nekonzumuje tak žádnou energii. Je možno z něj tak bez problémů třeba vyjmout baterii. Nevýhodou naopak je, že uspání je relativně pomalé, protože je potřeba vše zapsat na disk. U dnešních pamětí v řádech gigabajtů se nemusí jednat o nijak rychlou akci.

Systém se samozřejmě snaží vše urychlit tím, že „zahazuje data“, která se dají najít jinde, například cache a podobně. Při startu systému se normálně načte jádro, které pak pozná, že na disku je uložen stav předchozího běhu, ten načte a „spustí“. S tím, že se vyhazují cache a jiné „nepotřebné“ stránky, však bohužel také dochází k tomu, že se systém po probuzení chová poněkud pomaleji, než jsme zvyklí. To do chvíle, než se mu podaří postupně vše opět načíst.

Proti tomu uspání do paměti je velmi rychlé, stejně jako probouzení. Vše probíhá téměř okamžitě a uživatel není zbytečně zdržován. Vlastně se jen systému oznámí, ať se připraví na uspání a vypne se vše, kromě malé části elektroniky, zahrnující pochopitelně i paměti.

Nevýhoda plyne z podstaty věci: je třeba stále alespoň té trochy energie, aby se paměti udržely. To ale obvykle nebývá problém, pokud právě nehodláme například vyjmout a vyměnit baterii. Musíme však počítat s tím, že pokud počítač necháme delší dobu v tomto stavu bez přísunu energie, může se baterie vybít. Obvykle by dnešní notebooky měly vydržet hibernované několik dní. Viděl jsem ale několik strojů, které takto nevydržely ani 24 hodin. Není však nic snazšího než počítač po pár hodinách pokusně probudit a zkontrolovat stav jeho baterie.

Jdeme na to!

Dříve byly jednotlivé režimy spánku označovány čísly. To už naštěstí neplatí a vše je proto přímočařejší. Pokud máte jádro přeložené s podporou ACPI a usínáním na disk, mělo by vše fungovat. Například v Debianu je vše připraveno k použití. Stav vaší distribuce ověříte jednoduše:

$ cat /sys/power/state
mem disk

Skrze tento virtuální soubor vám jádro sděluje, jaké má aktuálně možnosti hibernace. V tomto případě je k dispozici jak uložení na disk, tak i přímé uspání v paměti. Je možné, že vaše jádro podporu uspání do paměti neohlásí. Pak je tu několik možností: nemáte podporu zapnutou (zkontrolujte volbu ACPI_SLEEP) nebo váš konkrétní notebook není podporován. Doporučuji zkontrolovat web projektu ACPI.

V případě, že je vše v pořádku, můžete rovnou jako root zadat:

# echo -n mem > /sys/power/state

Počítač by měl okamžitě zhasnout a usnout. Poznáte to tak, že se přestane točit disk, případně ventilátor. Můj Dell navíc začne spánek efektně ohlašovat tím, že jeho LED dioda označující běh začne pomalu „tepat“. Podobně se chovají i notebooky Apple.

Pro probuzení stačí stisknout zapínací tlačítko a vše se opět rozeběhne.

Automaticky by to nešlo?

Pokud jste si vyzkoušeli tuto funkci „nasucho“, můžete přikročit k automatizaci celého procesu. Pravděpodobně vám bude milejší, když k uspání prostě jen zaklapnete víko počítače. Budeme tedy potřebovat něco, co dokáže na podobnou akci zareagovat a spustit námi zvolený „skript“.

Přesně k tomu je určen démon acpid, který komunikuje s hardwarovým rozhraním ACPI a dostává od něj informace o událostech: bylo stisknuto vypínací tlačítko, víko se zavřelo a podobně. Démona stačí nakonfigurovat tak, aby výše zmíněný příkaz provedl ve správnou chvíli.

Pro konfiguraci démona slouží adresář /etc/acpi, ze kterého nás zajímá především podadresář events, čili události. Právě v něm jsou umístěny údaje o tom, co se kdy má stát. Pokud vám tento podadresář chybí, normálně jej založte.

V něm jsou pak umístěny soubory nazvané podle jednotlivých událostí: powerbtn pro stisk tlačítka a především lid pro akci zavření víka. Opět: pokud soubor nemáte, můžete jej vytvořit. Do souboru pak zapište následující dva jednoduché řádky:

event=button[ /]lid.*
action=/etc/acpi/lid.sh

Tím jednoduše démona informujeme o tom, že při akci zavření víka bude spuštěn skript lid.sh v uvedené cestě. Do tohoto skriptu pak stačí umístit náš oblíbený řádek:

$ cat /etc/acpi/lid.sh
echo -n mem > /sys/power/state

Po zapsání této konfigurace ještě nezapomeňte démona restartovat, aby si „uvědomil“, že má hlídat nové akce. To je vše. Nyní by se po zavření víka měl váš notebook okamžitě uspat. U mě usnutí i probuzení proběhne přibližně během tří sekund, je tedy okamžité.

Bezpečnost?

Stinnou stránkou tohoto postupu (usínání obecně) je zhoršení bezpečnostní situace, pokud šifrujete disk. Při klasickém vypnutí se totiž šifrovaný disk odpojí a je zcela chráněn. Během usínání ale není možné odpojit domovský svazek, protože jej aplikace využívají a ty samozřejmě o usnutí nemají ani ponětí. Systém jim proto nemůže vzít data „zpod rukou“.

CS24_early

Je tedy žádoucí, abyste před usnutím uzamkli displej, aby se nezvaný host nedostal snadno k datům. V každém případě klíče jsou po probuzení stále v paměti a zamčená obrazovka bude jedinou překážkou, která dělí útočníka od vašich dat.

Pochopitelně by bylo možno poměrně snadno dotvořit řešení, při kterém by se šifrovaná část vašeho domovského adresáře během usínání odpojila (ve skriptu lid.sh), což ale vyžaduje uzavření všech aplikací, které data využívají. Je tedy jen na vás, jak vše rozvrhnete a připravíte a zda zvolíte naprosté pohodlí nebo z něj slevíte ve prospěch bezpečnosti dat.

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.