Решена проблема с яркостью на Lenovo B570. Встроенная графика Intel + nVidia 410M.
Проверено на Ubuntu 14.04
(С некоторого времени регулировка яркости дисплея перестала работать)
Выяснил что за изменения яркости отвечает модуль acpid - Advanced Configuration and Power Interface event daemon
.
Оглавление:
1. Поиск эвентов ядра на регулировку яркости
2. Проверка обработчиков эвентов
3. Проверка выполнения скрипта регулировки яркости.
1. Выясняем какие эвенты навешены на клавиши регулировки яркости. Для этого запускаем в терминале команду:
acpi_listen
После этого выпоняем нажатие интересующих нас клавиш регулировки на что в ответ получим:
kletchatii@DDD:~$ acpi_listen
video/brightnessdown BRTDN 00000087 00000000
video/brightnessup BRTUP 00000086 00000000
в нашем случаее "video/brightnessup" и "video/brightnessup" - это эвенты на который идет обвес.
Запомнили их и идем дальше
2. Acpid при загрузке считывает файлы обработчиков эвентов по следующему пути.
kletchatii@DDD:~$ ls -1 /etc/acpi/events/
asus-keyboard-backlight-down
asus-keyboard-backlight-up
asus-wireless-off
asus-wireless-on
ibm-wireless
lenovo-undock
powerbtn
thinkpad-cmos
tosh-wireless
В моем случае обработчики нажатия клавиш регулировки яркости - это asus-keyboard-backlight-down и asus-keyboard-backlight-up.
пример файла:
kletchatii@DDD:~$ cat /etc/acpi/events/asus-keyboard-backlight-up
# /etc/acpi/events/asus-keyboard-backlight-up
# This is called when the user presses the key brightness
# up button and calls /etc/acpi/asus-keyboard-backlight.sh for
# further processing.
event=video/brightnessup
action=/etc/acpi/asus-keyboard-backlight.sh up
Открываем каждый из файлов по очереди и проверяем чтобы был верно указан эвент в строке:
event=video/brightnessup
Если он отличается от эвента который мы зафиксировали при выполнении первого шага, то следует его исправить. И сохранить файл.
К примеру, используя следующую команду можно открыть для редактирования с правами администратора файл asus-keyboard-backlight-down:
sudo gedit /etc/acpi/events/asus-keyboard-backlight-down
3. Если после проделанных операций у вас все еще не работает яркость, то требуется проверить правильность выполнения скрипта по обработке эвентом. В моем случае обработчиком эментов является
kletchatii@DDD:~$ cat /etc/acpi/events/asus-keyboard-backlight-up
# /etc/acpi/events/asus-keyboard-backlight-up
# This is called when the user presses the key brightness
# up button and calls /etc/acpi/asus-keyboard-backlight.sh for
# further processing.
event=video/brightnessup
action=/etc/acpi/asus-keyboard-backlight.sh up
файл указанный в параметре action.
kletchatii@DDD:~$ cat /etc/acpi/asus-keyboard-backlight.sh
#!/bin/sh
# this directory is a symlink on my machine:
KEYS_DIR=/sys/class/backlight/intel_backlight
test -d $KEYS_DIR || exit 0
MIN=0
MAX=$(cat $KEYS_DIR/max_brightness)
VAL=$(cat $KEYS_DIR/brightness)
if [ "$1" = down ]; then
VAL=$((VAL-195))
else
VAL=$((VAL+195))
fi
if [ "$VAL" -lt $MIN ]; then
VAL=$MIN
elif [ "$VAL" -gt $MAX ]; then
VAL=$MAX
fi
echo $VAL > $KEYS_DIR/brightness
Переменная KEYS_DIR в баш скрите хранит путь до директории в которой храниться файл отвечающий за яркость дисплея. В моем случае файл яркости храниться в директории /sys/class/backlight/intel_backlight, т.к. вывод изображения в моей модели ПК идет через втроенную графику Intel.
Статья
http://followthegeeks.com/how-to-solve-brightness-is-not-changing-issue-in-12-04/ укажет как меня яркость на графике от ATI Radeon.
Привожу листинг директории:
kletchatii@DDD:~$ ls -1 /sys/class/backlight/intel_backlight
actual_brightness
bl_power
brightness
device
max_brightness
power
subsystem
type
uevent
Для нас важны файлы brightness - хранит текущую яркость, max_brightness - хранит значение максимальной яркости.
Можно довольно легко убедиться что правильный ли файл мы выбрали используя команду
(
Будьте аккуратны, выбрав слишком маленькое значение яркости вы можете полностью выключить подцветку и ничего не увидеть на экране)
sudo -s &&
echo 100 > /sys/class/backlight/intel_backlight/brightness
или
sudo -s &&
echo 100 > /sys/class/backlight/acpi_video0/brightness
После того как вы обнаружили нужный для вас файл регулировки яркости укажите путь до директории в которой он лежит в файле обработчика эвентов клавиш яркости. Так же рекомендуется отрегулировать шаг изменения яркости
kletchatii@DDD:~$ cat /etc/acpi/asus-keyboard-backlight.sh
#!/bin/sh
# this directory is a symlink on my machine:
# Путь до директории тут
KEYS_DIR=/sys/class/backlight/intel_backlight
test -d $KEYS_DIR || exit 0
MIN=0
MAX=$(cat $KEYS_DIR/max_brightness)
VAL=$(cat $KEYS_DIR/brightness)
if [ "$1" = down ]; then
# 195 - кол-во пунктов на которое будет уменьшаться или увеличиваться яркость
VAL=$((VAL-195))
else
# 195 - кол-во пунктов на которое будет уменьшаться или увеличиваться яркость
VAL=$((VAL+195))
fi
if [ "$VAL" -lt $MIN ]; then
VAL=$MIN
elif [ "$VAL" -gt $MAX ]; then
VAL=$MAX
fi
echo $VAL > $KEYS_DIR/brightness
Надеюсь кому то будет полезно, потому как я лично долго не мог найти решение проблеме с яркостью.
П.С: Мануалы до этого не писал, потому стиль написания может быть несколько неровным, если кто нибудь перепишет мануал и добавит его в вики, либо даст дельные рекомендации в ЛС, то будет чудесно.
Спасибо за внимание
UPDATEПосле того как вы внесли все правки в скрипты необходимо перезагрузить acpid демона следующим образом:
sudo service acpid restart
после этого изменение яркости должно заработать в том случае, если все предыдущие действия были выполнены правильно.
Также можно просто перезагрузиться или перелогиниться в систему.