Hi Krunoslav,
Krunoslav Sever wrote:
> Today I upgraded to -6 which disabled the sleep button on my (old)
> HP Omnibook 6000, at least on console. Haven't tested if it still works
> from X, though (xfce Desktop).
>
> With -5 the sleep button functioned perfectly from console and from the
> xfce Desktop. After downgrading to -5 again, everything works fine again,
> so it must be the changes between these two versions.
>
> Before downgrading I tried to revert the change in
> /etc/acpi/events/sleepbtn manually and and stop/start
> /etc/init.d/acpi-support, but that didn't have any effect, so I guess
> there have been some more changes (or I forget to restart something
> else?).
>
> The changelog led me to this bug number which I guess is the culprit, so I
> hope this is the right place to post this issue.
>
> Maybe you can provide a workaround, otherwise I will be staying with -5
> for now.
>
> This is a fairly basic lenny installation, just base and some selected
> additional packages, nothing custom. If you should need more details, I
> can provide them later (at work right now).
Sorry about the delay, I've been a bit busy. Could you try replacing the
contents of /usr/share/acpi-support/suspendorhibernate by the contents
of the attached file and tell me the results? This change will be
included to fix another suspend problem in 0.109-6, and if this fixes it
for you, then you are experiencing the same problem and I don't have to
change anything else. For more info, see bugs #496911 an d #497570:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=496911
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=497570
If this doesn't fix things for you, we need to do do some debugging on
your setup. But we'll wait with that until we know that it's necessary!
Cheers,
Bart
#!/bin/sh
#
# How we handle suspend/hibernate is a bit complicated:
#
# If gnome-power-manager or klaptopdaemon are running, we send a fake key
# and that's it. The daemons may have policies that turn off suspend in
# response to suspend keys etc., so we don't want to do anything ourselves.
#
# If not, we follow the SUSPEND_METHODS setting.
#
#
# This script takes parameter "suspend" or "hibernate".
#
. /etc/default/acpi-support
. /usr/share/acpi-support/power-funcs
. /usr/share/acpi-support/device-funcs
. /usr/share/acpi-support/policy-funcs
. /usr/share/acpi-support/key-constants
DeviceConfig;
# The difference between suspend and hibernate
if [ "$1" = "suspend" ] ; then
KEY=$KEY_SLEEP
HIBERNATE_CMD=/usr/sbin/hibernate-ram
PM_UTILS_CMD=/usr/sbin/pm-suspend
DBUS_METHOD=Suspend
DBUS_PARAMS="int32:0"
elif [ "$1" = "hibernate" ] ; then
KEY=$KEY_SUSPEND
HIBERNATE_CMD=/usr/sbin/hibernate-disk
PM_UTILS_CMD=/usr/sbin/pm-hibernate
DBUS_METHOD=Hibernate
DBUS_PARAMS=
else
echo "'Usage: '$0' (suspend|hibernate)'"
fi
#
# Backward compatibility
#
# Backward compatibility for setting USE_HIBERNATE_PACKAGE
if [ "$SUSPEND_METHODS" = "" ] &&
[ "$USE_HIBERNATE_PACKAGE" = "true" ] &&
[ -x "$HIBERNATE_CMD" ] ; then
SUSPEND_METHODS="hibernate"
fi
# Backward compatibility for setups before SUSPEND_METHODS existed.
if [ "$SUSPEND_METHODS" = "" ] ; then
# Legacy configuration -- use the built-in legacy suspend support. We
# can NEVER change this explicitly, because it will break people's
# working suspend setups, especially ones that depend on custom scripts
# in /etc/acpi/suspend.d and /etc/acpi/resume.d.
SUSPEND_METHODS="acpi-support"
fi
#
# Try the SUSPEND_METHODS in order.
#
for METHOD in $SUSPEND_METHODS; do
case $METHOD in
none)
exit
;;
dbus-pm)
if [ -x /usr/bin/dbus-send ] ; then
# Call the power management daemon (which, if it is
# running, we probably don't know about, since we send
# keys if we detect one running that we know of).
if /usr/bin/dbus-send --session \
--dest=org.freedesktop.PowerManagement \
--type=method_call \
--print-reply \
--reply-timeout=2000 \
/org/freedesktop/PowerManagement \
org.freedesktop.PowerManagement.$DBUS_METHOD ;
then
# The other side exists, we have access to it,
# and it received the message. It may have
# failed (I tested this: if pm-suspend returns
# exit code 1, then the return code of dbus-send
# is still 0 and you get no errors), but that
# doesn't matter: the first method in the list
# that we can access is the one that has to do
# it.
exit
fi
# We got a DBUS error, which means that the other side
# does not exist or we don't have access to it. We
# continue by trying the next option.
fi
;;
dbus-hal)
if [ -x /usr/bin/dbus-send ] ; then
# Call HAL directly.
if /usr/bin/dbus-send --system \
--dest=org.freedesktop.Hal \
--type=method_call \
--print-reply \
--reply-timeout=2000 \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.$DBUS_METHOD $DBUS_PARAMS ;
then
# The other side exists, we have access to it,
# and it received the message. It may have
# failed (I tested this: if pm-suspend returns
# exit code 1, then the return code of dbus-send
# is still 0 and you get no errors), but that
# doesn't matter: the first method in the list
# that we can access is the one that has to do
# it.
exit
fi
# We got a DBUS error, which means that the other side
# does not exist or we don't have access to it. We
# continue by trying the next option.
fi
;;
pm-utils)
if [ -x $PM_UTILS_CMD ] ; then
$PM_UTILS_CMD
exit
fi
;;
hibernate)
if [ -x $HIBERNATE_CMD ] ; then
$HIBERNATE_CMD
exit
fi
;;
acpi-support)
if [ "$1" = "hibernate" ] ; then
if [ x$ACPI_HIBERNATE != xtrue ]; then
exit;
fi
# Unset video posting - it's not needed for suspend to
disk
unset POST_VIDEO
unset USE_DPMS
. /etc/acpi/prepare.sh
echo -n $HIBERNATE_MODE >/sys/power/disk
if [ -x /usr/sbin/s2disk ]; then
/usr/sbin/s2disk
else
echo -n "disk" >/sys/power/state
fi
. /etc/acpi/resume.sh
else # $1 = suspend
if [ x$ACPI_SLEEP != xtrue ]; then
exit;
fi
if [ x$LOCK_SCREEN = xtrue ]; then
if pidof xscreensaver > /dev/null; then
for x in /tmp/.X11-unix/*; do
displaynum=`echo $x | sed
s#/tmp/.X11-unix/X##`
getXuser;
if [ x"$XAUTHORITY" != x"" ]; then
export DISPLAY=":$displaynum"
. /usr/share/acpi-support/screenblank
fi
done
fi
fi
# Generic preparation code
. /etc/acpi/prepare.sh
if [ x$DISABLE_DMA = xtrue ] && [ -b /dev/hda ]; then
hdparm -d 0 /dev/hda
fi
echo -n $ACPI_SLEEP_MODE >/sys/power/state
if [ x$RESET_DRIVE = xtrue ] && [ -b /dev/hda ]; then
hdparm -w /dev/hda
hdparm -C /dev/hda
hdparm -C /dev/hda
hdparm -C /dev/hda
hdparm -d 1 /dev/hda
fi
if [ x$DISABLE_DMA = xtrue ] && [ -b /dev/hda ]; then
hdparm -d 1 /dev/hda
fi
# Generic wakeup code
. /etc/acpi/resume.sh
fi
exit
;;
esac
done