diff --git a/acpid.changes b/acpid.changes index 89fa14f..459dbf9 100644 --- a/acpid.changes +++ b/acpid.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Jan 15 15:29:10 UTC 2013 - trenn@suse.de + +- Catch and process sleep event correctly, even if no X is + running. + ------------------------------------------------------------------- Sun Sep 23 04:00:57 UTC 2012 - crrodriguez@opensuse.org diff --git a/acpid.spec b/acpid.spec index 718b430..bd49292 100644 --- a/acpid.spec +++ b/acpid.spec @@ -1,7 +1,7 @@ # # spec file for package acpid # -# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,6 +16,7 @@ # + Name: acpid Version: 2.0.17 Release: 0 @@ -28,10 +29,13 @@ Source2: rcacpid Source3: README.SuSE Source4: thinkpad_acpi.modprobe Source5: events.power_button -Source9: events.thinkpad Source6: thinkpad_handler Source7: power_button Source8: acpid.service +Source9: events.thinkpad +Source10: events.sleep_button +Source11: sleep_button + # PATCH-MISSING-TAG -- See http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines Patch1: acpid-makefile.patch BuildRequires: systemd @@ -54,7 +58,7 @@ Configure it in /etc/sysconfig/powermanagement. %setup -q %patch1 -cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE7} %{SOURCE9} . +cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE7} %{SOURCE9} %{SOURCE10} %{SOURCE11} . %build export LDFLAGS="-Wl,-z,relro,-z,now" @@ -67,9 +71,11 @@ install -Dm 744 rcacpid %{buildroot}%{_initddir}/acpid install -Dm 644 thinkpad_acpi.modprobe %{buildroot}%{_sysconfdir}/modprobe.d/50-thinkpad_acpi.conf install -Dm 744 thinkpad_handler %{buildroot}%{_prefix}/lib/acpid/thinkpad_handler install -Dm 744 power_button %{buildroot}%{_prefix}/lib/acpid/power_button +install -Dm 744 sleep_button %{buildroot}%{_prefix}/lib/acpid/sleep_button mkdir -p %{buildroot}%{_prefix}/sbin ln -sf ../../etc/init.d/acpid %{buildroot}%{_sbindir}/rcacpid install -Dm 644 events.power_button %{buildroot}%{_sysconfdir}/acpi/events/power_button +install -Dm 644 events.sleep_button %{buildroot}%{_sysconfdir}/acpi/events/sleep_button install -Dm 644 events.thinkpad %{buildroot}%{_sysconfdir}/acpi/events/thinkpad mkdir -p %{buildroot}/%{_unitdir} install -m 644 %{SOURCE8} %{buildroot}/%{_unitdir} @@ -103,6 +109,7 @@ touch %{buildroot}%{_localstatedir}/log/acpid %dir %{_sysconfdir}/acpi/events %{_sysconfdir}/acpi/events/thinkpad %{_sysconfdir}/acpi/events/power_button +%{_sysconfdir}/acpi/events/sleep_button %{_prefix}/lib/acpid %{_sysconfdir}/init.d/acpid %{_sysconfdir}/modprobe.d/50-thinkpad_acpi.conf diff --git a/events.sleep_button b/events.sleep_button new file mode 100644 index 0000000..d284959 --- /dev/null +++ b/events.sleep_button @@ -0,0 +1,5 @@ +# handle sleep button event + +event=button/sleep.* +action=/usr/lib/acpid/sleep_button + diff --git a/sleep_button b/sleep_button new file mode 100644 index 0000000..6528f5b --- /dev/null +++ b/sleep_button @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Sleep button suspend script, adapted from +# /usr/lib/acpid/power_button +# +# Copyright (C) 2008 Holger Macht +# +# This file is released under the GPLv2. +# + +EXEC=/usr/sbin/pm-suspend + +# iterate over all sessions. If a active X session is found, do nothing +while read A; do + SESSION=`echo $A | sed 's/\(Session[0-9]*\)://g'` + [ -z "$SESSION" ] || continue + + SESSION=`echo $A | sed 's/\(Session[0-9]*\):/\1/g'` + IS_X=`dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \ + /org/freedesktop/ConsoleKit/$SESSION \ + org.freedesktop.ConsoleKit.Session.GetX11Display` + + # check if this is a X session, if not, go on + DISP=`echo $IS_X | sed -e 's/^.* string "\(.*\)"/\1/'` + [ -n "$DISP" ] || continue + + IS_ACTIVE=`dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit \ + /org/freedesktop/ConsoleKit/$SESSION \ + org.freedesktop.ConsoleKit.Session.IsActive` + IS_ACTIVE=`echo $IS_ACTIVE | sed -e 's/^.* boolean \(.*\)$/\1/'` + + if [ "$IS_ACTIVE" = "true" -a -n "$DISP" ]; then + # additional check, if none of these two apps are running, go on + if [ -n "`pidof kpowersave`" -o -n "`pidof gnome-power-manager`" -o -n "`pidof kded4`" ]; then + echo doing nothing... + exit 0 + fi + fi +done < <(ck-list-sessions) + +logger -s "Sleep Button event received, running $EXEC." +$EXEC