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

Reply via email to