Bug 3041 - Inconsistent interpretation of DPMS timing parameters
Summary: Inconsistent interpretation of DPMS timing parameters
Status: RESOLVED NOTABUG
Alias: None
Product: xorg
Classification: Unclassified
Component: App/xset (show other bugs)
Version: 6.8.1
Hardware: x86 (IA32) Linux (All)
: high normal
Assignee: Xorg Project Team
QA Contact: Xorg Project Team
URL:
Whiteboard: 2011BRB_Reviewed
Keywords:
Depends on:
Blocks:
 
Reported: 2005-04-15 13:36 UTC by Bob
Modified: 2011-09-25 09:44 UTC (History)
4 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Description Bob 2005-04-15 13:36:14 UTC
For the three DPMS timing parameters (blank, suspend, off), xset enforces the
restriction t1 <= t2 <= t3, which is suitable for absolute times.  The actual
behavior is that each parameter is an incremental time from the previous state
change.  Because of the enforcement of the numerical values, the interval
between blanking the screen and entering suspend mode must be at least as long
as the inactivity time for the initial blanking, and the "off" delay is
similarly restricted.  For example, running "xset dpms 10 20 30" results in a
total delay to the "off" state of 60 minutes, not 30 minutes.

This bug has also been posted at
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=149431 .

The "xscreensaver-demo -prefs" interface to the DPMS timing parameters also
suffers from this same problem.  There, the t1<=t2<=t3 restriction is documented
and silently enforced.
Comment 1 Daniel Stone 2007-02-27 01:26:21 UTC
Sorry about the phenomenal bug spam, guys.  Adding xorg-team@ to the QA contact so bugs don't get lost in future.
Comment 2 Jeremy Huddleston Sequoia 2011-09-24 17:32:15 UTC
Is this still a problem?  If it is, what makes you think the problem is actually with xset?
Comment 3 Alan Coopersmith 2011-09-25 09:44:42 UTC
xset checks the parameters just so that it can give a more friendly error
message than the BadValue you'd get from sending them to the Xserver,
which does the same check:

static int
ProcDPMSSetTimeouts(ClientPtr client)
{
    REQUEST(xDPMSSetTimeoutsReq);

    REQUEST_SIZE_MATCH(xDPMSSetTimeoutsReq);
    if ((stuff->off != 0)&&(stuff->off < stuff->suspend)) 
    {
        client->errorValue = stuff->off;
        return BadValue;
    }
    if ((stuff->suspend != 0)&&(stuff->suspend < stuff->standby))
    {
        client->errorValue = stuff->suspend;
        return BadValue;
    }  

But I've always believed these are appropriate because they are relative to
the same baseline, the last input event - if they're being treated as relative 
to the previous timeout, that would be a bug in the X server, but the xset 
checks are not.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.