[Pkg-acpi-devel] Bug#714620: acpi-support: Laptop's display won't wake from DPMS off state on lid open event with xrandr method
Denys Gavrysh
deg at ciklum.com
Mon Jul 1 11:41:34 UTC 2013
Package: acpi-support
Version: 0.140-5
Severity: normal
Tags: patch
Dear Maintainer,
There is a problem with waking from DPMS off state then my laptop's lid is open while using xrandr.
Usage scenario:
1. Set "DISPLAY_DPMS=xrandr" and "XRANDR_OUTPUT=LVDS1" options in /etc/default/acpi-support files.
2. Close the lid, Laptop panel go dark.
3. Open the lid and nothing happens, screen remain dark, keyboard and mouse movements does not help.
I have discovered that the problem lies in /etc/acpi/lid.sh on line 35:
xrandr invoked with hardcoded output 'LVDS', but my Intel KMS driver assign 'LVDS1' name.
I suggest to use variable with default value, for example:
xrandr --output ${XRANDR_OUTPUT:-LVDS} --auto
Same can be applied in /usr/share/acpi-support/screenblank:
xrandr --output ${XRANDR_OUTPUT:-LVDS} --off
This worked just fine until I have uncommented "LID_SLEEP=true" option.
I think that some race condition is happening in such case:
then lid was closed, screenblank script invokes xrandr with --off and laptop immediately goes to sleep.
It seems display does not have time to actually turn off by xrandr, it was turned off by pm-suspend.
And then laptop awake, lid open event occurs and display is enabling by lid.sh.
But it is turning off in next moment, that brings me to the original problem described above.
I added 'sleep' after xrandr and it works, but it's not clean solution I suppose.
Maybe we really don't need to do DPMS off while going to sleep?
Here are my patches:
--- debian/patches/lid.sh.diff 2013-07-01 11:45:34.000000000 +0300
+++ debian/patches/lid.sh.diff 2013-07-01 13:56:39.298838245 +0300
@@ -57,7 +57,7 @@
+ su $XUSER -s /bin/sh -c "xset dpms force on"
+ ;;
+ xrandr)
-+ su $XUSER -s /bin/sh -c "xrandr --output LVDS --auto"
++ su $XUSER -s /bin/sh -c "xrandr --output ${XRANDR_OUTPUT:-LVDS} --auto"
+ ;;
+ vbetool)
+ /usr/sbin/vbetool dpms on
--- debian/patches/screenblank.diff~ 2013-07-01 11:45:34.000000000 +0300
+++ debian/patches/screenblank.diff 2013-07-01 14:20:11.775168681 +0300
@@ -33,31 +33,33 @@
+ su $XUSER -s /bin/sh -c "/usr/bin/xlock -mode blank &"
+ elif [ -x /usr/bin/xtrlock ]; then
+ su $XUSER -s /bin/sh -c "/usr/bin/xtrlock &"
-+ fi
++ fi
+ fi
+
-+ case "$DISPLAY_DPMS" in
-+ xset)
-+ su $XUSER -s /bin/sh -c "xset dpms force off &"
-+ ;;
-+ xrandr)
-+ su $XUSER -s /bin/sh -c "xrandr --output $XRANDR_OUTPUT --off"
-+ ;;
-+ vbetool)
-+ /usr/sbin/vbetool dpms off
-+ ;;
-+ esac
++ if [ x$LID_SLEEP != xtrue ]; then
++ case "$DISPLAY_DPMS" in
++ xset)
++ su $XUSER -s /bin/sh -c "xset dpms force off &"
++ ;;
++ xrandr)
++ su $XUSER -s /bin/sh -c "xrandr --output ${XRANDR_OUTPUT:-LVDS} --off"
++ ;;
++ vbetool)
++ /usr/sbin/vbetool dpms off
++ ;;
++ esac
-xset dpms force off
-if [ x$RADEON_LIGHT = xtrue ]; then
- [ -x /usr/sbin/radeontool ] && radeontool light off
-fi
-+ if [ x$RADEON_LIGHT = xtrue ]; then
-+ [ -x /usr/sbin/radeontool ] && radeontool light off
++ if [ x$RADEON_LIGHT = xtrue ]; then
++ [ -x /usr/sbin/radeontool ] && radeontool light off
++ fi
+ fi
+ else
-+ if [ -x$DISPLAY_DPMS_NO_USER = xtrue ]; then
++ if [ x$DISPLAY_DPMS_NO_USER = xtrue -a x$LID_SLEEP != xtrue ]; then
+ [ -x /usr/sbin/vbetool ] && /usr/sbin/vbetool dpms off
-+ fi
++ fi
+ fi
+done
-- System Information:
Debian Release: wheezy
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Kernel: Linux 3.2.0-4-amd64 (SMP w/1 CPU core)
Locale: LANG=uk_UA.UTF-8, LC_CTYPE=uk_UA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
More information about the Pkg-acpi-devel
mailing list