воскресенье, 23 июня 2013 г.

Продлеваем время работы от аккумулятора на ноутбуке с Ubuntu

Если вам кажется, что ваш ноутбук работает от аккумулятора слишком мало и вы хотели бы как-то продлить его жизнь, то вот вам простой рецепт:

1. Установите пакет laptop-mode. Этот пакет содержит в себе комплект утилит, которые проводят тонкую настройку разных параметров системы так, чтобы всё работало как можно дольше. Настройки хранятся в /etc/laptop-mode/ - если владеете английским можно поковыряться в настройках и ещё больше оптимизировать работу. Хотя и этого хватает.

UPD: Как оказалось, по умолчанию для работы от аккумулятора не меняется режим работы процессора. Это можно изменить, открыв от администратора файл /etc/laptop-mode/conf.d/cpufreq.conf:
gksu gedit /etc/laptop-mode/conf.d/cpufreq.conf
И заменив там BATT_CPU_GOVERNOR=ondemand на BATT_CPU_GOVERNOR=powersave.

2. Если у вас имеется дискретная карта и вы по большому счёту ей не пользуетесь (не играете в тяжёлые игрушки) - её можно отключить. Расскажу на примере своего ноутбука Lenovo G570 - там имеется дискретная карта AMD Radeon HD 6300, но интегрированной Intel HD 3000 мне хватает за глаза.

Я не устанавливал проприетарных драйверов для AMD, использую открытые, которые поставляются вместе с системой. Поэтому отключается всё очень просто, командой вроде (запускать нужно от администратора):
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Для того, чтобы эта команда выполнялась при каждой загрузке системы, её можно добавить в файл /etc/rc.local, перед строчкой exit 0;

Однако, тут возникает проблема, которая проявляется, по крайней мере на моей системе (но не только на моей). Проблема заключается в том, что при выходе из ждущего режима система просто зависает. Чтобы этого избежать, нужно всего лишь включать дискретную видео карту (в данном случае Radeon) перед уходом в ждущий режим и затем включать обратно при выходе из него. Для этого создайте файл /etc/pm/sleep.d/77_amd_toggle со следующим содержимым:
#!/bin/bash
# Script to disable and enable the discrete graphics card before suspend and after resume

case "${1}" in
suspend)
  # We turn it on before suspend to prevent bugs
  echo ON > /sys/kernel/debug/vgaswitcheroo/switch
  ;;

resume)
  # We turn it off after resume to save energy
  # Your GFX would freeze if you turn off discrete card immediately, that's why this delay:
  sleep 3
  echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
  ;;
esac
Итого: система работает от аккумулятора около 5 часов в режиме активной работы в IDE, с кучей открытых вкладок в Chrome, с непрерывно играющей музыкой.