Portál AbcLinuxu, 4. června 2024 23:56

Lehký úvod do "obecného" ACPI

17.2.2008 05:56 | Přečteno: 3896× | LINUX | Výběrový blog | poslední úprava: 23.2.2008 14:03

Aneb vše co jste vždy chtěli od ACPI na notebooku ale byli jste líní si to nastavit.

Pokuď nepoužíváte některou z "user friendly" distribucí, pravděpodobně Váš systém po instalaci neumí mnoho zdánlivě samozřejmých věcí jako přechod do úsporného režimu při odpojení od napájení, zapnutí výstupu na externí monitor nebo uspání po zavření displaye. Následující pojednání je o tom, jak toto napravit a jaké nepříjemnosti Vás při tom můžou potkat.

ACPI

je standard tvořící rozhraní mezi HW a OS v oblasti power managementu a konfigurace. "Obsluhuje" všelijaké systémové události jako jsou změny stavu konfiguračních tlačítek, napájení nebo odpojení/připojení zařízení na některých vstupech/výstupech počítače.

acpid

je démon reagující na ACPI události. Jeho hlavní pracobní náplní je provádět uživatelem definované akce při různých ACPI událostích. Konfigurace daemona se provádí pomocí konfiguračních souborů v adresáři /etc/acpi/events. Každý soubor v adresáři definuje obvykle akci pro jeden typ ACPI události a jeho struktura je následující:

event=puvodce_udalosti
action=program_pro_obsluhu_udalosti %e

Za puvodce_udalosti je možné dosadit cokoliv co váš systém nabízí v adresáři /proc/acpi a to nejenom absolutně, ale i ve formě regulárního výrazu. To umožňuje nestarat se o jednotlivé instance zařízení a provést akci pro celou rodinu zařízení. Pokud tedy chcete reagovat například na "akci baterie", nemusíte udávat, že chcete baterii C1BB - batery/C1BB ale pomocí batery.* lze reagovat na události z libovolné systémem sledované baterie.

program_pro_obsluhu_udalosti pak udává program, většinou shell script, který se má při dané ACPI události spustit. %e je ACPI daemonem nahrazeno za "textový popis události" což v překladu znamená doplňující informace k události (jedná-li se o vypnutí nebo zapnutí tlačítka, která konkrétní instance zařízení akci vyvolala atd.). Jaký konkrétní údaj pro konkrétní akci acpid posílá lze "vykoukat" z jeho logu (/var/log/acpid). "Obslužné" programy jsou spouštěny pod uživatelem, pod kterým běží acpid, což je standardně root.

Příklady

Všechny níže uvedené příklady jsou napsány konkrétně pro HP nx6310, ale měly by být poměrně univerzální...

Uspání do RAM po zavření notebooku

/etc/acpi/events/lid:

event=button/lid
action=/etc/acpi/lid.sh %e

/etc/acpi/lid.sh:

#!/bin/sh

# if LID pressed (Display closed) suspend, else exit
grep -q open /proc/acpi/button/lid/C238/state && exit

# suspend
CONSOLE=`fgconsole`
chvt 12
echo mem > /sys/power/state

# resume
vbetool post
chvt $CONSOLE

Poznámky: Suspend script kde není, kromě obnovení stavu VGA, nutné při uspávání/probouzení provádět žádná další kouzla. Porovnejte s s2ram či hibernate...

Změna frekvence CPU při odpojení od elektrické sítě

/etc/acpi/events/ac_adapter:

event=ac_adapter.*
action=/etc/acpi/ac_adapter.sh %e

/etc/acpi/ac_adapter.sh:

#!/bin/sh

if [ $4 -eq 0 ]; then
    cpufreq-set -g conservative
else
    cpufreq-set -g performance
fi

Poznámky: Parametr $4 udává zda se jedná o připojení/odpojení.

Zapnutí/vypnutí výstupu na externí monitor

/etc/acpi/events/video:

event=video.*
action=/etc/acpi/video.sh %e

