]> git.pld-linux.org Git - packages/acpid.git/blob - acpid.battery.sh
- no flood to log
[packages/acpid.git] / acpid.battery.sh
1 #!/bin/sh
2 # /etc/acpid/actions/battery.sh
3 # based on work by Frank Dietrich <ablesoft@gmx.de>
4 # £ukasz Pawelczyk <havner@pld-linux.org>
5 #
6 # Handle power related events and take appropriate actions.
7
8 if [ $# != 1 ]; then
9         exit 1
10 fi
11 set $*
12
13 AC=/proc/acpi/ac_adapter/ADP1
14 BAT=/proc/acpi/battery/BAT1
15 STATE_FILE=/tmp/ac_bat_acpid.state
16
17 # get the AC connector state (plugged/unplugged) from /proc filesystem.
18 AC_STATE=`sed -n 's/^.*\(off\|on\)-line.*/\1/p' $AC/state`
19 AC_STATE_OLD=`cat "$STATE_FILE" | awk '{print $1};'`
20 # get the battery state from /proc filesystem
21 BAT_CAPACITY=`awk '/^remaining\ capacity:/ {print $3}' $BAT/state`
22 BAT_WARNING=`awk '/^alarm:/ {print $2}' $BAT/alarm`
23 BAT_CRITICAL=`awk '/^design\ capacity\ low:/ {print $4}' $BAT/info`
24 BAT_STATE_OLD=`cat "$STATE_FILE" | awk '{print $2};'`
25 if [ "$BAT_CAPACITY" -le "$((BAT_CRITICAL+200))" -a "$AC_STATE" = "off" ]; then
26         BAT_STATE=critical
27 elif [ "$BAT_CAPACITY" -le "$((BAT_WARNING+200))" -a "$AC_STATE" = "off" ]; then
28         BAT_STATE=warning
29 else
30         BAT_STATE=normal
31 fi
32 echo "$AC_STATE $BAT_STATE" >  "$STATE_FILE"
33
34 if [ "$AC_STATE" != "$AC_STATE_OLD" ]; then
35  case "$AC_STATE" in
36   on)
37         # AC connector plugged in
38         logger "acpid: `basename $AC` connector plugged in. State: $AC_STATE."
39         # deactivate standby (spindown) timeout for the drive
40         #hdparm -q -S 0 /dev/hda
41         # handle processor
42         #echo 0 > /proc/acpi/processor/CPU0/throttling
43         #echo 0 > /proc/acpi/processor/CPU0/performance
44         ;;
45   off)
46         # AC connector unplugged
47         logger "acpid: `basename $AC` connector unplugged. State: $AC_STATE."
48         # activate standby (spindown) timeout for the drive
49         # timeout 5 minutes (man hdparm, for more informations)
50         #hdparm -q -S 60 /dev/sda 
51         # handle processor
52         #echo 4 > /proc/acpi/processor/CPU0/throttling
53         #echo 3 > /proc/acpi/processor/CPU0/performance
54         ;;
55   *)
56         # AC connector in undetermined state
57         logger "acpid: Could not determine new `basename $AC` connector state: $AC_STATE."
58         ;;
59  esac
60 fi
61
62 if [ "$BAT_STATE" != "$BAT_STATE_OLD" ]; then
63  case "$BAT_STATE" in
64   warning)
65         # battery passed acpi alarm state and AC unplugged
66         logger "acpid: Remaining `basename $BAT` battery capacity low. State: $BAT_STATE."
67         # play alarm sound
68         #play /path_to/alarm.wav
69         # put computer to sleep
70         #echo mem > /sys/power/state
71         #hibernate
72         ;;
73   critical)
74         # some laptops generate acpi event when machine is about to turn off
75         logger "acpid: Remaining `basename $BAT` battery capacity VERY low. State: $BAT_STATE."
76         # play alarm sound
77         #play /path_to/alarm.wav
78         # put computer to sleep
79         #echo mem > /sys/power/state
80         #hibernate
81         ;;
82   normal)
83         # either battery is charged or AC plugged
84         ;;
85   *)
86         # battery in undetermined state
87         logger "acpid: Could not determine `basename $BAT` battery state: $BAT_STATE."
88         ;;
89  esac
90 fi
This page took 0.077245 seconds and 3 git commands to generate.