Portál AbcLinuxu, 2. května 2025 18:48
Jak uspat notebook vám poradí návod, který obsahuje popis nastavení jádra, ACPI a dalších nástrojů nutných k úspěšnému zprovoznění hibernace.
Hibernácia v Linuxe je oblasť ešte nie úplne prebádaná, potýkajúca sa s množstvom problémov. Medzi najväčšie úskalia patria grafické karty, ktoré nie vždy najlepšie spolupracujú. Základným kameňom pre nás bude ACPI (Advanced Configuration and Power Interface) a software suspend zo stránky (www.suspend2.net). ACPI bolo vyvinuté firmami ako HP, Intel, Microsoft, Phoenix a Toshiba. V súčasnosti ide de facto o štandard v oblasti riadenia spotreby. V Linuxe má ACPI slušnú podporu, tak prečo to nevyužiť. K software suspend dodám len toľko, že zvyčajne funguje lepšie, ako software suspend zahrnutý priamo vo vanilla jadre. V našom článku si samozrejme ukážame niekoľko trikov a tipov, ako sa horeuvedeným problémom vyhnúť. Tak, a už stačilo suchej teórie, môžeme sa pustiť do práce.
/usr/src/linux
./usr/src/patch/suspend
./usr/src/linux
./usr/src/patch/suspend/apply
aplikujeme patch na
jadro./usr/src/patch/suspend/unapply
.Po úspešnom "opatchovaní" jadra musíme v ďalšom kroku postupne povoliť v jadre všetky potrebné položky, ako je náš suspend, riadenie spotreby ACPI...
Pre povolenie suspend musíme zadať v jadre nasledujúce:
Power management support -> Suspend2
Pre povolenie riadenia spotreby ACPI musíme zadať v jadre nasledujúce:
Power management support -> ACPI support
Ako môžeme vidieť, je značnou výhodou, že ACPI má preddefinovanú extra podporu pre vybrané značky notebookov.
Tak, a teraz stačí len jadro skompilovať a úspešne z neho nabootovať.
V ďalšom kroku sa budeme venovať nainštalovaniu hibernate scriptu, ktorý
sa bude starať o uspávanie nášho miláčika a samotným nastaveniam
hibernácie. Rozbalíme balík s hibernate scriptom, presunieme sa do
adresára, kde sme súbory rozbalili a inštaláciu spustíme príkazom
./install.sh
, čím sa nám nainštalujú potrebné veci. Nás bude
hlavne zaujímať:
/usr/local/sbin/hibernate
(skript, ktorý uspáva
notebook)/etc/hibernate/hibernate.conf
(konfiguračný súbor, ktorým
riadime hibernáciu)Teraz by sme mali mať všetko pripravené k úspešnej hibernácii a môžeme sa pustiť do jej nastavovania.
Celé to funguje nasledovne. Beží nám démon acpid (musíme ho mať,
samozrejme, nainštalovaný), ktorý sa stará o obsuhu udalostí. Napríklad, ak
zavrieme notebook, démon acpid obslúži túto udalosť a zavolá napr. náš
hibernate script. Nastavenie obsluhy týchto udalostí vykonávame v adresári
/etc/acpi/events/
tým spôsobom, že doň vkladáme
skripty, v ktorých udávame, pre akú udalosť má démon spúšťať konkrétne
programy.
Ak by sme si chceli sami odskúšať, aké ACPI udalosti generuje náš
notebook, musíme vypnúť démona acpid a následne príkazom
cat /proc/acpi/event
môžeme po stlačení príslušnej
klávesy alebo kombinácie kláves na obrazovke vidieť, aké udalosti
generuje náš notebook a obslúžiť ich tak, ako sme písali vyššie.
U mňa to funguje nasledovne. V adresári /etc/acpi/events
mám vytvorený súbor lid, ktorý
zavolá script hibernate po zatvorení notebooku. Taktiež si môžeme zvoliť
vlastnú kombináciu pre uspávanie notobooku, ktorú zistíme horeuvedeným
spôsobom.
Teraz sa budeme venovať nastaveniam samotnej hibernácie. Všetky zmeny
budeme vykonávať v súbore /etc/hibernate/hibernate.conf
.
Štruktúra tohto súboru je veľmi intuitívna a zvládne ju aj začiatočník, ja
budem opisovať problémy, s ktorými som sa stretol. V prvom kroku musíme
nastaviť spôsob uspávania, a to je napr. suspend to ram alebo suspend
to disk. My si zvolíme suspend to ram.
PowerdownMethod 3
Rozdiel medzi suspend to ram a suspend to disk je v tom, že pri suspend to disk sa uloží obsah pamäte na disk a notebooku sa úplne vypne (opätovné spustenie je všeobecne o niečo pomalšie ako pri suspend to ram), zatiaľ čo pri suspend to ram dáta ostávajú v pamäti a notebook spotrebúvava určité množstvo energie.
Často sa mi stávalo, že pri zatvorení notebooku som v ňom nechal zastrčený USB flash disk, takže ho treba "umountnuť", aby som ho po zobudení notebooku mohol opäť korektne pripojiť.
Unmount /media/usbdisk
Pri uspaní je dobré vypnúť sieť a taktiež používam dosť často pcmcia kartu, ktorú takisto odpájam.
DownInterfaces eth0
UpInterfaces auto
EjectCards yes
Mojím najväčším problémom a musím podotknúť, že nielen mojím, bolo
rozchodenie grafickej karty po otvorení notebooku. Vždy sa mi notebook
prebudil do čiernej obrazovky a problémom bola práve grafická karta.
Vyriešil som to programom video_post, ktorý by mal dokázať opäť rozchodiť vašu
grafickú kartu. Primárne je určený pre grafické karty od ATI, ale funguje
aj na iných typoch (osobne odskúšané). Video_post treba rozbaliť,
skompilovať, vložiť niekde do systému (najlepšie tam, kde majú naň
dosah systémové premenné) a vložiť nasledujúce riadky do nášho súboru
/etc/hibernate/hibernate.conf
:
OnResume 30 /root/emu/video_post
OnResume 20 chvt 1
OnResume 10 chvt 7
Samozrejme, že cestu /root/emu/video_post
nahradíte vašou
cestou ku skompilovanému video_post
.
Niekto nemusí mať s prebudením svojej grafickej karty problém,
takže video_post vôbec nepotrebuje a do
/etc/hibernate/hibernate.conf
stačí zadať nasledujúce riadky:
OnResume 20 chvt 1
OnResume 10 chvt 7
Tento článok si nekladie za cieľ byť vyčerpávajúcim návodom. Snažil som sa byť čo najvšeobecnejší a úspech závisí od konkrétneho hardvéru. Určite vám môže byť nápomocná vynikajúca webová stránka www.linux-laptop.net, na ktorej nájdete množstvo príkladov konfigurácii k vášmu notebooku na rôznych distribúciách Linuxu.
Ja mám už len dva problémy:
- amd64
- nvidia
A vôbec nemám páru ako ďalej. Všetko funguje pekne, len sa zobudím s čiernou obrazovkou. Veci ako vbetool, video_post sa nedajú skompilovať na amd64 (o cross compiláciu som sa ani nepokúšal)
Nvida by si už mala rozumiet s Linux power managmentom v jadre 2.6.14+ (Bug #114640). Čo je asi pravda, lebo už možem spraviť suspend bez unloadu modulu.
Podarilo sa to uz niekomu rozbehať?
(Acer Aspire 1511lmi, GeForce FX Go5700 [nvidia-kernel-1.0.8178, suspend2-sources-2.6.15-r5])
mam dell latitude d800, nVidia Corporation NV34M [GeForce FX Go5200] a patchovany kernel distribuce gentoo: 2.6.15-suspend2-r5 a hibernace funguje, pomaham ji parameterem --force
predchozi kernel 2.6.14 mi nechodil a kernel 2.6.10, ktery jsem patchoval sam mi tez chodil... nejaky popis jsem tenkrat daval semhle
acpid
nabinduj na POWER tlačítko příkaz 'killall -9 X'
#!/bin/bash rmmod uhci_hcd echo shutdown > /sys/power/disk; echo disk > /sys/power/state modprobe uhci_hcd/usr/local/bin/swsusp_sleep
#!/bin/bash echo platform > /sys/power/disk; echo disk > /sys/power/state/etc/sudoers
sarim ALL=(root) NOPASSWD: /usr/local/bin/swsusp_hibernate, /usr/local/bin/swsusp_sleepa pak staci ikonka na plose, co spousti
sudo /usr/local/bin/swsusp_NECO
action=/usr/local/sbin/hibernate -F /etc/hibernate/suspend_to_disk.conf
v skripte, ktory osetruje funkciu Fn+Esc
resume2=swap:/dev/hdXY
při startu jádra, jak už někdo výše psal.
Mám ale problém s tím, že nenaběhne dobře síť. Odkomentoval jsem obě položky:
DownInterfaces eth0 UpInterfaces autoa pak jsem je i zakomentoval. V prvním případě chyběl jeden (důležitý) řádek ve výpisu příkazu
route
, který směruje ven.
V obou případech při pokusu o shození sítě příkazem ifconfig eth0 down
konzole zatuhne. Pozn: rtl8169
Dík za každý tip nebo nápad.
r8169
r8169
do black-listu. Je tento modul po přechodu do hibernace odstraněn? Nebo je naopak nechán načtený?
Jinak ještě jedna věc, která trochu komplikuje/znepříjemňuje nahození sítě po hibernaci. Používám dhcp a po vypínání síťového procesu pomocí volby:
DownInterfaces eth0stále zůstává běžet proces
dhcpcd
.
Pokud spustím skript /etc/rc.d/rc.inet1
, objeví se hláška:
**** /sbin/dhcpcd: already running **** /sbin/dhcpcd: if not then delete /etc/dhcpc/dhcpcd-eth0.pid filea já musím nejprve ručně zastavit proces
dhcpcd
, abych mohl nahodit síť tímto skriptem.
Jak lze prosím zajistit automatické vypínání procesu dhcpcd
při hybernaci?
Děkuji předem za nápady
OnSuspend alebo OnResume v /etc/hibernate/hibernate.conf
ktora je popisana v clanku.
Napriklad ja puzivam nasledovne
OnSuspend 2 /etc/init.d/cpufreqd stop
OnResume 2 /etc/init.d/cpufreqd start
OnSuspend 10 killall dhcpcd
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.