/etc/acpi/video.sh:

#!/bin/sh

export DISPLAY=:0
XRANDR=`xrandr`

if echo "$XRANDR" | grep -E 'VGA connected [0-9]+' > /dev/null ; then
    # VGA connected and active, turn it off
    xrandr --output VGA --off
elif echo "$XRANDR" | grep -E 'VGA connected' > /dev/null ; then
    # VGA connected but not active, turn it on
    xrandr --output VGA --auto --same-as LVDS
fi

Poznámky: xrandr musí být standardně spouštěn pod vlastníkem displaye, proto je nutné mít ve startovacích scriptech X serveru (například .xinitrc) nastaven přístup k displayi pro roota: xhost +local:root.

Závěr

Příklady jsou jak vidno opravdu jednoduché a přímočaré. Jistě by šlo napsat mnohem "univerzálnější" skripty, ale pokuď takové chcete, je nesmyslné mít distribuci, která je již neobsahuje. Používáte-li na svém systému nějaký další zajímavý a použitelný acpid script, podělte se v diskuzi

       

Hodnocení: 96 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

17.2.2008 09:25 Petr Zelenka | skóre: 24 | Semice/Stuttgart (Sindelfingen)
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc hezký zápisek, díky za něj! Už je v záložkách :).
A teď si uvědomte, jaký je vztah mezi krychlí a motýlem.
belisarivs avatar 17.2.2008 09:52 belisarivs | skóre: 22 | blog: Psychobláboly
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Odpovědět | Sbalit | Link | Blokovat | Admin
"Lehký úvod do "obecného" ACPI" "Aneb vše co jste vždy chtěli od ACPI na notebooku"

Tak jak teda? :-)

Ale jinak moc hezke. Dekuji.

Muzu jeste poprosit jak vypnout display pokud je notes zavren? Mam HP530 a po zavreni se mi sice display vypne, ale po chvilce se zase zapne. Ma sice cernou celou plochu, ale stejne sviti.

Diky.
IRC is just multiplayer notepad.
17.2.2008 15:34 janskyj | skóre: 11 | blog: linuxuv_blog
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
No ja to delam pomoci radeontool light on
Krystaly, polovodiče, všechno směšné. Co tak konzole z digitronů, to by bylo něco pro pravé muže. :)
17.2.2008 16:27 Martin Tůma | skóre: 39 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

Něco mi říká, že radeontool na grafické kartě od intelu fungovat nebude...

Každý má právo na můj názor!
17.2.2008 15:37 Martin Tůma | skóre: 39 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

zkusil bych:

xset dpms force off

a když to display vypne (což by mělo), tak bych to "namapoval" na LID tlačítko. Pokuď ti display něco nechtěně opět zapíná, může to bejt třeba špatně fungující myš (nebo lokální zemětřesení ;-))

Každý má právo na můj názor!
17.2.2008 22:11 Kvakor
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
A co zkusit vbetool? Na vypnuti by melo fungovat vbetool dpms off a na opetovne zapnuti vbetool dpms on.
vencour avatar 17.2.2008 10:27 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Odpovědět | Sbalit | Link | Blokovat | Admin

Dík, já mam zatim za vzor snad kompletní acpid skript, všechno jsem neměl ještě čas ověřovat u sebe. Základ mi maká.

Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
belisarivs avatar 17.2.2008 11:09 belisarivs | skóre: 22 | blog: Psychobláboly
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Pro HP 530 neco takoveho neni? Docela by mi to bodlo. Nebo se da v pohode pouzit to z Thinkpadu?
IRC is just multiplayer notepad.
vencour avatar 17.2.2008 11:20 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

I kdyby nee, máte aspoň mustr, jak by to mohlo vypadat, doplňte si svůj modul a je to?

Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
17.2.2008 18:48 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Odpovědět | Sbalit | Link | Blokovat | Admin
Já osobně si dovolím doporučit použití nástroje S2ram.
17.2.2008 21:24 Martin Tůma | skóre: 39 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

