среда, февраля 06, 2008

laptop buttons

условия задачи

имеем в наличии: ноутбук Fujitsu-Siemens LIFEBOOK S7110, операционная система Fedora 8, графическая среда GNOME 2.20.2.
надо: сделать так, чтобы работали функциональные клавиши (Fn+...). на первом подходе рассматриваем пять клавиш - Mute, VolumeDown, VolumeUp, BrightnessDown, BrightnessUp.

поехали...

часть 1. яркость.

из коробки управление яркостью работает в консоли и в X-ах на этапе загрузки (rhgb).
при запуске пользовательской сессии GNOME нажатие клавиш приводит к появлению окошка в котором бегает ползунок, отслеживающий нажатие кнопок, но по факту яркость остается без изменений (периодически может слететь на максимум).

почитав HAL Quirk Site автор нарисовал следующую последовательность:
1. нажатие клавиши
2. ядро генерирует событие
3. HAL реагирует на него и генерит в свою очередь соответствующее событие в более унифицированном формате (транслирует scancode в нечто более "понятное", например, нажата клавиша brightness-up)
4. посредством D-BUS какое-то приложение может соответствующим образом прореагировать и инициировать соответствующее действие, в рассматриваемом контексте в среде GNOME таковым приложением является GNOME Power Manager
5. какое-то приложение, прореагировав, выдает результат реакции нагора в D-BUS.
6. HAL инициирует управляющее воздействие ядру...

итого, приходим к выводу, что в данном случае имеются проблемы взаимодействия HAL <-> GPM.

для начала проведем диагностику и убедимся, что с точки зрения HAL все присутствует и работает.

[greg@junkyard ~]$ lshal | grep laptop_panel
info.capabilities = {'laptop_panel'} (string list)
info.category = 'laptop_panel' (string)
laptop_panel.access_method = 'general' (string)
laptop_panel.num_levels = 101 (0x65) (int)


управляемый объект (панель) на месте

[greg@junkyard ~]$ lshal -m

Start monitoring devicelist:
-------------------------------------------------
12:01:03.498: computer_logicaldev_input_4 condition ButtonPressed = brightness-down
12:01:04.637: computer_logicaldev_input_4 condition ButtonPressed = brightness-up
12:01:05.570: computer_logicaldev_input_4 condition ButtonPressed = brightness-down
12:01:06.114: computer_logicaldev_input_4 condition ButtonPressed = brightness-up


управляющие воздействия воспринимаются и корректно интерпритируются (параллельно наблюдаем попытку GPM управлять яркостью, в данном случае слетевшей на максимум).

тут надо отметить, что сама по себе возможность управления яркостью в GNOME не вызывает сомнения (с этим соответствующий апплет справляется). на этот же подвиг способен и GPM - управление яркостью через окно настройки его парамтеров происходит корректно (относительно... при открытии окна, яркость принудительно устанавливается в сохраненное с прошлого раза значение).

нашел в bugzilla.gnome.org аналогичный bug

что касается GPM. тот факт что-то некое popup окошко всплывает и корректно реагирует на нажатия кнопок (ползунок двигается влево вправо), подсказывает, что GPM реагирует на события HAL.

судя по исходным кодам, GPM сам инициируют тока передачу обратно в D-BUS сообщений "установить новое значение яркости".

на данном этапе можно сформулировать два вопроса - корректные ли значения он передает? и что происходит дальше?

(продолжение требует дополнительных исследований...).

часть 2. звук.

(продолжение следует...)

Комментариев нет: