Difference between revisions of "ACPI action script for battery events"

From ThinkWiki
Jump to: navigation, search
m
 
(4 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
This is an example ACPI action script that makes Power Management adjustments according to if you are on battery or on AC.
 
This is an example ACPI action script that makes Power Management adjustments according to if you are on battery or on AC.
 
Usually this is saved as {{path|/etc/acpid/actions/battery.sh}}.
 
Usually this is saved as {{path|/etc/acpid/actions/battery.sh}}.
 
  
 
  #!/bin/sh
 
  #!/bin/sh
# Tried on Gentoo
+
# Tried on Gentoo
# cpu throttling is in here it is the cpufreq-set lines
+
# cpu throttling is in here it is the cpufreq-set lines
# turning swap off is only for those that feel comfortable
+
# turning swap off is only for those that feel comfortable
# doing something this nasty.
+
# doing something this nasty.
# comment out the laptop_mode line if you don't have it installed
+
# comment out the laptop_mode line if you don't have it installed
# pcfe, 2008-10-28
+
# pcfe, 2008-10-28
                                                                                                                                   
+
# cpu throttling
+
# spindown time for HD (man hdparm for valid values)
# cat /proc/acpi/processor/CPU0/throttling for more info
+
# I prefer 2 hours for acad and 2 min for batt
ACAD_THR=0
+
ACAD_HD=244
BATT_THR=2
+
BATT_HD=24
                                                                                                                                   
 
# spindown time for HD (man hdparm for valid values)
 
# I prefer 2 hours for acad and 2 min for batt
 
ACAD_HD=244
 
BATT_HD=24
 
 
                                                                                                                                      
 
                                                                                                                                      
# Power management level
+
# Power management level
# 255 (off) on AC
+
# 255 (off) on AC
# 128 (medium) on batt
+
# 128 (medium) on batt
# lowered to 32, pcfe, 2004-06-23
+
# lowered to 32, pcfe, 2004-06-23
# upped to 64, pcfe, 2004-07-14
+
# upped to 64, pcfe, 2004-07-14
# upped to 96, pcfe, 2004-10-20
+
# upped to 96, pcfe, 2004-10-20
ACAD_PM=255
+
ACAD_PM=255
BATT_PM=96
+
BATT_PM=96
 
                                                                                                                                      
 
                                                                                                                                      
# ac/battery event handler
+
# ac/battery event handler
 
                                                                                                                                      
 
                                                                                                                                      
status=`awk '/^state: / { print $2 }' /proc/acpi/ac_adapter/AC/state`
+
status=`awk '/^state: / { print $2 }' /proc/acpi/ac_adapter/AC/state`
 
                                                                                                                                      
 
                                                                                                                                      
if [ "$status" = "off-line" ]
+
if [ "$status" = "off-line" ]
then
+
then
               logger "Running /sbin/laptop_mode stop"
+
               logger "Running /sbin/laptop_mode start"
 +
              /sbin/laptop_mode start
 +
              logger "Setting HD spindown for BATT mode with hdparm -S $BATT_HD /dev/hda."
 +
              /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1
 +
              logger "Setting HD powersaving for BATT mode with hdparm -B $BATT_PM /dev/hda."
 +
              /sbin/hdparm -B $BATT_PM /dev/hda > /dev/null 2>&1
 +
              logger "Turning off swap."
 +
              /sbin/swapoff -a
 +
      /usr/bin/cpufreq-set -g conservative       
 +
else 
 +
              logger "Turning on swap."
 +
              /sbin/swapon -a
 +
              logger "Running /sbin/laptop_mode start"
 
               /sbin/laptop_mode stop
 
               /sbin/laptop_mode stop
 
               logger "Setting HD spindown for AC mode with hdparm -S $ACAD_HD /dev/hda."
 
               logger "Setting HD spindown for AC mode with hdparm -S $ACAD_HD /dev/hda."
Line 42: Line 48:
 
               logger "Setting HD powersaving for AC mode with hdparm -B $ACAD_PM /dev/hda."
 
               logger "Setting HD powersaving for AC mode with hdparm -B $ACAD_PM /dev/hda."
 
               /sbin/hdparm -B $ACAD_PM /dev/hda > /dev/null 2>&1
 
               /sbin/hdparm -B $ACAD_PM /dev/hda > /dev/null 2>&1
              logger "Turning on swap."
 
              /sbin/swapon -a
 
      /usr/bin/cpufreq-set -g conservative       
 
else 
 
              logger "Turning off swap."
 
              /sbin/swapoff -a
 
              logger "Running /sbin/laptop_mode start"
 
              /sbin/laptop_mode start
 
              logger "Setting HD spindown for battery mode with hdparm -S $BATT_HD /dev/hda."
 
              /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1
 
              logger "Setting HD powersaving for battery mode with hdparm -B $BATT_PM /dev/hda."
 
              /sbin/hdparm -B $BATT_PM /dev/hda > /dev/null 2>&1
 
 
               /usr/bin/cpufreq-set -g ondemand
 
               /usr/bin/cpufreq-set -g ondemand
fi
+
fi
 +
 
 +
On archlinux you might need to add an event like a file e.g. saved as {{path|/etc/acpi/events/battery_event}} with following lines in it:
 +
 
 +
event=battery.*
 +
action=/etc/acpi/actions/battery.sh
 +
 
 +
Note also on archlinux the acpi actions and events are located in {{path|/etc/acpi}} (not {{path|/etc/acpid}} as in gentoo)
 +
 
 +
After restarting your acpi daemon the script should be activated on switching the power supply on/off. You could check your logs to be sure that everything works as expected.
  
 
[[Category:Scripts]]
 
[[Category:Scripts]]

Latest revision as of 23:54, 8 January 2009

This is an example ACPI action script that makes Power Management adjustments according to if you are on battery or on AC. Usually this is saved as /etc/acpid/actions/battery.sh.

#!/bin/sh
# Tried on Gentoo
# cpu throttling is in here it is the cpufreq-set lines
# turning swap off is only for those that feel comfortable
# doing something this nasty.
# comment out the laptop_mode line if you don't have it installed
# pcfe, 2008-10-28

# spindown time for HD (man hdparm for valid values)
# I prefer 2 hours for acad and 2 min for batt
ACAD_HD=244
BATT_HD=24
                                                                                                                                   
# Power management level
# 255 (off) on AC
# 128 (medium) on batt
# lowered to 32, pcfe, 2004-06-23
# upped to 64, pcfe, 2004-07-14
# upped to 96, pcfe, 2004-10-20
ACAD_PM=255
BATT_PM=96
                                                                                                                                   
# ac/battery event handler
                                                                                                                                   
status=`awk '/^state: / { print $2 }' /proc/acpi/ac_adapter/AC/state`
                                                                                                                                    
if [ "$status" = "off-line" ]
then
              logger "Running /sbin/laptop_mode start"
              /sbin/laptop_mode start
              logger "Setting HD spindown for BATT mode with hdparm -S $BATT_HD /dev/hda."
              /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1
              logger "Setting HD powersaving for BATT mode with hdparm -B $BATT_PM /dev/hda."
              /sbin/hdparm -B $BATT_PM /dev/hda > /dev/null 2>&1
              logger "Turning off swap."
              /sbin/swapoff -a
	       /usr/bin/cpufreq-set -g conservative         
else   
              logger "Turning on swap."
              /sbin/swapon -a
              logger "Running /sbin/laptop_mode start"
              /sbin/laptop_mode stop
              logger "Setting HD spindown for AC mode with hdparm -S $ACAD_HD /dev/hda."
              /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1
              logger "Setting HD powersaving for AC mode with hdparm -B $ACAD_PM /dev/hda."
              /sbin/hdparm -B $ACAD_PM /dev/hda > /dev/null 2>&1
              /usr/bin/cpufreq-set -g ondemand
fi

On archlinux you might need to add an event like a file e.g. saved as /etc/acpi/events/battery_event with following lines in it:

event=battery.*
action=/etc/acpi/actions/battery.sh 

Note also on archlinux the acpi actions and events are located in /etc/acpi (not /etc/acpid as in gentoo)

After restarting your acpi daemon the script should be activated on switching the power supply on/off. You could check your logs to be sure that everything works as expected.