Hi Michael, Bart Samwel wrote: > Michael Marsh wrote: >> On Sun, Aug 31, 2008 at 2:02 PM, Bart Samwel <[EMAIL PROTECTED]> wrote: >>> Hi Michael, >>> >>> It seems to follow the right path, but the command is somehow detected >>> as being successful without actually being successful. Could you >>> manually run that last command: >>> >>> /usr/bin/dbus-send --session --dest=org.freedesktop.PowerManagement >>> --type=method_call --print-reply --reply-timeout=2000 >>> /org/freedesktop/PowerManagement org.freedesktop.PowerManagement.Suspend >>> >>> and send me the output? That will tell us more about what's going wrong >>> here. >> # /usr/bin/dbus-send --session --dest=org.freedesktop.PowerManagement >> --type=method_call --print-reply --reply-timeout=2000 >> /org/freedesktop/PowerManagement >> org.freedesktop.PowerManagement.Suspend >> >> Failed to open connection to session message bus: dbus-launch failed >> to autolaunch D-Bus session: Autolaunch error: X11 initialization >> failed. >> >> If it matters, I boot into runlevel 2 and run startx from the console. > > Ahhhh, that's an error I didn't anticipate. Thanks for the info, I'll > try and still get a fix into lenny!
I've got a potential fix. Could you try to replace /usr/share/acpi-support/suspendorhibernate with the attached file and see if it works then? If it does, I'll put that in! 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