CONFIG_ACPI=y CONFIG_ACPI_BOOT=y CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=ypřičemž první položka je povinná, ostatní volitelné (podle toho co chceme sledovat). Existují i další sledovatelná zařízení, podrobně viz. dokumentace jádra. Dále instalujeme balíčky acpid, obsahující stejnojmenný daemon a acpi, který umožňuje zjistit základní parametry systému. Stav baterií zjistíme prostým povelem acpi, stav všech sledovaných zařízení se zobrazuje v /proc/acpi/. Ke sledování stavu celého systému se hodí X-aplikace wmacpi ze stejnojmenného balíčku.
Daemon acpid přijímá hlášky ACPI systému a podle nich nám umožňuje spustit různé skripty (obvykle je najdeme v adresáři /etc/acpi, nastavení pak v podadresáři events). Příklady:
#!/bin/sh
# /etc/acpi/battery.sh
# checks the battery state and if critical runs hibernation
#
LOGFILE=/var/log/acpid
if [ "$2" == "BAT0" ] ; then
/usr/bin/on_ac_power > /dev/null
if [ $? -ne 0 ] ; then
STATUS=`grep "capacity state" /proc/acpi/battery/$2/state | grep "critical"`
if [ "$STATUS" != "" ] ; then
/usr/bin/acpi >> $LOGFILE
echo $STATUS >> $LOGFILE
echo "Need to hibernate..." >> $LOGFILE
/usr/sbin/hibernate
fi
fi
fi
který spustí skript hibernate (podrobně
viz. odstavec 5.6) právě tehdy, jsou-li baterie
vyčerpány a systém není napájen ze sítě. Spuštění uvedeného skriptu je
ještě třeba zajistit pro všechny události typu baterie, a to
vytvořením souboru /etc/acpi/events/battery s obsahem
# Optionally you can specify the placeholder %e. It will pass # through the whole kernel event message to the program you've # specified. event=battery action=/etc/acpi/battery.sh %e
#!/bin/sh
# /etc/acpi/display.sh
# if the display lid has been closed, suspends to RAM
#
LOGFILE=/var/log/acpid
closelid=`expr $4 % 2`
user=`w | awk '{if ($2 == ":0") print $1}'`
if [ $closelid -eq 1 ] ; then
on_ac_power > /dev/null
if [ $? -ne 0 ] ; then # not on AC power
echo "Lid being closed, suspend to RAM" >> $LOGFILE
hibernate -F/etc/hibernate/ram.conf
else
echo "Lid being closed, switching off display" >> $LOGFILE
su - $user -c "xset -display :0.0 dpms force off"
fi
else
echo "Lid being opened, activate display" >> $LOGFILE
su - $user -c "xset -display :0.0 dpms force on"
fi
Jeho vyvolání zařídí soubor /etc/acpi/events/display s tímto
obsahem:
event=button[ /]lid action=/etc/acpi/display.sh %ePoznámky k výše uvedenému skriptu display.sh: