Признайся, сколько раз ты хотел плюнуть в лицо тому маркетологу, который придумывает эти нереальные цифры в десять-двенадцать часов автономной работы ноутбука? Шесть-семь — это уже ближе к истине, да и то только если ОС правильно настроена. А вот как ее правильно настроить — это уже действительно интересный вопрос. Ведь все далеко не так однозначно, как считают разработчики дистрибутивов.

Итак, имеем работающий от аккумулятора ноутбук с Линуксом на борту. Мы используем его наиболее тривиальным образом: слушаем музыку, смотрим киношку, время от времени пописываем статьи в свой блог и серфим в инете. За бортом оставляем редактирование видео и высокопроизводительные игры. Для подобных затей без сети 220 В вряд ли удастся обойтись. Хотим, чтобы время автономной работы было максимальным.

 

Яркость экрана

Начнем с подсветки. В большинстве ноутбуков горячие клавиши управления яркостью посылают сигнал напрямую контроллеру ACPI, поэтому работают одинаково хорошо в любых операционках и даже в настройках BIOS. Также яркость экрана можно контролировать с помощью xbacklight. После установки достаточно выполнить команду

$ xbacklight -set 50

и уровень яркости составит 50%.

Чтобы не мучиться с ручной регулировкой, можно настроить автоматическую регулировку яркости при подключении зарядника к ноутбуку и при его отключении. Для этого нам понадобится простенький скрипт:

#!/bin/sh
echo $1 > /sys/class/backlight/intel_backlight/brightness

Сохрани его в файл /etc/backlight.sh и дай права на исполнение:

$ chmod +x /etc/backlight.sh

Также необходимо написать правило для системы управления оборудованием udev, которое будет запускать наш скрипт. Создай файл /etc/udev/rules.d/backlight.rules:

SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/etc/backlight.sh 3253"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/etc/backlight.sh 2324"

Далее перезагрузи правила udev:

$ sudo udevadm control -R

Теперь при подключении к заряднику яркость будет выставляться в значение 3253 (это 70% от максимальной 4648), а при отключении снижаться до 50% (2324). Обрати внимание, что скрипт работает только с драйвером Intel, для других адаптеров путь в каталоге /sys и значения будут другими.

Скрипт хорош также и тем, что решает знакомую многим линуксоидам проблему сброса яркости до максимальной при подключении/отключении кабеля питания.

 

Видеокарта

Считается, что не менее 80% информации человек получает через зрение. Неудивительно, что немалая доля энергии батареи ноутбука тратится на генерирование изображения на экране.

Использование легких рабочих окружений, потребляющих минимум ресурсов ноутбука, положительно сказывается на экономии заряда батареи. В принципе, можно работать и из командной строки, но в XXI веке таких любителей найдется немного.

Поэтому иногда достаточно будет отключить графические эффекты рабочего стола, а высвободившиеся ресурсы использовать в приложениях, поддерживающих аппаратное ускорение декодирования видео, чтобы разгрузить процессор. Заодно не лишним будет избавиться от различных фоновых процессов типа индексации файлов.

Аппаратное ускорение позволяет перенести выполнение задачи по декодированию видео с процессора на видеокарту. VLC, MPV, MPlayer и основанные на них видеопроигрыватели, а также браузеры Chromium, Firefox, Opera умеют это делать, тем самым снижая энергопотребление.

Настройка аппаратного ускорения в проигрывателе VLC
Настройка аппаратного ускорения в проигрывателе VLC

Проверить, включено ли аппаратное ускорение в Chrome, можно, введя в адресную строку chrome://gpu. В моем случае результат выглядел так:

Статус поддержки аппаратного ускорения после инсталляции Chrome
Статус поддержки аппаратного ускорения после инсталляции Chrome

Как видим, задействованы не все компоненты аппаратного ускорения. Ниже на этой же странице приведен список обнаруженных проблем. Для их решения необходимо перейти по адресу chrome://flags и изменить следующие настройки:

  1. Включить переопределение списка программного рендеринга.
  2. Включить аппаратную растеризацию.
  3. Установить число потоков растрового изображения в значение 4.

Эти настройки относятся к категории экспериментальных и по умолчанию выключены разработчиками, поскольку те не могут оценить качество целевых GPU-драйверов при большом разнообразии дистрибутивов Linux.

