X offers two modes of screen blanking: BlankTime and DPMS.
Settings for both can be queried via xset -q
.
BlankTime is "fake" screen blanking: it makes the screen black but the backlight and power supply stay on. It doesn't actually do anything to reduce the power usage. Think of it as a really boring screen saver. The timeout defaults to 10 minutes.
In more recent Xorg versions, like the 7.2 that comes with Ubuntu's "Gutsy Gibbon", BlankTime is gone, and instead there is a Screen Saver section, which includes the options prefer blanking, allow exposures, timeout, and cycle. It works differently, too: prefer blanking actually switches the monitor to powersave mode (the alternative, if you turn it off, is an ugly X cross-hatch pattern) and there doesn't seem to be any way to get the old "fake blank" behavior back. I don't know what the difference is between timeout and cycle; the manual page doesn't say, nor does anyone else. Gutsy sets them both to 600 seconds.
DPMS is display power management. It only works with displays that support that sort of power management (though I suspect most modern displays probably do). DPMS includes three settings:
So the ten-minute screen blanking I've been seeing all along wasn't a power saving mode at all. It was just X turning the display black after the default ten minute timeout.
Where do the timeouts come from?
The default values are built into X, and need not appear anywhere else. That's why, if you grepped for timeouts, you may not have found them.
They can also be set via xset. You can set the blank timeout with:
xset s blank xset s 300will tell X to use screen blanking after the system has been idle for 300 seconds (five minutes).
xset dpms 0 360 420disables DPMS standby and sets the DPMS suspend time to 360 seconds and the off time to 420 seconds. In theory, this combined with the previous xset commands would first blank the screen at five minutes; then at six minutes, the display would go to suspend, turning off another minute later. In practice, this won't work for most people, as we'll see later. (DPMS through xorg seems only to toggle the screen-blanked state -- so if the screen was already blanked, it will actually turn back on! -- rather than going to a power saving state.)
But the timeouts can also be specified in the X configuration file: /etc/X11/xorg.conf. In the "Monitor" section, you need a line like:
Option "DPMS"Then, in the "ServerLayout" section (for Xorg 7.2 and later, make a separate ServerFlags section instead), include lines like this:
Option "BlankTime" "4" Option "StandbyTime" "0" Option "SuspendTime" "0" Option "OffTime" "5"Caution: note the numbers are all small. xorg.conf needs times specified in minutes, not seconds as with xset.
If you're seeing a timeout that isn't one of the defaults, but isn't specified in xorg.conf -- as with the two-minute timeout which set me on this quest in the first place -- you may have to hunt around for a place that's calling xset dpms with a different set of timeouts. In my case, it turned out that Ubuntu Breezy sets the dpms timeouts in /etc/acpi/power.sh, which gets called at boot time. So anything you set in xorg.conf may well get overridden.
Hint: when debugging timeouts, try setting them to unusual numbers like 765 or 666 instead of 300 or 600. That makes it easier to be sure whether you're seeing your own numbers or something coming from a system setting somewhere else.
sleep 1; xset s activatewill blank the screen (or activate the screensaver program, if you're using one) after a delay of one second. You need the delay because X gets a little confused about the order of events; it will blank the screen but immediate un-blank it, thinking the activity of your typing the command happened recently enough to come out of screensaver mode.
sleep 1; xset dpms force offwill turn the screen OFF after a delay of one second. You can also use standby, suspend, or on instead of off.
Did your screen turn off? All the way? No backlight? Then be happy, and skip the rest of this document. Everyone else, read on.
It turns out that Xorg actually doesn't use DPMS when it's supposedly using DPMS, at least on a lot of systems. xset dpms force off merely makes the screen black; the backlight stays on.
Of course, the immediate suspicion is that my hardware doesn't support DPMS properly. It is, after all, an old S3 Savage video card. So how can I test that?
Fortunately, there's an easy way: vbetool. This is the method Ubuntu's sleep.sh uses to turn the monitor off when suspending, and it works fine.
Verify that the backlight does indeed turn off with:
vbetool dpms off(vbetool's dpms options also include on, standby, suspend and reduced.)
If the backlight turns off, the problem isn't the hardware: it's just that Xorg, for reasons unknown, isn't really using DPMS when it says it will. A little googling showed dozens of people reporting this on video cards from at least four different manufacturers, so it's not an isolated occurrence. Nobody seems to have an explanation or a cure. Some people say that eventually the backlight does turn off, but with a delay much much longer than the one that's set (e.g. they set the off timeout to 10 minutes, and their screen blanks at 10 minutes, then the backlight finally turns off at 30 minutes or an hour). That's not really very useful, and it doesn't even happen on all machines. On my laptop, even that doesn't seem to happen; the backlight stays on for as long as I've tested it.
So what if you really do want your backlight to turn off after a specific interval? There doesn't seem to be a way to get Xorg to do it directly. But you can cheat: Write a script that calls vbetool dpms off. Then set that script to be your screensaver.