
За сочувствие и моральную поддержку всем Большое Человеческое Спасиба. :P
-------------------------------------------------------------------
Ноут Dell 500 (2008год, intel Crestline GM965)
Яркость надо понимать регулируется аппаратно, ибо регулировалась во время хождения по настройкам биоса, регулируется в процессе загрузки, в консоле и т.д.
Debian Lenny, Ubuntu 8xx, FCкакая-то годовалая
(работаю в первом, в остальные заглядывал)
Баг1
В убунту и ФС при нажатии клавиш регулировки яркости оная меняется на два шага сразу. Т.е. из минимального уровня можно подняться как 0 - 2 - 4 - 6 - 7, а затем спуститься 7 - 5 - 3 - 1 - 0.
В ленни регулировка работала нормально, потому что: при пользовании "фирменных" клавиш в дмесг сыпались ворнинги, что для них не определена карта сканкод->кейкод в драйвере, после добавления таковой - картина та же, что в убунте и ФС.
Баг2
Регулировка яркости с клавиатуры где-то не доходит до GnomePowerManager - это жывотное получая клавиатурные нажатия где-то не сбрасывает кэшированное значение, как я подозреваю, и то и дело перезаписывает его вниз поверх текущего - яркость дергается с установленной клавишами на нечто, установленное GPM, при открытии его панели настроек, после выхода из скринсейвера и, возможно, иногда через случайные промежутки времени "просто так". Причем апплет гнома "регулировка яркости" измененную с клавиш яркость читает нормально - а он ее запрашивает через дбас с GPM, наск я вижу - когда кликаешь, то в появившемся ползунке движок сдвинут на тот уровень, который выставил клавишами. Дальше смешнее, апплет отсылает значение обратно на GPM через тот же дбас даже если ползун не двигать - и при этом значение в GPM обновляется как надо - после "открыть - закрыть апплет", если открыть контрольную панель GPM, то ползун в нем сдвинулся аналогично апплетовскому, и т.о. выставленная с клавиш яркость легитимировалась и получила прописку.

