Экран ноутбука должен слушаться обычных клавиш яркости и здравого смысла, но в Linux история с подсветкой изобилует граблями: разные драйверы, разные значения по умолчанию и внезапные отказы после обновления. Разбираемся, как устроен мир яркости на самом деле: интерфейсы /sys/class/backlight, xbacklight, альтернативы, параметры ядра вроде acpi_backlight и рабочие скрипты для клавиш, чтобы яркость слушалась на любом ноутбуке с Intel и AMD.

Как устроена подсветка изнутри

Физически яркостью управляет контроллер подсветки панели через PWM или прямое общение по I2C, а программно всё сводится к каталогу /sys/class/backlight: внутри лежат подкаталоги от драйверов видеокарты или ACPI, и в каждом хранится актуальный уровень, физический максимум и файл brightness, куда записывается желаемое значение. Современные i915 и amdgpu предлагают свою реализацию, и это правильный способ; проблемы начинаются там, где параллельно поднимаются ещё и ACPI-механизмы, которые тоже желают стоять у руля.

Мнемоника достаточна прямолинейна: каталог intel_backlight или amdgpu_bl0 в /sys/class/backlight с файлами brightness и max_brightness. Запись числа от нуля до max_brightness мгновенно меняет яркость, и один раз увидев ваше максимальное значение, вы знаете линейку навсегда: cat /sys/class/backlight/*/max_brightness обычно отвечает числом вроде 1939 на старых Intel и 255 или 65535 на новых.

xbacklight и его альтернативы

Историческая утилита xbacklight ходит в RandR и меняет яркость через иксы, не трогая /sys напрямую. Синтаксис простой: xbacklight -set 50 выставляет пятьдесят процентов, xbacklight -inc 5 и -dec 5 шагают по пяти пунктам. Утилита прекрасна до тех пор, пока держится сессия иксов и активный драйвер; за её пределами она не работает, и это важно понимать перед написанием своих скриптов.

Альтернативы стоит знать поимённо, потому что одна из них окажется единственной работающей на вашей модели. light - это современная замена с доступом к /sys и удобной записью уровня; brightnessctl делает то же самое и активно сопровождается; acpilight пакетный псевдоним для старых ThinkPads. У всех общий принцип: они манипулируют файлами в /sys/class/backlight и при этом разбираются с правами и округлением сами, избавляя вас от идиом вида echo $((...)) > brightness.

Важный навык на неделю: проверьте, какие каталоги подсветки реально присутствуют у вас, и привяжите скрипт именно к физически рабочему варианту. Многие жгут вечера не потому что яркость не работает, а потому что пишут в левый каталог, который на самом деле не соединён с панелью.

Параметры ядра acpi_backlight, когда ACPI мешает и когда помогает

Старые машины иногда требуют исправления приоритетов. Параметр acpi_backlight=vendor говорит ядру: предпочитай вендорский интерфейс драйверу ACPI; acpi_backlight=native отдаёт всё драйверу видеокарты; acpi_backlight=video оставляет ACPI видеорежим, что спасало древние Sony и Acer. Сегодня в подавляющем большинстве случаев правильное значение - native, а параметр вообще не нужен и лучше ничего не трогать. Но на старых машинках это остаётся инструментом, который вдруг решает пятилетнюю проблему в одну строчку GRUB.

Другой параметр из той же оперы это i915.enable_psr или отключение PSR, когда подсветка дрожит и возвращается на максимум; сообщество веками подмечает этот побочный результат, и переключение PSR известно как патентованное решение на Thinkpad-ах и сотне других популярных ноутбуков.

Клавиши яркости, привязка в вашем окружении

Клавиши Fn работают через ACPI-события и доходят до рабочего стола как XF86MonBrightnessUp и XF86MonBrightnessDown. В i3 и Sway прописывается прямо: bindsym XF86MonBrightnessUp exec brightnessctl set +5% - и яркость реагирует мгновенно. В GNOME и KDE штатно уже настроено; если же не срабатывает, проверяется, не заблокированы ли клавиши железным переключателям - некоторые ноутбуки имеют airplane-mode-like тумблер, который гасит функциональные клавиши вместе с радио.

Для полной картины ещё отметим power-profiles: изменение яркости при переходе на батарею и обратно выполняется вашим скриптом с udev-правилом либо power-profiles-daemon, и именно это делает устройство похожим на современное - подсветка уменьшается сама, когда вы уходите от розетки.

Скрипты на каждый день, тонкие регулировки и индикация

Минимальный пользовательский скрипт решает три вещи: шаг под текущий уровень, граница нуля и мгновенный отчёт. Пример на brightnessctl: биндинг яркости с процентным шагом в 5 процентов и уведомлением через notify-send сбоку в углу. На стороне чистого shell тот же эффект достигается чтением max_brightness и brightness, арифметикой и небольшим sed-окном - после чего ваша панель или статус-бар показывает значение вслух и согласованно.

Для постоянной панели добавьте индикатор в вашу статусную строку: многие статус-бары знают подсветку из коробки, а там, где не знают, за неё отвечает пять слов в вашем конфиге. Инди-реализация такова: watch -n 2 cat над файлом яркости - и в тилируемом менеджере отдельная панель сияет цифрой.

Типичные проблемы, рывки, нули и возвраты

Проблема первая: значение записывается, а экран не светлеет - значит, интерфейс /sys на самом деле не соединён с панелью, и нужен другой каталог или параметр acpi_backlight. Проблема вторая: яркость сбрасывается после перезагрузки - это не баг, это блеск здравого смысла: systemd-backlight служба хранит значение между перезагрузками, и убедиться, что она работает, просто: systemctl status systemd-backlight@backlight:ваш_driver скажет правду. Проблема третья: минимальный уровень это чёрный экран, с которого уйти нельзя никакой клавишей - для этого ставится защита минимума в скрипте: не опускаться ниже пяти процентов, даже когда злость на экран велика.

Проблема четвёртая: на старых машинах подсветка скачет после пробуждения - запоминание уровня на sysfs с системой сна тут работает через хуки systemd-sleep, и небольшой скрипт в /lib/systemd/system-sleep возвращает яркость в человеческий вид. Это классическое наследие эпохи pm-utils, которое никуда не делось, а переродилось в обычный hook.

Автоматическая яркость по датчику освещённости

У многих ноутбуков с сенсором ambient light яркость может сама подстраиваться под освещение. В ядре это поддерживается через IIO подсистему с именами вида als или acpi_als; стандартный демон датчика освещённости из состава GNOME уже ставится по умолчанию и отдаёт данные вверх. В настройках окружения включается Auto Brightness, и подстройка начинает работать. Для минимальных оконных менеджеров ничего не мешает написать свой двухстрочный читатель соответствующего сенсора и небольшую петлю регуляции. Зачем ходить к зарядке чаще, если экран сам заботится о балансе видимости и аппетита.

Практический совет для восприятия: пороговые значения подсветки лучше ограничивать сверху и снизу, потому что под ярким солнцем максимум зашкаливает полезным, а в тёмной комнате низкие градации экономят глаза. Эти полчаса калибровки возвращаются каждый день по несколько раз, и это один из самых недорогих вкладов в комфорт.

Заключение, панель, а не квест

На сегодняшних дистрибутивах с новыми ядрами управление подсветкой это не героическая сага, а скорее то, что решается одной парой строк в конфиге и одним параметром ядра на особо легендарных моделях. Знание внутреннего устройства /sys/class/backlight и один подходящий инструмент вроде brightnessctl закрывают потребность полностью, а клавиши яркости обрастают индикатором и начинают вести себя так, как будто ничего другого и не предполагалось.

Полный комплект рабочего конфига для i3 и Sway

Чтобы читатель уходил с готовым рецептом, приводим законченный фрагмент конфигурации. В случае i3 строки биндингов выглядят так:

bindsym XF86MonBrightnessUp exec brightnessctl set +5%
bindsym XF86MonBrightnessDown exec brightnessctl set 5%-

и того же семейства пары строк существуют для звука: XF86AudioRaiseVolume с pactl set-sink-volume @DEFAULT_SINK@ +5% и парным понижением. Эти шесть строк закрывают типовую мультимедийную клавиатуру полностью и без зависимостей больших фреймворков. В Sway синтаксис идентичен, только исполняемый контекст другой.

Для автоматического затухания при бездействии применяется связка снижения яркости через ваш idle manager: swayidle и кофейный набор из минут бездействия вызывает brightnessctl set 20%, а возвращение активности поднимает обратно. Такая автоматика экономит заметные проценты батареи при тех самых сценариях, где человек отошёл к свече и забыл экран на полную яркость.

Финальная памятка для любой машины с экраном

Сводим всё в план из пяти шагов. Первое: выясните, какой каталог в /sys/class/backlight на самом деле говорит с панелью, через простую запись значения. Второе: поставьте brightnessctl и завяжите клавиши яркости на него. Третье: проверьте, что systemd-backlight восстанавливает уровень после перезагрузки. Четвёртое: при странном поведении вспомните про параметр acpi_backlight и про PSR у современных Intel. Пятое: добавьте автоматическое затухание по простоям, и ваш экран перестанет быть источником раздражения и станет просто экраном.

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

Запись для внутренней вики команды

Если вы администрируете парк похожих ноутбуков, имеет смысл оформить вывод статьи в короткий документ: какой драйвер подсветки у идущих моделей, какой параметр ядра на конкретных модификациях, какой пакет отвечает за клавиши. Эта карточка впоследствии обслуживает сотни установок, и она является именно тем скромным артефактом, который делает совместную жизнь удобнее - прямое знание без тёмных пятен, проверенное на конкретном железе.

Соберите её из вашего первого опыта, дополните при появлении новой модели, и спустя полгода вы обнаружите, что вопросы с яркостью перестали доходить до вас совсем. Это и есть главный критерий того, что проблема закрыта.

Проверка после установки, экономим последующие дни

Первый тест после настройки это перезагрузка: уровень должен быть восстановлен, клавиши должны работать в интерфейсе приветствия и после входа. Второй тест это батарея: выньте шнур и убедитесь, что яркость падает по вашему сценарию и поднимается обратно. Третий тест это сон: после пробуждения яркость остаётся такой, какой была, и ничего не разгоняется до максимума. Пройденные три теста вычёркивают всю тему из списка забот на годы.

И полезный рефлекс на будущее: если свежий апдейт ядра вдруг отобрал яркость, не паникуйте и не переставляйте систему; проверьте по этому тексту каталоги /sys/class/backlight и переключите acpi_backlight один раз - девяносто девять из ста проблем этой области решаются именно там.

И ещё одна деталь из практики: если вы используете несколько операционных систем на одной машине, держите профиль яркости одинаковым в обеих - резкая смена яркости между перезагрузками заметно утомляет глаза, и это видно только тем, кто однажды об этом подумал.

Вот вся правда регулировки подсветки под Linux: один умный файл, один инструмент и десять минут вашего внимания; после этого тема закрыта, и экран будет тем, чем ему положено быть - тем, на котором вы работаете.

И это единственная сложность этой темы.

Возвращайтесь к этой шпаргалке при смене ноутбука - она по-прежнему будет актуальна: интерфейс подсветки в sysfs не меняется уже двадцать лет и, судя по всему, не собирается.
Настройка завершена.
Готово.
Завершено здесь.
Проверено.
Точных вам настроек подсветки!