summarylogtreecommitdiffstats
path: root/acpi-eeepc-generic-handler.sh
diff options
context:
space:
mode:
Diffstat (limited to 'acpi-eeepc-generic-handler.sh')
-rw-r--r--acpi-eeepc-generic-handler.sh288
1 files changed, 288 insertions, 0 deletions
diff --git a/acpi-eeepc-generic-handler.sh b/acpi-eeepc-generic-handler.sh
new file mode 100644
index 000000000000..e3734617a15f
--- /dev/null
+++ b/acpi-eeepc-generic-handler.sh
@@ -0,0 +1,288 @@
+#!/bin/sh
+# Copyright 2009 Nicolas Bigaouette
+# This file is part of acpi-eeepc-generic.
+# http://code.google.com/p/acpi-eeepc-generic/
+#
+# acpi-eeepc-generic is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# acpi-eeepc-generic is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with acpi-eeepc-generic. If not, see <http://www.gnu.org/licenses/>.
+
+
+. /etc/acpi/eeepc/acpi-eeepc-generic-functions.sh
+get_model
+. /etc/acpi/eeepc/models/acpi-eeepc-defaults-events.conf
+. /etc/acpi/eeepc/models/acpi-eeepc-$EEEPC_MODEL-events.conf
+
+SELECTION=$3
+if [ "$KEY_SHOW" = "1" ]; then
+eeepc_notify "The event of the pressed key is: \"$SELECTION\"" keyboard 20000
+fi
+
+case "$1" in
+
+ battery|processor)
+ # Don't do anything
+ ;;
+
+ ac_adapter)
+ case "$4" in
+ 00000000) # AC unplugged
+ # These events are generated twice (at least on the 1000)
+ # Make sure the commands are executed only once
+ if [ ! -e ${EEEPC_VAR}/ac_event_unplugged ]; then
+ touch ${EEEPC_VAR}/ac_event_unplugged
+ # Wait 5 seconds (in background) before deleting the file
+ echo `sleep 5 && rm -f ${EEEPC_VAR}/ac_event_unplugged` &
+ execute_commands "${COMMANDS_AC_UNPLUGGED[@]}"
+ fi
+ ;;
+ 00000001) # AC plugged-in
+ # These events are generated twice (at least on the 1000)
+ # Make sure the commands are executed only once
+ if [ ! -e ${EEEPC_VAR}/ac_event_plugged ]; then
+ touch ${EEEPC_VAR}/ac_event_plugged
+ # Wait 5 seconds (in background) before deleting the file
+ echo `sleep 5 && rm -f ${EEEPC_VAR}/ac_event_plugged` &
+ execute_commands "${COMMANDS_AC_PLUGGED[@]}"
+ fi
+ ;;
+ *)
+ msg="acpi-eeepc-generic-handler: undefined 'ac_adapter' event: $2 $3 $4"
+ logger "$msg"
+ ;;
+ esac
+ ;;
+
+ button/power)
+ case "$2" in
+ PWRF|PBTN)
+ eeepc_notify "Power button pressed" gnome-session-halt
+ execute_commands "${COMMANDS_POWER_BUTTON[@]}"
+ ;;
+ *)
+ msg="acpi-eeepc-generic-handler: undefined 'button/power' event: $2 $3 $4"
+ eeepc_notify "$msg" keyboard
+ ;;
+ esac
+ ;;
+
+ button/sleep)
+ case "$2" in
+ SLPB|SBTN)
+ suspend_check_blacklisted_processes "${SUSPEND_BLACKLISTED_PROCESSES[@]}"
+ if [ -e "${EEEPC_VAR}/power.lock" ]; then
+ msg="Suspend lock exist, canceling suspend"
+ logger "$msg (${EEEPC_VAR}/power.lock)"
+ eeepc_notify "$msg" stop 5000
+ exit 0
+ fi
+ eeepc_notify "Sleep button pressed" gnome-session-suspend
+ execute_commands "${COMMANDS_SLEEP[@]}"
+ ;;
+ *)
+ msg="acpi-eeepc-generic-handler: undefined 'button/sleep' event: $2 $3 $4"
+ eeepc_notify "$msg" keyboard
+ ;;
+ esac
+ ;;
+
+ button/lid)
+ # Detect correctly lid state
+ lidstate=""
+ # /proc/acpi is deprecated
+ [ -e /proc/acpi/button/lid/LID/state ] && \
+ lidstate=$(cat /proc/acpi/button/lid/LID/state | awk '{print $2}')
+ [ "x$lidstate" == "x" ] && \
+ [ "x$3" != "x" ] && lidstate=$3 # Use event given (2rd argument) to acpid
+ # FIXME: It seems there is no /sys inteface to replace this
+ # old /proc/acpi interface, so the latter is not deprecated...
+
+ case "$lidstate" in
+ open)
+ xset dpms force on # Screen on
+ restore_brightness # Restore brightness
+ ;;
+ closed)
+ save_brightness # Save brightness
+ if [ "$COMMANDS_ON_LID_CLOSE" == "yes" ]; then
+ state_file1="/proc/acpi/ac_adapter/AC0/state"
+ state_file2="/sys/class/power_supply/AC0/online"
+ # /proc/acpi/* is deprecated
+ [ -e $state_file1 ] && ac_state=$(cat $state_file1 | awk '{print $2}' )
+ # /sys is the future
+ [ -e $state_file2 ] && ac_state=$(cat $state_file2)
+
+ case $ac_state in
+ 1|on-line)
+ # AC adapter plugged in
+ execute_commands "${COMMANDS_LID_CLOSE_ON_AC[@]}"
+ ;;
+ 0|off-line)
+ # Battery powered
+ execute_commands "${COMMANDS_LID_CLOSE_ON_BATTERY[@]}"
+ ;;
+ esac
+ fi
+ ;;
+ *)
+ msg="acpi-eeepc-generic-handler: undefined 'button/lid' event: $2 $3 $4"
+ eeepc_notify "$msg" keyboard
+ ;;
+ esac
+ ;;
+ hotkey)
+ case "$3" in
+ $EEEPC_BLANK) # Silver function button 1 (Blank)
+ logger "acpi-eeepc-generic-handler: (hotkey): Silver function button (Blank)"
+ execute_commands "${COMMANDS_BUTTON_BLANK[@]}"
+ ;;
+ $EEEPC_RESOLUTION) # Silver function button 2 (Resolution)
+ logger "acpi-eeepc-generic-handler: (hotkey): Silver function button (Resolution)"
+ execute_commands "${COMMANDS_BUTTON_RESOLUTION[@]}"
+ ;;
+ $EEEPC_USER1) # Silver function button 3 (User1)
+ logger "acpi-eeepc-generic-handler: (hotkey): Silver function button (User1)"
+ execute_commands "${COMMANDS_BUTTON_USER1[@]}"
+ ;;
+ $EEEPC_USER2) # Silver function button 4 (User2)
+ logger "acpi-eeepc-generic-handler: (hotkey): Silver function button (User2)"
+ execute_commands "${COMMANDS_BUTTON_USER2[@]}"
+ ;;
+ $EEEPC_SHE_TOGGLE) # Super Hybrid Engine
+ logger "acpi-eeepc-generic-handler: (hotkey): SHE"
+ execute_commands "${COMMANDS_SHE_TOGGLE[@]}"
+ ;;
+
+ $EEEPC_SLEEP)
+ suspend_check_blacklisted_processes "${SUSPEND_BLACKLISTED_PROCESSES[@]}"
+ logger "acpi-eeepc-generic-handler: (hotkey): Sleep"
+ eeepc_notify "Going to sleep..." gnome-session-suspend
+ execute_commands "${COMMANDS_SLEEP[@]}"
+ ;;
+ $EEEPC_WIFI_TOGGLE) # WiFi Toggle
+ logger "acpi-eeepc-generic-handler: (hotkey): WiFi toggle"
+ execute_commands "${COMMANDS_WIFI_TOGGLE[@]}"
+ ;;
+ $EEEPC_WIFI_UP) # WiFi Up
+ logger "acpi-eeepc-generic-handler: (hotkey): WiFi Up"
+ execute_commands "${COMMANDS_WIFI_UP[@]}"
+ ;;
+ $EEEPC_WIFI_DOWN) # WiFi Down
+ logger "acpi-eeepc-generic-handler: (hotkey): WiFi Down"
+ execute_commands "${COMMANDS_WIFI_DOWN[@]}"
+ ;;
+ $EEEPC_TOUCHPAD_TOGGLE) # Toggle touchpad
+ logger "acpi-eeepc-generic-handler: (hotkey): Toggling touchpad"
+ execute_commands "${COMMANDS_TOUCHPAD_TOGGLE[@]}"
+ ;;
+ $EEEPC_RESOLUTION) # Change resolution
+ logger "acpi-eeepc-generic-handler: (hotkey): Changing resolution"
+ execute_commands "${COMMANDS_RESOLUTION[@]}"
+ ;;
+ $EEEPC_ROTATE) # Rotate screen.
+ logger "acpi-eeepc-generic-handler: (hotkey): Rotate"
+ execute_commands "${COMMANDS_ROTATE_TOGGLE[@]}"
+ ;;
+ $EEEPC_BRIGHTNESS_UP|$EEEPC_BRIGHTNESS_DOWN) # Brightness
+ brightness_direction=`brightness_find_direction`
+ if [ "$brightness_direction" == "up" ]; then
+ execute_commands "${COMMANDS_BRIGHTNESS_UP[@]}"
+ brightness_percentage=`brightness_get_percentage`
+ [ "$brightness_percentage" != "100" ] && logger "acpi-eeepc-generic-handler: (hotkey): Brightness Up ($brightness_percentage%)"
+ #[ "$brightness_percentage" != "100" ] && eeepc_notify "Brightness Up ($brightness_percentage%)" dialog-information
+ elif [ "$brightness_direction" == "down" ]; then
+ execute_commands "${COMMANDS_BRIGHTNESS_DOWN[@]}"
+ brightness_percentage=`brightness_get_percentage`
+ [ "$brightness_percentage" != "0" ] && logger "acpi-eeepc-generic-handler: (hotkey): Brightness Down ($brightness_percentage%)"
+ #[ "$brightness_percentage" != "0" ] && eeepc_notify "Brightness Down ($brightness_percentage%)" dialog-information
+ fi
+ ;;
+ $EEEPC_SCREEN_OFF) # Turn off screen
+ execute_commands "${COMMANDS_SCREEN_OFF[@]}"
+ eeepc_notify "Turning screen off..." dialog-information
+ ;;
+ $EEEPC_XRANDR_TOGGLE) # RandR
+ execute_commands "${COMMANDS_XRANDR_TOGGLE[@]}"
+ eeepc_notify "Toggling displays..." video-display
+ ;;
+ $EEEPC_XRANDR_TOGGLE_0) # RandR
+ execute_commands "${COMMANDS_XRANDR_TOGGLE[@]}"
+ eeepc_notify "Toggling displays..." video-display
+ ;;
+ $EEEPC_XRANDR_TOGGLE_1) # RandR
+ execute_commands "${COMMANDS_XRANDR_TOGGLE[@]}"
+ eeepc_notify "Toggling displays..." video-display
+ ;;
+ $EEEPC_XRANDR_TOGGLE_2) # RandR
+ execute_commands "${COMMANDS_XRANDR_TOGGLE[@]}"
+ eeepc_notify "Toggling displays..." video-display
+ ;;
+ $EEEPC_TASKMAN) # Task Manager
+ logger "acpi-eeepc-generic-handler: (hotkey): Task Manager"
+ execute_commands "${COMMANDS_TASKM[@]}"
+ ;;
+ $EEEPC_VOL_MUTE) # Mute
+ logger "acpi-eeepc-generic-handler: (hotkey): Mute"
+ execute_commands "${COMMANDS_MUTE[@]}"
+ if [ "`volume_is_mute`" == "1" ]; then
+ volume_icon="audio-volume-muted"
+ mute_toggle=""
+ elif [ "`volume_is_mute`" == "0" ]; then
+ volume_icon="audio-volume-medium"
+ mute_toggle="Un"
+ fi
+ eeepc_notify "${mute_toggle}Mute (`get_volume`%)" $volume_icon
+ ;;
+ $EEEPC_VOL_DOWN) # Volume Down
+ if [ "`volume_is_mute`" == "1" ]; then
+ volume_icon="audio-volume-muted"
+ elif [ "`volume_is_mute`" == "0" ]; then
+ volume_icon="audio-volume-low"
+ fi
+ if [ "`get_volume`" != "0" ]; then
+ execute_commands "${COMMANDS_VOLUME_DOWN[@]}"
+ eeepc_notify "Volume Down (`get_volume`%)" $volume_icon
+ fi
+ ;;
+ $EEEPC_VOL_UP) # Volume Up
+ if [ "`volume_is_mute`" == "1" ]; then
+ volume_icon="audio-volume-muted"
+ elif [ "`volume_is_mute`" == "0" ]; then
+ volume_icon="audio-volume-high"
+ fi
+ if [ "`get_volume`" != "100" ]; then
+ execute_commands "${COMMANDS_VOLUME_UP[@]}"
+ eeepc_notify "Volume Up (`get_volume`%)" $volume_icon
+ fi
+ ;;
+ 00000050|00000051) # AC is plugged-in or unplugged
+ # Don't do anything, should be handled in ac_adapter group
+ ;;
+# 00000052) # battery level critical
+# logger "Battery is critical, suspending"
+# $BATTERY_CRITICAL &
+# ;;
+ *)
+ msg="Hotkey (hotkey) undefined: $2 $3 $4"
+ eeepc_notify "$msg" keyboard
+ ;;
+ esac
+ ;;
+ *)
+ if [ "$NOTIFY_IGNORE_UNKNOWN" != "yes" ]; then
+ msg="acpi-eeepc-generic-handler: undefined group/action ($1) event: $2 $3 $4"
+ eeepc_notify "$msg" keyboard
+ logger "$msg"
+ fi
+ ;;
+esac
+