Дальше подробности
Остановка acpid картины не меняет.
Нажатия клавиш через него проходят, в debug-е логит: acpid: expanded "/etc/acpi/video_brightnessup.sh" -> "/etc/acpi/video_brightnessup.sh",
acpi_listen на нажатия выводит video LCD 00000086 00000000
rmmod video - яркость регулироваться перестает
выключение /sys/module/video/parameters/brightness_switch_enabled картины не меняет
Дальше интереснее.
Код: Выделить всё
~$ lshal | grep -C3 laptop_panel
udi = '/org/freedesktop/Hal/devices/computer_backlight'
info.capabilities = {'laptop_panel'} (string list)
info.category = 'laptop_panel' (string)
info.interfaces = {'org.freedesktop.Hal.Device.LaptopPanel'} (string list)
info.parent = '/org/freedesktop/Hal/devices/computer' (string)
info.product = 'Generic Backlight Device' (string)
info.subsystem = 'backlight' (string)
info.udi = '/org/freedesktop/Hal/devices/computer_backlight' (string)
laptop_panel.access_method = 'general' (string)
laptop_panel.num_levels = 8 (0x8) (int)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = 'backlight' (string)
linux.sysfs_path = '/sys/class/backlight/acpi_video0' (string)
--
udi = '/org/freedesktop/Hal/devices/dell_lcd_panel'
info.addons = {'hald-addon-dell-backlight'} (string list)
info.capabilities = {'laptop_panel'} (string list)
info.category = 'laptop_panel' (string)
info.interfaces = {'org.freedesktop.Hal.Device.LaptopPanel'} (string list)
info.parent = '/org/freedesktop/Hal/devices/platform_dcdbas' (string)
info.product = 'Dell Laptop Panel' (string)
info.subsystem = 'unknown' (string)
info.udi = '/org/freedesktop/Hal/devices/dell_lcd_panel' (string)
laptop_panel.access_method = 'custom' (string)
laptop_panel.brightness_in_hardware = true (bool)
laptop_panel.num_levels = 8 (0x8) (int)
Capability/interface LaptopPanel реализуют два объекта HAL. Причем второй, делловский, заявляет brighness_in_hardware=true, а первый, generic, молчит как рыба.
Дальше еще жарче.
Код: Выделить всё
$ gnome-power-manager --verbose --no-daemon
[hal_device_condition_cb] gpm-button.c:391 (01:04:18): condition=ButtonPressed, details=brightness-up
[emit_button_pressed] gpm-button.c:335 (01:04:18): emitting button-pressed : brightness-up
[button_pressed_cb] gpm-manager.c:982 (01:04:18): Button press event type=brightness-up
[button_pressed_cb] gpm-srv-screensaver.c:167 (01:04:18): Button press event type=brightness-up
[button_pressed_cb] gpm-backlight.c:515 (01:04:18): Button press event type=brightness-up
[gpm_brightness_lcd_get_hw] gpm-brightness-lcd.c:116 (01:04:18): GetBrightness returned level: 2
[gpm_brightness_lcd_set_hw] gpm-brightness-lcd.c:155 (01:04:18): Setting 3 of 7
[gpm_brightness_lcd_up] gpm-brightness-lcd.c:352 (01:04:18): emitting brightness-changed (42)
[brightness_changed_cb] gpm-backlight.c:690 (01:04:18): Need to display backlight feedback value 42
[gpm_feedback_display_value] gpm-feedback-widget.c:144 (01:04:18): Displaying 0,420000 on feedback widget
[gpm_refcount_add] gpm-refcount.c:100 (01:04:18): refcount now: 1
[gpm_refcount_add] gpm-refcount.c:101 (01:04:18): non zero, so sending REFCOUNT_ADDED
[brightness_changed_cb] gpm-backlight.c:694 (01:04:18): emitting brightness-changed : 42
[button_pressed_cb] gpm-info.c:698 (01:04:18): Button press event type=brightness-up
[hal_device_condition_cb] gpm-button.c:391 (01:04:18): condition=ButtonPressed, details=brightness-up
[emit_button_pressed] gpm-button.c:335 (01:04:18): emitting button-pressed : brightness-up
[button_pressed_cb] gpm-manager.c:982 (01:04:18): Button press event type=brightness-up
[button_pressed_cb] gpm-srv-screensaver.c:167 (01:04:18): Button press event type=brightness-up
[button_pressed_cb] gpm-backlight.c:515 (01:04:18): Button press event type=brightness-up
[gpm_brightness_lcd_get_hw] gpm-brightness-lcd.c:116 (01:04:18): GetBrightness returned level: 3
[gpm_brightness_lcd_set_hw] gpm-brightness-lcd.c:155 (01:04:18): Setting 4 of 7
[gpm_brightness_lcd_up] gpm-brightness-lcd.c:352 (01:04:18): emitting brightness-changed (57)
[brightness_changed_cb] gpm-backlight.c:690 (01:04:18): Need to display backlight feedback value 57
[gpm_feedback_display_value] gpm-feedback-widget.c:144 (01:04:18): Displaying 0,570000 on feedback widget
[gpm_refcount_add] gpm-refcount.c:100 (01:04:18): refcount now: 2
[gpm_refcount_add] gpm-refcount.c:101 (01:04:18): non zero, so sending REFCOUNT_ADDED
[brightness_changed_cb] gpm-backlight.c:694 (01:04:18): emitting brightness-changed : 57
[button_pressed_cb] gpm-info.c:698 (01:04:18): Button press event type=brightness-up
[gpm_refcount_auto_decrement] gpm-refcount.c:77 (01:04:20): refcount now: 1
[gpm_refcount_auto_decrement] gpm-refcount.c:74 (01:04:20): zero, so sending REFCOUNT_ZERO
[gpm_feedback_close_window] gpm-feedback-widget.c:134 (01:04:20): Closing feedback widget
Пустые строки вставлены мной, ими выделены два одинаковых блока - выплюнутые в ответ на одно нажатие на клавишу brightness up.
Патч http://mail.gnome.org/archives/gnome-power...y/msg00002.html предполагает вернуть в GPM потерянный чиста случайна код проверки HAL property "brightness_in_hardware". Оное читается из HAL таким макаром:
Код: Выделить всё
+ /* Check if hardware handles brightness changes automatically */
+ res = hal_gdevice_get_bool (device,
+ "laptop_panel.brightness_in_hardware",
+ &brightness->priv->does_own_updates, NULL);
+
+ if (!res) {
+ brightness->priv->does_own_updates = FALSE;
+ gpm_debug ("laptop_panel.brightness_in_hardware not found. "
+ "Assuming false");
+ } else {
+ if (brightness->priv->does_own_updates) {
+ gpm_debug ("laptop_panel.brightness_in_hardware: True");
+ } else {
+ gpm_debug ("laptop_panel.brightness_in_hardware: False");
+ }
+ }
device же при создании объекта инициализируется как:
Код: Выделить всё
static void
gpm_brightness_lcd_init (GpmBrightnessLcd *brightness)
{
gchar **names;
HalGManager *manager;
HalGDevice *device;
brightness->priv = GPM_BRIGHTNESS_LCD_GET_PRIVATE (brightness);
/* save udi of lcd adapter */
manager = hal_gmanager_new ();
hal_gmanager_find_capability (manager, "laptop_panel", &names, NULL);
g_object_unref (manager);
if (names == NULL || names[0] == NULL) {
gpm_warning ("No devices of capability laptop_panel");
return;
}
/* We only want first laptop_panel object (should only be one) */
brightness->priv->udi = g_strdup (names[0]);
hal_gmanager_free_capability (names);
device = hal_gdevice_new ();
hal_gdevice_set_udi (device, brightness->priv->udi);
При установке патченого кода, в debug выводится это самое laptop_panel.brightness_in_hardware: False - возможно потому, что первым подворачивается computer_backlight при поиске, а код убежден, что laptop_panel "should only be one".
(Кстати, при установке этого пересобранного GPM по нажатии кнопки выключения почему-то появляется панель другого вида чем с родным GPM, и без кнопки hibernate. С чего бы это? Даже если не make install, а только переписать бинарник в /usr/bin. А исходник брался apt-get source gnome-power-manager, вроде как должен собраться идентичный родному...)
Ну вот такая примерно картинка.
В принципе был замечен еще
Баг3
При критическом разряде батареи выбранный в GPM hibernate не происходит. Ничего не происходит, батарея доедается и все вырубается с потерей несохраненных данных. Но это уже немножко другая история...