Pochop, že tohle neni článek pro uživatele OpenSUSE (Ubuntu, Mandrivy, ...). Pokuď se nechci o svůj systém zajímat, nainstaluju si některou takovou distribuci a doufám, že její autoři všechny tyhle "drobnosti" pořešili. Tohle je pro lidi, co chtěj vědět co přesně se v jejich systému děje (který hardware má se suspendem problémy a jak je obejít) a chtějí si to nastavit přesně sobě na míru.

Konec konců s2ram je v zápisku zmíněno jako kanón na vrabce, v případě že máte "do it yourself"® distribuci.

Každý má právo na můj názor!
17.2.2008 22:23 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Třeba Ubuntu používá v podstatě totéž, co ty (možná tam chybí ty chvt, nechce se mi tam dívat), akorát pokud běží nějaký powermanager, tak to jde oklikou přes něj (to aby fungovala stejně i softwarová "tlačítka" v logout dialogu). Má to jedinou nevýhodu: na některém HW to nejde a pak je často výrazně jednodušší použít uswsusp nebo suspend2, než vychytat a obejít všechny muchy, co má daný HW. Další věc je, že by někdo mohl ocenit s2both, ten nemá mimo uswsusp alternativu.
17.2.2008 22:24 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Nechápu proč kanón. A pokud chceš vědět jaký hack je na tvém systému použit není přece takový problém se podívat na seznam těch identifikátorů co je ve zdrojácích. A alespoň pak pomůžeš i ostatním lidem se stejným notebookem, když funkční kombinaci parametrů pro s2ram pošleš vývojářům. Ostatním ot pak bude chodit out-of-box.
17.2.2008 22:47 Martin Tůma | skóre: 39 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

Protože s2ram obsahuje hacky pro všechny myslitelný chyby HW/ovladačů/systému, tedy i ty co se mě vůbec netýkají. A pomáhat projektům jako je s2ram opravdu nemínim, protože to je akorát cesta do pekel. Problémy se MUSÍ řešit v ovladačích zařízení/kernelu, tak aby žádný s2ram nebylo potřeba a k uspání stačilo prosté echo mem > /sys/power/state.

Každý má právo na můj názor!
17.2.2008 23:34 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Ano, když se někdo bude mými bugreporty zabývat, tak rád pomůžu s řešením problémů v ovladačích zařízení/kernelu. V současné době jsem rád, že můžu použít uswsusp a bude to fungovat.
17.2.2008 23:40 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Problémy se MUSÍ řešit v ovladačích zařízení/kernelu, tak aby žádný s2ram nebylo potřeba a k uspání stačilo prosté echo mem > /sys/power/state.
Možná bys potom mohl poradit Pavlu Machkovi, jak to MUSÍ dělat. Z tvojí reakce se zdá, že o toho kernelu a problémech spojených s uspáváním moc neví ... ;-)
When your hammer is C++, everything begins to look like a thumb.
18.2.2008 00:07 Martin Tůma | skóre: 39 | blog: RTFM | Praha
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI

Tvé logické pochody jsou vskutu nadmíru zajímavé...

Pavel Machek těžko sám opraví všechny "vadné" drivery, a proto, že v současné době se distribuce jako je SUSE bez něčeho takového neobejde, píše kromě "kernel věcí" i s2ram. Z jeho příspěvků do mailinglistů a přednášek nicméně nemám pocit, že by si myslel, že s2ram je skutečné řešení problému...

Každý má právo na můj názor!
17.2.2008 21:43 YYY | skóre: 29 | blog: martinek
Rozbalit Rozbalit vše Re: Lehký úvod do "obecného" ACPI
Odpovědět | Sbalit | Link | Blokovat | Admin
Mam hp compaq nx 6110.. Vsechno mi funguje jak ma (debian stable), ale diky za tento prispevek... Opravdu pekne a pomerne inspirativni :-)

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.