[mythtv] DPMS inhibit issues in 0.28

Michael T. Dean mtdean at thirdcontact.com
Sun Apr 26 18:34:43 UTC 2015


On 04/26/2015 02:10 PM, Michael T. Dean wrote:
> On 04/25/2015 11:57 AM, dennis wrote:
>>
>>
>> On 04/25/2015 10:10 AM, Jim Stichnoth wrote:
>>> On Sat, Apr 25, 2015 at 7:21 AM, dennis <deg at outlook.com 
>>> <mailto:deg at outlook.com>> wrote:
>>>
>>>     Hi,
>>>
>>>     I'm running ubuntu 14.04 but not using gnome screensaver and
>>>     using DPMS to shut the monitor off after 10 minutes of
>>>     inactivity.  It appears that inhibit DPMS is no longer working in
>>>     in the latest build of 0.28, after 10 minutes of watching TV my
>>>     screen goes blank by DPMS.  I have noticed some changes in the
>>>     logs when starting and stopping playback and no longer seeing
>>>     DPMS messages.
>>>
>>>
>>> https://code.mythtv.org/trac/ticket/12435
>>> https://code.mythtv.org/trac/ticket/12438
>>>
>>> These are being looked into, but that's the risk you take running 
>>> master. :)
>>>
>>
>> Just thought I would ask before creating a ticket to report it.  It 
>> didn't show up yet in a google search.
>>
>> I was aware of commits in this area before building,  so I wasn't 
>> surprised that there was some regression here.  I enjoy debugging and 
>> digging into code.  I see the risk as fun, and helping to making the 
>> project better :)
>
> If you're compiling your own build of MythTV, just get rid of the 
> compile-time check that forces the use of the DBus screensaver control 
> and instead make it use the X11 screensaver control:
>
> https://github.com/MythTV/mythtv/blob/master/mythtv/libs/libmythui/screensaver.cpp#L27 
>
>
> Until Stuart writes support for runtime checking of which screensaver 
> controller to use, if you're compiling with DBus support, you won't 
> get the X11 screensaver support (which allows use of DPMS or 
> xscreensaver), nor will you get the OS X screensaver support.
>
> Mike

FWIW, if anyone is interested in working on a patch, the new code will 
have to be changed to do a runtime check, something like:

https://github.com/MythTV/mythtv/commit/dd96b80f#diff-e68a289d9e5d8b92bd9d39461cf38ea2

but the challenge is properly detecting whether DBus control will 
actually work.  Unfortunately, the only "required" DBus methods in the 
Freedesktop specification are Inhibit and Uninhibit (  
http://people.freedesktop.org/~hadess/idle-inhibition-spec/re01.html) 
and there are none to say whether a DBus-enabled screensaver is actually 
running (and, if nothing else GNOME3/gnome-shell screen saver implements 
only the required methods, so we can't assume others will be there).

Therefore, my recommendation would be to move the DPMS-support out of 
screensaver-x11.cpp and into a ScreenSaverDPMS helper class (which has 
the code to detect whether DPMS is enabled, as well as DisableDPMS and 
RestoreDPMS), then move the code that checks whether xscreensaver is active:

https://github.com/MythTV/mythtv/blob/master/mythtv/libs/libmythui/screensaver-x11.cpp#L40

into a static function in ScreenSaverX11.  Then, change ScreenSaverX11 
/and/ ScreenSaverDBus to make calls to ScreenSaverDPMS in addition to 
their xscreensaver/DBus activities and the detection code would be 
something like:

#if defined(USING_X11)
#if defined(USING_DBUS)
     if (ScreenSaverX11::IsXScreenSaverRunning())
#endif    // USING_DBUS
         ScreenSaverSingleton = new ScreenSaverX11();
#if defined(USING_DBUS)
     else
         ScreenSaverSingleton = new ScreenSaverDBus();
#endif    // USING_DBUS
#elif CONFIG_DARWIN

where the above assumes that DBus screensaver control is only valid on 
X11-based systems, which I think is correct(?).

This way, if xscreensaver is running (which is the only way the 
xscreensaver control will work), we use its control mechanism (since it 
does not and will not support DBus).  Otherwise, we use DBus control.  
Since we can't know if DBus control will work, DBus control has to be 
the fallback.  And, we still make DPMS calls (if DPMS is enabled on the 
server) whether we use xscreensaver or DBus to control the actual 
screensaver.  However, if MythTV is compiled without DBus support, we 
will just use the xscreensaver control (which will still make DPMS calls).

Mike


More information about the mythtv-dev mailing list