Доброго всем дня!
Имею ноутбук Asus A3500G. После установки на него KUbuntu 7.04 заработало почти все, в том числе - и многие "аппаратные" кнопки (в том числе управления проигрывателем). Однако, не было реакции на нажатие ряда кнопок, например, кнопки "Схема питания" (на Asus логотип - бегущий человечек), которая в Windows с помощью соответствующего драйвера ATK позволяет выбирать (циклически) один из режимов энергопотребления. Я решил исправить это недоразумение. Приведенные ниже шаги так же могут помочь владельцам и других ноутбуков.
Для начала, следует сказать, что поддержка событий от этих кнопок реализуется через ACPI, т.е. в Linux поддержка возможна через acpid.
Следовательно, в системе должны быть установлены пакеты:
Так как я хотел, чтобы реакция была наиболее близка к той, что наблюдается в Windows, то я выбрал kpowersave для управления схемами питания (он уже установлен, как правило, с KDE).
Для начала я решил посмотреть - какое же событие она отдает. Для этого воспользовался acpi_listen. Запускаем его:
# acpi_listen
и нажимаем интересующую нас кнопку, получаем:
hotkey ATKD 0000005c 00000044
Копируем (мышью, разумеется) третье число, и идем искать его в /etc/acpi/events:
# grep 0000005c events/*
events/asus-lock:event=hotkey ATKD 0000005c
Смотрим все содержимое:
# 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
Хм... Зачем там lock, мне не понятно. Более того, то событие, которые там вызывается (в /etc/acpi/lockbtn.sh), у меня по-умолчанию ничего не вызывает.
Чтобы исправить ситуацию, я решил создать свое событие, для этого создал файл
/etc/acpi/events/asus-powerscheme следующего содержания:
# /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
Разумеется, так как в нем указан обработчик события /etc/acpi/powerscheme.sh, то нам нужно создать его:
/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
Что он делает? При наступлении события обработчик первым делом проверяет - не в состоянии ли пробуждения система, если да - то делать ничего не надо. Если же нет, то проверяется, запущен ли kpowersave, dcopserver, есть ли /usr/bin/dcop, загружен ли kded.
Если да, то с помощью dcop происходит обращение к любому запущенному kpowersave, считывается список возможных схем питания (обычно это Performance, Powersave, Presentation, Acoustic), текущая схема, на основе этого циклически выбирается следующая, и посылается сообщение kpowersave. В самом же kpowersave у меня настроены уведомления всплывающим окном при изменении схем.
Если файлы созданы правильно (ошибок в коде нет), то после рестарта acpid
# /etc/init.d/acpid restart
при нажатии кнопки выбора схемы питания выберется следующая по циклу схема, о чем kpowersave и проинформирует всплывающим окно.
Как это выглядит - видно на прикрепленном изображении.
Разумеется, остальная функциональность kpowersave не изменилась.
В прикрепленном архиве - оба нужных файла.
Что дальше?Разумеется, поддержка powerseved в консоли, и... Может, что-то еще?

[вложение удалено Администратором]