Управление энергосбережением под Linux

В настоящее время уже наверно не выпускаются мониторы, не поддерживающие функций энергосбережения. Здесь я хочу рассказать подробнее об этих функциях и о том, как их использовать под управлением ОС Linux.
Несколько вводных слов
Согласно стандарту управления энергопотреблением мониторов, монитор может находиться в четырёх различных режимах. Эти режимы отличаются набором узлов, находящихся в рабочем состоянии. Продолжительность выхода монитора на нормальную работу из режима энергосбережения также различна для разных режимов.
С помощью DPMS (Display Power Management Signals) можно программно управлять двумя основными узлами монитора: блоком вертикальной развертки и блоком горизонтальной развертки. Кроме того, во всех режимах энергосбережения с трубки снимается напряжение и электронный луч гасится.
Первый режим -- Normal operation, никакого энергосбережения нет, это режим нормальной работы. Все узлы монитора функционируют. Это единственный режим работы, при котором на трубку подаётся высокое напряжение и луч совершает свои движения по экрану.
Второй режим -- Stand-by mode, я бы перевёл это как режим резервирования. В этом режиме блок вертикальной развертки продолжает вырабатывать сигнал, а блок горизонтальной развёртки отключается. Это позволяет сэкономить около 10 Вт. Монитор выходит из этого режима практически мгновенно.
Третий режим -- Suspend mode, отложенный режим. В этом режиме отключается блок вертикальной развёртки, но блок горизонтальной развёртки продолжает функционировать. Энергопотребление монитора в этом режиме обычно не превышает 15 Вт. К нормальной работе монитор возвращается ощутимо дольше, чем при выходе из режима Stand-by mode.
Четвёртый режим -- Power-off mode, отвечает полному отключению питания от узлов развёртки. Выход из этого режима требует почти столько же времени, сколько необходимо монитору при включении питания. В этом режиме обычный монитор потребляет не более 5 Вт.
Управление консолью
Управление энергосбережением консоли осуществляется с помощью программы setterm. Консоль может находиться в трёх состояниях: нормальная работа, погашенный экран (blank) и энергосберегающий режим. Причем, энергосбережение может быть включено только после того, как экран погашен.
Для установления интервалов времени, через которое консоль будет менять своё состояние, используется две команды:
setterm -blank #
setterm -powerdown #
Первая из них устанавливает время в минутах, через которое экран будет гаситься. Вторая -- время, по прошествии которого будет включаться режим энергосбережения.
Здесь уместно отметить, что гашение экрана не имеет никакого отношения к энергосбережению. При погашенном экране с него просто удаляется изображение, но все узлы монитора продолжают функционировать.
Чтобы определить, какой именно режим энергосбережения будет установлен, следует использовать следующие команды:
для режима Stend-by mode:
setterm -powersave hsync
для режима Suspend mode:
setterm -powersave vsync
или
setterm -powersave on
для режима Power-off mode:
setterm -powersave powerdown
чтобы запретить энергосбережение:
setterm -powersave off
Например, Вы хотите, чтобы при отсутствии каких-либо действий со стороны пользователя в течение двух минут, консоль гасла, а по прошествии ещё десяти минут, монитор переходил в состояние Power-off mode. Тогда Вам следует включить куда-нибудь в rc.locale следующие команды:
setterm -blank 2
setterm -powerdown 12
setterm -powersave powerdown
Следует также оговориться. Дело в том, что правильность работы setterm зависит от версии самой утилиты и версии ядра. Надежно работает только режим Power-off. Остальные режимы могут вызываться не вполне корректно, например вместо одного -- другой.
Управление энергопотреблением монитора в X
Настроить X-сервер можно двумя способами. Первый -- с помощью утилиты xset, включив её вызов в скрипт, запускающий X Window System, это обычно startx, или .xinit. Второй, на мой взгляд более изящный, способ -- внести необходимые изменения в XF86Config. Я опишу оба способа. Здесь я не буду касаться вопросов сохранения экрана и управления screensaver'ами.
Настройка с помощью xset
Вся настройка производится одним-двумя вызовами xset. Обязятельно необходимо вызвать
xset dpms T1 T2 T3
где T1, T2, T3 -- интервалы времени в секундах, через которые активизируются режимы Stend-by mode, Suspend mode, Power-off mode, соответственно. Естественно необходимо выполнить условие T1>=T2>=T3. Если одно из чисел равно нулю, то соответствующий режим не включается.
Если Ваш X-сервер не поддерживает энергосбережение по умолчанию (а обычно именно так и случается), то Вам придётся выполнить ещё одну команду:
xset +dpms
которая разрешит серверу включать режимы энергосбережения. Это можно сделать и передав X-серверу ключ dpms. Например, при вызове xinit:
xinit -- dpms
(обратите внимание на то, что между "--" и "dpms" есть пробел).
Чтобы снова отключить энергосбережение, можно использовать команду:
xset -dpms
Здесь уместно сказать об одной возможности, могущей оказаться небесполезной. С помощью команды xset можно принудительно включать различные режимы эергосбережения:
xset dpms force stendby
xset dpms force suspend
xset dpms force off
Все эти команды вызывают переход монитора в экономичный режим только при условии, что энергосбережение разрешено (xset +dpms).
Настройка с помощью XF86Config
Здесь необходимо выполнить те же установки, что и при вызове xset.
Чтобы разрешить серверу запуск режимов энергосбережения, необходимо добавить в секцию Device запись:
Option "power_saver"
Теперь остается только добавить в секцию Screen записи:
StandbyTime T1
SuspendTime T2
OffTime T3
где T1, T2, T3, как и ранее интервалы времени, через которые активизируются режимы Stend-by mode, Suspend mode, Power-off mode, соответственно, но здесь время уже выражается не в секундах, а в минутах.
Мичурин Алексей
Alexey Michurin