[xmonad] 'resetScreenSaver' from 'Graphics.X11.Xlib.Misc'

YCH dontdieych at gmail.com
Sun Feb 8 13:10:32 UTC 2015


On Wed, Jan 21, 2015 at 3:22 PM, Dontdie YCH <dontdieych at gmail.com> 
wrote:
> Hello,
> 
> I'm looking for what is proper method to inhibit screensaver(DPMS)
> without xscreensaver, KDE, GNOME ... .
> 
> My video player 'bomi'(was cmplayer) try these, in order,
> 
> ~~~
> [App] Initialize screensaver functions.
> [App] Try to connect 'org.gnome.SessionManager'.
> [App] Failed to connect 'org.gnome.SessionManager'. Fallback to
> 'org.freedesktop.ScreenSaver'.
> [App] Failed to connect 'org.freedesktop.ScreenSaver'. Fallback to
> XResetScreenSaver().
> [App] Disable screensaver with XResetScreenSaver().
> ~~~
> 
> But it does not working. I didn't know how I directly deal with X11
> lib. Fortunately, I found 'resetScreenSaver' from
> 'Graphics.X11.Xlib.Misc' that say interface to XResetScreenSaver().
> 
> resetScreenSaver.hs :
> 
> ~~~
> import Graphics.X11.Xlib
> import Graphics.X11.Xlib.Misc
> import Control.Concurrent
> import Control.Monad
> 
> main = do
>     dpy <- openDisplay ""
>     forever $ do
>         putStrLn "reset"
>         resetScreenSaver dpy
>         threadDelay (5*1000000)
> ~~~
> 
> 
> ~~~
> $ xset s 10
> $ runhaskell resetScreenSaver.hs
> ~~~
> 
> Unfortunately, It does not working. `activateScreenSaver` and
> `forceScreenSaver` also does not working.
> 
> But `xset s reset` is working as intended and also there is
> `xdg-screensaver [ suspend | resume | reset ]` command from
> 'xdg-utils' package (Arch). It looks like abstraction layer for xset,
> xscreensaver, KDE, GNOME ... .
> 
> So I'm curious about whether this is bug of xorg or I misunderstand
> something. And what is right way to do this if I don't want any
> screensaver daemon? `xset s` or `xdg-screensaver`?
> 
> Thanks.

I've experiment couple of things and then find relation between 
`getScreenSaver` and `resetScreenSaver`. resetScreenSaver only works if 
I call getScreenSaver immediately before.

Any know about this?

Working as intended,

~~~
$ xset s 5; runhaskell withgetScreenSaver.hs
$ cat withgetScreenSaver.hs
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Misc
import Control.Concurrent
import Control.Monad

main = do
    dpy <- openDisplay ""
    forever $ do
        getScreenSaver dpy
        resetScreenSaver dpy
        threadDelay (3*1000000)
~~~

Does not working as intended,

~~~
$ xset s 5; runhaskell onlyresetScreenSaver.hs
$ cat onlyresetScreenSaver.hs
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Misc
import Control.Concurrent
import Control.Monad

main = do
    dpy <- openDisplay ""
    forever $ do
        resetScreenSaver dpy
        threadDelay (3*1000000)
~~~

If I call `getScreenSaver` outside loop, it also does not working.

~~~
import Graphics.X11.Xlib
import Graphics.X11.Xlib.Misc
import Control.Concurrent
import Control.Monad

main = do
    dpy <- openDisplay ""
    getScreenSaver dpy
    forever $ do
        resetScreenSaver dpy
        threadDelay (3*1000000)
~~~

Thanks



More information about the xmonad mailing list