[SDL] SDL tampers with display power settings on the sly

Erik esigra at gmail.com
Mon Feb 25 02:29:30 PST 2008


Sam Lantinga skrev:
> SDL turns off screensaver by default because 99% of the applications
> which use SDL are games or media players,
I get the point about media players, but games?!? Games are interactive 
like most other programs. It is not like people start a game and then 
just sit there watching it without doing anything at all for several 
minutes. At least that is *not* how I have played games, and I have 
played plenty of them.

> and authors have often requested this functionality.
>   
100% of users that have set up a screensaver want it to work. Although I 
know that SDL targets developers and they decide whether SDL gets used 
or not.

> In SDL 1.3 it will be an API function, but to preserve API compatibility
> it's controlled by an environment variable in SDL 1.2.
>
> Still, it's supposed to restore the settings when you call SDL_Quit().
>   
What about the case when an SDL program is running in a window? What 
happens when the window loses focus? Even if an SDL program was supposed 
to disable the screensaver, it  should certainly not do that when 
running in a window in the background (the user is working with another 
program currently).

> it's supposed to restore the settings when you call SDL_Quit(). Is that happening properly in your application?
That is the wrong question. It should be "Does that happen properly in 
*every* application in *every* codepath, even if an exception is thrown, 
the process is killed or something similar?" And even if it would be 
guaranteed to restore the setting at exit, it would still be broken 
while the program is running (even in background).

And what about reentrance? What if program A is started, reads the 
screensaver settings, disables it. Then program B starts, reads the 
screensaver settings (which is to not have a screensaver). Then program 
A terminates and restorest the screensaver setting. Then program B would 
not have the screensaver disabled any more, as it was intended by SDL. 
But when it terminates it will disable the screensaver again (because 
that was the state when it started), and leave the system broken.

I noticed this comment in the code:
"Note that this doesn't stop anything on Vista if the screensaver has a 
password"

So it seems like some systems protect against this kind of tampering and 
put security first. I just tried it on my system and found out that it 
seems just as secure as Vista in this regard. It will lock the session 
and ask for a password after the specified time, even with an SDL 
program running.

Screensavers are important features that users enable for reasons, so a 
library is not supposed to just turn it off at will, directly against 
the user's orders. Some of the reasons that people use screensavers are:
* Lock the session when they have been away for a minute or so (this 
seems to work despite SDL, at least on my system and Vista).
* Prevent people from looking what is on the screen (even if they are 
not doing anything).
* Make the battery time longer. I really hate it when I have been away 
from the computer for a while and some SDL program running in the 
background has drained the battery so that the system has shut off, when 
it should have turned off the display so that almost no energy would 
have been used while I was away.
* Save energy as such (without thinking about battery time).
* Save display hardware.



More information about the SDL mailing list