Portál AbcLinuxu, 30. dubna 2025 19:52
To je celkem jednoduchý, na to stačí následující shell skript* (/etc/acpi/battery.sh
):
#!/bin/sh if grep 'off-line' /proc/acpi/ac_adapter/C1BA/state; then echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor else echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor fi
a příslušnej konfigurační soubor (/etc/acpi/events/battery
) pro acpid
:
event=battery.* action=/etc/acpi/battery.sh %e
*přesný názvy "zařízení" baterek je třeba nastavit "na míru" systému
Super věc
Zas tak super to neni - když jsem začal přemejšlet, že bych to teda napsal do toho FAQ a zkusil to pro jistotu znovu otestovat, zjistil jsem, že to najednou (když jsem ten skript vymejšlel, tak to ale určitě fungovalo ) až tak úplně nefunguje...
Při přechodu z baterky na AC se to nepřepne zpět. Na vině je to, že /proc/acpi/ac_adapter/C1BA/state
se změní o něco později, než dostane acpid
informaci o změně napájení (divné, ale je to tak). Problém (i případný problém v "opačném" směru) nicméně spolehlivě řeší sleep
na začátku skriptu (před testem stavu napájení)
#!/bin/sh sleep 1 if grep 'off-line' /proc/acpi/ac_adapter/C1BA/state; then echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor else echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor fi
Použití ac_adapter
místo battery
nemá na funkci vliv.
Otázkou spíš je, jak je možný, že acpid
dostane informaci od jádra o změně "baterky" dřív, než jádro změní příslušnej soubor v /proc
, což je situace proti který nejsou "imunní" ani skripty z Debianu. V době, kdy jsem si ty skripty psal tahle situace nenastávala, takže bych tipoval, že to že to u Debianu s těmi skripty (možná) funguje je způsobeno buď tím, že je tam starší jádro, kde tahle situace nenastane, nebo složitostí těch skriptů - než se dostanou k testu souboru v /proc
, je ten už nastavenej správně.
Nesmysl. Jak u battery
tak u ac_adapter
dostaneš oba dva signály, tzn. odpojení napájení i jeho připojení.
odpojenie adaptera => event=ac_adapter AC 00000080 00000000 pripojenie adaptera => event=ac_adapter AC 00000080 00000001a viac ma nezaujima, ani to ci nahodou nemam BAT1 v ultrabay ani ci sa jedna len o vybratie/zalozie baterky a pod. :)
Ten sleep
je v těch Debianích skriptech IMHO až po detekci statusu v /proc
. A získání tý informace je mnohem složitější, než jenom jediný grep v /proc
. Volají se další skripty, například /usr/bin/on_ac_power
(takže dotaz na status v /proc
se provádí 2x...) atd. Ale zas tak podrobně jsem ten bordel (zlatej Arch a jeho KISS strategie ) nezkoumal.
power.sh
, ktery je spousten z event=ac_adapter
a vse funguje jak sem si predstavoval.
Teorie sice je taková, že spotřeba CMOSu je nejvýrazněji závislá na frekvenci přepínání hradel
Ne tak docela.. jako obecnej vzorec pro ztrátovej výkon CMOSu se udává P = c·V²·f
, kde c
je technologická konstanta. Rostoucí podíl parazitních proudů na ztrátovém výkonu je nicméně taky fakt (bodejť by ne, když jsou dneska hradla tranzistorů "vysoký" jen jednotky atomovejch vrstev...)
/sys,
ale stačí použít nástroj cpufreq-set
.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.