x220-acpi: Add acpi event scripts for Lenovo X220
[shutils.git] / lenovo-x220-linuxacpi / etc / acpi / actions / powerbtn.sh
diff --git a/lenovo-x220-linuxacpi/etc/acpi/actions/powerbtn.sh b/lenovo-x220-linuxacpi/etc/acpi/actions/powerbtn.sh
new file mode 100755 (executable)
index 0000000..39a3d9b
--- /dev/null
@@ -0,0 +1,68 @@
+#!/bin/sh
+# /etc/acpi/powerbtn.sh
+# Taken from Debian's 2.0.4-1 diff file.  This version handles KDE4.
+# Power Button event handler.
+# Checks to see if gnome or KDE are already handling the power button.
+# If not, initiates a plain shutdown.
+
+# getXuser gets the X user belonging to the display in $displaynum.
+# If you want the foreground X user, use getXconsole!
+# Input:
+#   displaynum - X display number
+# Output: 
+#   XUSER - the name of the user
+#   XAUTHORITY - full pathname of the user's .Xauthority file
+getXuser() {
+        user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
+        if [ x"$user" = x"" ]; then
+                startx=`pgrep -n startx`
+                if [ x"$startx" != x"" ]; then
+                        user=`ps -o user --no-headers $startx`
+                fi
+        fi
+        if [ x"$user" != x"" ]; then
+                userhome=`getent passwd $user | cut -d: -f6`
+                export XAUTHORITY=$userhome/.Xauthority
+        else
+                export XAUTHORITY=""
+        fi
+        export XUSER=$user
+}
+
+# Gets the X display number for the active virtual terminal.
+# Output:
+#   DISPLAY - the X display number
+#   See getXuser()'s output.
+getXconsole() {
+        console=`fgconsole`;
+        displaynum=`ps t tty$console | sed -n -re 's,.*/X .*:([0-9]+).*,\1,p'`
+        if [ x"$displaynum" != x"" ]; then
+                export DISPLAY=":$displaynum"
+                getXuser
+        fi
+}
+
+# Skip if we are just in the middle of resuming.
+test -f /var/lock/acpisleep && exit 0
+
+# If the current X console user is running a power management daemon that
+# handles suspend/resume requests, let them handle policy.
+
+getXconsole
+
+# A list of power management system process names.
+PMS="gnome-power-manager kpowersave xfce4-power-manager"
+PMS="$PMS guidance-power-manager.py dalston-power-applet"
+
+# If one of those is running or any of several others,
+if pidof x $PMS > /dev/null ||
+       ( test "$XUSER" != "" && pidof dcopserver > /dev/null && test -x /usr/bin/dcop && /usr/bin/dcop --user $XUSER kded kded loadedModules | grep -q klaptopdaemon) ||
+       ( test "$XUSER" != "" && test -x /usr/bin/qdbus && test -r /proc/$(pidof kded4)/environ && su - $XUSER -c "eval $(echo -n 'export '; cat /proc/$(pidof kded4)/environ |tr '\0' '\n'|grep DBUS_SESSION_BUS_ADDRESS); qdbus org.kde.kded" | grep -q powerdevil) ; then
+       # Get out as the power manager that is running will take care of things.
+    exit
+fi
+
+# No power managment system appears to be running.  Just initiate a plain 
+# shutdown.
+/sbin/shutdown -h now "Power button pressed"
+