How-To: Кнопка смены энергорежимов Asus ноутбуков.

Кнопка энергосбережения Asus ноутбуков в Linux

У вас есть ноутбук Asus, в котором есть специализированная кнопка переключения режимов энергопотребления, и вы хотели бы, чтобы она работала, но не знаете как? А я знаю и готов политься способом с вами.

Мне нравится работать с субноутбуками Asus, да и собственно, любым на платформе Intel Atom, просто потому, что уже есть сгенерированные ядра специально для мини ноутбуков.

На мой ноутбук Asus x50n приходится все допиливать руками. В прошлой статье, я рассказал, как можно заставить отключаться тачпад и задействовать специализированную кнопку, которая для этого и предназначена. Эти методы вполне универсальны и пригодны для 99% дистрибутивов и ноутбуков. Я ждал, что разработчики дистрибутивов, в частности любимой мной Ubuntu вылечат эти маленькие, но очень досадные неприятности, но так и не дождался. Пришлось брать в руки напильник.

Давайте приступим к огранке, друзья.

Стоит брать во внимание, что решение актуально для KDE, а в качестве модуля управления режимов энергопотребления выбрана утилита kpowersave. Специализированные кнопки обрабатываются через ACPI, а потому поднять кнопку можно будет гораздо проще. Дело станется только за разработкой специального скрипта, который будет циклически менять режимы энергопотребления при нажатии.

Таким образом, вырисовывается пошаговая инструкция, как заставить работать кнопку смены энергорежимов.

1. Для начала, убедимся, что в системе присутствуют пакеты:

acpi

acpi-support

2. Узнаем событие, которое отрабатывает нажатие кнопки.

Запускаем acpi_listen:

# acpi_listen

В моем Asus x50n получается результат:

hotkey ATKD 0000005c 00000021

3. Ищем, в каком файле отображается это событие в /etc/acpi/events.

# grep 0000005c events/*

events/asus-lock:event=hotkey ATKD 0000005c

4. Смотрим содержимое файла:

# cat events/asus-lock
# /etc/acpi/events/asus-lock
# This is called when the user presses the power management button and calls
# /etc/acpi/lockbtn.sh for further processing.

event=hotkey ATKD 0000005c
action=/etc/acpi/lockbtn.sh

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

5. Создаем свой сценарий событий при нажатии на кнопку под названием asus-powerscheme и поместим его в /etc/acpi/events/
Содержание файла:

# /etc/acpi/events/asus-powerscheme
# This is called when the user presses the Performance button and calls
# /etc/acpi/powerscheme.sh for further processing.

event=hotkey ATKD 0000005c
action=/etc/acpi/powerscheme.sh

6. Создаем обработчик событий в /etc/acpi/powerscheme.sh
Содержание файла:

#!/bin/bash

# /etc/acpi/powerscheme.sh

# Skip if we just in the middle of resuming.
test -f /var/lock/acpisleep && exit 0

# If kpowersave are running, send signal to it

if pidof kpowersave > /dev/null || (pidof dcopserver > /dev/null && test -x /usr/bin/dcop && /usr/bi
n/dcop kded kded loadedModules | grep -q klaptopdaemon) ; then
if ps -Af | grep -q ‘[k]desktop’ && pidof dcopserver > /dev/null && test -x /usr/bin/dcop ; then
# KDE found
declare -a Schemes
Schemes=(‘/usr/bin/dcop –all-sessions –all-users kpowersave KPowersaveIface listSchemes 2>
/dev/null’)
if [ $? -eq 0 ] ; then
CurrentScheme=’/usr/bin/dcop –all-sessions –all-users kpowersave KPowersaveIface curre
ntScheme’
for ((i=0; i < ${#Schemes[@]}; i++ ))
do
if [ ${Schemes[$i]} == «$CurrentScheme» ] ; then
NextSchemeN=$[$i+1];
if [ $NextSchemeN -ge "${#Schemes[@]}» ] ; then
NextSchemeN=0;
fi
/usr/bin/dcop –all-sessions –all-users kpowersave KPowersaveIface do_setSchem
e «${Schemes[$NextSchemeN]}» >/dev/null
fi
done
fi
fi
fi

7. Перезагружаем ACPIмодуль:

# /etc/init.d/acpid restart

Если все сделано правильно, то после перезагрузки модуля ACPI можно наслаждаться сменой энергорежимов одним нажатием кнопки. Наслаждайтесь.

Обсуждаем на форуме: “How-To: Кнопка смены энергорежимов Asus ноутбуков.”.

  1. Don_John:

    А если стоит gnome, как быть?

  2. Необходимо будет переделать скрипт, вот тебе и универсальность (

  3. Don_John:

    Куда копать?)

  4. Просто переделать скрипт под гномовские приложения, по сути, а в остальном – все оставить прежним. Даже не обязательно зацикливаться на стандартных приложениях управления энергопотреблением. Я давно предлагаю сделать утилиту, которая будет работать в графическом режиме и давать возможность отключать всю перефирию, порты, понижать яркость и прочее, создавая профили и прочее-прочее… только я не программист ( а команда не собирается…