Затем следует запустить Chrome с флагом --enable-native-gpu-memory-buffers. Пользователи KDE могут дописать этот флаг в команду запуска Chrome, отредактировав ярлык приложения с помощью kmenuedit.

Статус поддержки аппаратного ускорения после настройки Chrome
Статус поддержки аппаратного ускорения после настройки Chrome
 

Гибридная графика

Счастливые обладатели гибридной графики сталкиваются еще с одной проблемой экономии энергии. Гибридная графика подразумевает наличие в ноутбуке двух видеокарт — интегрированной и дискретной. Последняя — полноценный видеоадаптер, поэтому весьма прожорлива. Решение проблемы очевидно. Работая от батареи, целесообразно выключить дискретную карту и полностью положиться на интегрированное решение.

Прежде чем отключать дискретную графику, необходимо установить пакет acpi_call и загрузить соответствующий модуль ядра:

# modprobe acpi_call

После загрузки модуля следует запустить от имени администратора сценарий следующего содержания (в Arch Linux он уже присутствует в /usr/share/acpi_call/examples/turn_off_gpu.sh):

#!/bin/bash
if lsmod | grep -q acpi_call; then
methods="
_SB.PCI0.P0P1.VGA._OFF
_SB.PCI0.P0P2.VGA._OFF
_SB_.PCI0.OVGA.ATPX
_SB_.PCI0.OVGA.XTPX
_SB.PCI0.P0P3.PEGP._OFF
_SB.PCI0.P0P2.PEGP._OFF
_SB.PCI0.P0P1.PEGP._OFF
_SB.PCI0.MXR0.MXM0._OFF
_SB.PCI0.PEG1.GFX0._OFF
_SB.PCI0.PEG0.GFX0.DOFF
_SB.PCI0.PEG1.GFX0.DOFF
_SB.PCI0.PEG0.PEGP._OFF
_SB.PCI0.XVR0.Z01I.DGOF
_SB.PCI0.PEGR.GFX0._OFF
_SB.PCI0.PEG.VID._OFF
_SB.PCI0.PEG0.VID._OFF
_SB.PCI0.P0P2.DGPU._OFF
_SB.PCI0.P0P4.DGPU.DOFF
_SB.PCI0.IXVE.IGPU.DGOF
_SB.PCI0.RP00.VGA._PS3
_SB.PCI0.RP00.VGA.P3MO
_SB.PCI0.GFX0.DSM._T_0
_SB.PCI0.LPC.EC.PUBS._OFF
_SB.PCI0.P0P2.NVID._OFF
_SB.PCI0.P0P2.VGA.PX02
_SB_.PCI0.PEGP.DGFX._OFF
_SB_.PCI0.VGA.PX02
_SB.PCI0.PEG0.PEGP.SGOF
_SB.PCI0.AGP.VGA.PX02
"

for m in $methods; do
    echo -n "Trying $m: "
    echo $m > /proc/acpi/call
    result=$(cat /proc/acpi/call)
    case "$result" in
        Error*)
            echo "failed"
        ;;
        *)
            echo "works!"
            # break # try out outher methods too
        ;;
    esac
done

else
    echo "The acpi_call module is not loaded, try running 'modprobe acpi_call' or 'insmod acpi_call.ko' as root"
    exit 1
fi

В результате должно появиться нечто подобное:

...
Trying _SB.PCI0.PEG1.GFX0._OFF: failed
Trying _SB.PCI0.PEG0.GFX0.DOFF: failed
Trying _SB.PCI0.PEG1.GFX0.DOFF: failed
Trying _SB.PCI0.PEG0.PEGP._OFF: works!
...

Строка, помеченная "works!", знаменует собой успешное обнаружение дискретной видеокарты и ее отключение до следующей перезагрузки.

 

Процессор

Разгрузка процессора с помощью некоторых шагов, предпринятых в предыдущем разделе, открывает возможность снизить энергопотребление CPU. Здесь нам на помощь придет консольная утилита cpupower. Вернее, целый набор консольных утилит под одним именем.

Возможности инструмента позволяют оперировать частотой процессора, настраивать режимы его работы, руководствуясь требованиями ситуации, а также проводить диагностику текущего состояния.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    3 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии