http://mjg59.livejournal.com/106581.html
One of the points I
made in my presentation at LCA this year was that
for power management to be effective, it needs to be something that
works without anyone having to think about it. One aspect of that is
ensuring that it doesn't get in the way of the user, since otherwise
the user will eventually get irritated and turn it off. Part of my work
at Red Hat is coming up with ways to not only offer power management
functionality, but to make it sufficiently useful and inobtrusive that
manual configuration is almost never required.
Screensavers
are an interesting case. We have a good idea of whether most hardware
is "doing something" or not, based on whether it's generating traffic
or an application has it open. This is less true of screens - the
resource making use of the display is the user, and it's entirely
possible for the user to be reading or watching something[1] onscreen
without us getting any feedback from them. It's common to see people
noticing that their screensaver is activating and hitting the mouse or
keyboard to stop it. What's the correct solution?
One solution
is to have the user increase the screensaver timeout. This is a poor
solution - it's one of those "Think about what you're going to be doing
with the computer before starting to do it" ideas that I dislike a lot.
Computers are there to serve the user, not the other way around. The
other downside to this is that the timeout will be left at a large
number and monitors will be turned on for significantly longer than
necessary.
Another is to pay attention to what the user's doing.
If they keep hitting the keyboard just as the screensaver's activating,
it's because they want a larger timeout. It's not difficult to give
them that. I spent a while today playing with various complex
implementations, but I finally came down to a simple one:
- If
the user generates activity while the screen is blanking or immediately
afterwards, bump the timeout by 10 minutes. Perform a further increase
each time they do this.
- If the screen is
successfully blanked and the user doesn't immediately unblank it, reset
the timeout to the original value
Another
option would be to double the timeout each time the user unblanks the
screen, and that may be what I end up going with. A more complex
solution might be to keep track of the user behaviour and tie it to
time of day (if the system goes idle at 3:30, you might as well blank
straight away - they've gone to grab a coffee or something), but I'm
leaning towards thinking that that's overkill.
To test this out,
I've actually gone to the extent of setting my default screensaver
timeout to a minute. We'll see whether it gets irritating. I suspect
that there's some more fine tuning to do, and I may want some kind of
decay function rather than immediately pushing the timeout back to the
original value.
Next job is to think about whether there's any
reason to not just enter DPMS straight away if the user's selected a
blank screen...
[1] I'm thinking along the lines of IRC
conversations or logfiles rather than films - media players should be
talking to the screensaver already
|