Backlight: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 8 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{stub}}
{{Note|Последняя синхронизация и адаптация была выполнена 19 февраля 2024 г.}}
Иногда, при использовании Linux, могут возникнуть сложности с контролем яркости экрана. На некоторых компьютерах может отсутствовать физический переключатель, а программные решения могут работать некорректно. Тем не менее, возможно найти рабочий способ для вашего оборудования. Цель данной статьи — собрать все возможные способы регулировки подсветки.
Иногда, при использовании Linux, могут возникнуть сложности с контролем яркости экрана. На некоторых компьютерах может отсутствовать физический переключатель, а программные решения могут работать некорректно. Тем не менее, возможно найти рабочий способ для вашего оборудования. Цель данной статьи — собрать все возможные способы регулировки подсветки.


Строка 49: Строка 49:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
mcedit /etc/udev/rules.d/backlight.rules
# mcedit /etc/udev/rules.d/backlight.rules
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 70: Строка 70:


==== Правило udev ====
==== Правило udev ====
Если доступен интерфейс ACPI, уровень подсветки может быть установлен во время загрузки с помощью правила udev:
Если доступен интерфейс ACPI, уровень подсветки может быть установлен во время загрузки с помощью правила udev:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
/etc/udev/rules.d/81-backlight.rules
/etc/udev/rules.d/81-backlight.rules
Строка 80: Строка 78:
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"
</syntaxhighlight>
</syntaxhighlight>
 
<!-- {{Примечание|Служба systemd-backlight восстанавливает предыдущий уровень яркости подсветки во время загрузки. Для предотвращения конфликта с этим правилом смотрите раздел [[#Сохранение и восстановление|Сохранение и восстановление]].}} -->
{{Примечание|Служба systemd-backlight восстанавливает предыдущий уровень яркости подсветки во время загрузки. Для предотвращения конфликта с этим правилом смотрите раздел [[#Сохранение и восстановление|Сохранение и восстановление]].}}


=== setpci ===
=== setpci ===
Строка 93: Строка 90:
=== Внешние мониторы ===
=== Внешние мониторы ===


[[https://ru.wikipedia.org/wiki/Display_Data_Channel#Стандарт VESA DDC/CI |DDC/CI]] (Display Data Channel Command Interface — командный интерфейс обмена данными между компьютером и монитором) может использоваться для связи с внешними мониторами, реализующими стандарт MCCS (Monitor Control Command Set) по шине I2C.
[https://ru.wikipedia.org/wiki/Display_Data_Channel#Стандарт VESA DDC/CI DDC/CI] (Display Data Channel Command Interface — командный интерфейс обмена данными между компьютером и монитором) может использоваться для связи с внешними мониторами, реализующими стандарт MCCS (Monitor Control Command Set) по шине I2C.


DDC может контролировать яркость, контрастность, входы и т.д. на поддерживаемых мониторах. Настройки, доступные с панели OSD (экранное меню), также могут управляться через DDC.
DDC может контролировать яркость, контрастность, входы и т.д. на поддерживаемых мониторах. Настройки, доступные с панели OSD (экранное меню), также могут управляться через DDC.
Строка 120: Строка 117:


{{Note|
{{Note|
* {{cmd|ddcutil}} может не работать с некоторыми возможностями VCP, если на мониторе включена функция, которая уже автоматически их настраивает (например, [[https://en.wikipedia.org/wiki/Contrast ratio#Dynamic contrast (DC)|Dynamic Contrast Ratio]] или BenQ ''Eye Care'').
* {{cmd|ddcutil}} может не работать с некоторыми возможностями VCP, если на мониторе включена функция, которая уже автоматически их настраивает (например, [https://en.wikipedia.org/wiki/Contrast_ratio#Dynamic_contrast_.28DC.29 Dynamic Contrast Ratio] или BenQ ''Eye Care'').
* Чтобы упростить настройку горячих клавиш для управления яркостью, может быть удобно предоставить доступ обычному пользователю к соответствующим устройствам I2C. Для этого создайте группу {{cmd|i2c}} и настройте udev на назначение этой группы устройствам I2C. [https://raspberrypi.stackexchange.com/a/4472]
* Чтобы упростить настройку горячих клавиш для управления яркостью, может быть удобно предоставить доступ обычному пользователю к соответствующим устройствам I2C. Для этого создайте группу {{cmd|i2c}} и настройте udev на назначение этой группы устройствам I2C. [https://raspberrypi.stackexchange.com/a/4472]
* Пакет {{pkg|ddcutil}} предоставляет файл {{path|/usr/share/ddcutil/data/90-nvidia-i2c.conf}}, который можно скопировать в {{path|/etc/X11/xorg.conf.d/}} вместо ручной настройки Xorg. Также он предоставляет правила udev {{path|/usr/share/ddcutil/data/45-ddcutil-i2c.rules}} и {{path|/usr/share/ddcutil/data/45-ddcutil-usb.rules}}.
* Пакет {{pkg|ddcutil}} предоставляет файл {{path|/usr/share/ddcutil/data/90-nvidia-i2c.conf}}, который можно скопировать в {{path|/etc/X11/xorg.conf.d/}} вместо ручной настройки Xorg. Также он предоставляет правила udev {{path|/usr/share/ddcutil/data/45-ddcutil-i2c.rules}} и {{path|/usr/share/ddcutil/data/45-ddcutil-usb.rules}}.
}}
}}
== Выключение подсветки ==
== Выключение подсветки ==


Строка 138: Строка 134:


{{Note|Некоторые ноутбуки имеют несколько видеокарт (например, Optimus) и восстановление подсветки может не сработать. Попробуйте [[http://wiki.archlinux.org/title/Systemd_(Русский)#Использование_юнитов замаскировать]] отдельный экземпляр этой службы, например {{cmd|systemd-backlight@backlight:acpi_video1}} в случае {{cmd|acpi_video1}}.}}
{{Note|Некоторые ноутбуки имеют несколько видеокарт (например, Optimus) и восстановление подсветки может не сработать. Попробуйте [[http://wiki.archlinux.org/title/Systemd_(Русский)#Использование_юнитов замаскировать]] отдельный экземпляр этой службы, например {{cmd|systemd-backlight@backlight:acpi_video1}} в случае {{cmd|acpi_video1}}.}}
Кроме того, утилита {{pkg|light}} поддерживает функцию сохранения и восстановления. Эта утилита может быть более полезна, если вы хотите сохранять яркость для отдельных пользователей, однако для этого не предусмотрено никаких юнитов systemd.
Кроме того, утилита {{pkg|light}} поддерживает функцию сохранения и восстановления. Эта утилита может быть более полезна, если вы хотите сохранять яркость для отдельных пользователей, однако для этого не предусмотрено никаких юнитов systemd.


Строка 171: Строка 166:


=== xbacklight ===
=== xbacklight ===
Яркость может быть установлена с помощью пакета {{Pkg|xbacklight}}.
Яркость может быть установлена с помощью пакета {{Pkg|xbacklight}}.


Строка 191: Строка 185:


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
/etc/X11/xorg.conf.d/20-intel.conf|
/etc/X11/xorg.conf.d/20-intel.conf
</syntaxhighlight>
</syntaxhighlight>


Строка 199: Строка 193:
     Driver      "intel"
     Driver      "intel"
     Option      "Backlight"  "intel_backlight"
     Option      "Backlight"  "intel_backlight"
EndSection}}
EndSection
</syntaxhighlight>
</syntaxhighlight>


Строка 223: Строка 217:
== Цветовая коррекция ==
== Цветовая коррекция ==


Цветокоррекция не меняет яркость подсветки, а просто меняет [[Wikipedia:Lookup table#Lookup tables in image processing|LUT]], то есть не влияет на время работы от батареи. Тем не менее, она может быть полезна, когда управление подсветкой недоступно (на настольных ПК или ноутбуках с OLED-экранами).
Цветокоррекция не меняет яркость подсветки, а просто меняет [https://en.wikipedia.org/wiki/Lookup_table#Lookup_tables_in_image_processing LUT], то есть не влияет на время работы от батареи. Тем не менее, она может быть полезна, когда управление подсветкой недоступно (на настольных ПК или ноутбуках с OLED-экранами).


* '''Monica''' - инструмент для калибровки монитора. Работает как фронтенд к xgamma для изменения гамма-коррекции. - [https://web.archive.org/web/20090815224839/http://www.pcbypaul.com/software/monica.html Оф.сайт] - пакет: {{pkg|monica}}
* '''Monica''' - инструмент для калибровки монитора. Работает как фронтенд к xgamma для изменения гамма-коррекции. - [https://web.archive.org/web/20090815224839/http://www.pcbypaul.com/software/monica.html Оф.сайт] - пакет: {{pkg|monica}}
* '''Redshift''' - инструмент для настройки цветовой температуры. Регулирует цветовую температуру изображения в зависимости от окружения. Это может снизить нагрузку на глаза, если вы работаете по ночам. Вдохновлён программой [https://ru.wikipedia.org/wiki/F.lux f.lux]] - [http://jonls.dk/redshift/ Оф. сайт] - пакет: {{pkg|redshift}}
* '''Redshift''' - инструмент для настройки цветовой температуры. Регулирует цветовую температуру изображения в зависимости от окружения. Это может снизить нагрузку на глаза, если вы работаете по ночам. Вдохновлён программой [https://ru.wikipedia.org/wiki/F.lux f.lux] - [http://jonls.dk/redshift/ Оф. сайт] - пакет: {{pkg|redshift}}
* '''xcalib''' - лёгкий загрузчик параметров калибровки монитора. Может загружать ICC-профиль монитора для совместного использования в настольных приложениях.|https://github.com/OpenICC/xcalib|{{Pkg|xcalib}}
* '''xcalib''' - лёгкий загрузчик параметров калибровки монитора. Может загружать ICC-профиль монитора для совместного использования в настольных приложениях. - [https://github.com/OpenICC/xcalib Оф. сайт] - пакет: {{pkg|xcalib}}
* '''xgamma''' - Настройка гамма-коррекции монитора.|https://xorg.freedesktop.org/|{{Pkg|xorg-xgamma}}
* '''xgamma''' - Настройка гамма-коррекции монитора. - [https://xorg.freedesktop.org/ Оф. сайт] - пакет: {{pkg|xgamma}}
===Приложения===
===Приложения===
====Monica====
====Monica====
Установка:
  # apt-get install monica
  # apt-get install monica


Строка 237: Строка 232:


====Redshift====
====Redshift====
Установка:
  # apt-get install redshift
  # apt-get install redshift
 
Запуск службы (служба запускается от обычного пользователя):
  $ systemctl --user enable --now redshift
  $ systemctl --user enable --now redshift


Строка 274: Строка 270:
=== Wayland ===
=== Wayland ===


Redshift не поддерживает Wayland (но есть форк {{AUR|redshift-wayland-git}}). Можно применить нужную температуру в [[getty (Русский)|tty]] перед запуском композитора. Например:
Redshift не поддерживает Wayland (но есть форк {{pkg|redshift-wayland-git}}). В Альте пока нет! Можно применить нужную температуру в tty перед запуском композитора.
 
Например:


  $ redshift -m drm -PO 3000
  $ redshift -m drm -PO 3000
Строка 280: Строка 278:
Некоторые композиторы позволяют применять цветокоррекцию во время работы:
Некоторые композиторы позволяют применять цветокоррекцию во время работы:


* Для [[GNOME (Русский)|GNOME]] можно использовать встроенный [[GNOME (Русский)#Night Light|ночной свет]].
* Для [[GNOME]] можно использовать встроенный '''Night Light''' - Ночной свет.
* Для [[KDE (Русский)|KDE]] можно использовать встроенную [[KDE (Русский)#Ночная цветовая схема|ночную цветовую схему]].
* Для [[KDE]] можно использовать встроенную Ночную цветовую схему.
* Для Sway и других композиторов на основе wlroots, а также для Orbital можно использовать {{Pkg|gammastep}} (форк Redshift), {{AUR|clight}}, {{AUR|wlsunset-git}} или {{AUR|wl-gammarelay}}.
 
{{Note (Русский)|Ни в GNOME, ни в KDE не работает ночной режим в Wayland на видеокартах [[NVIDIA (Русский)|NVIDIA]] из-за того, что драйвер не поддерживает некоторые функции LUT. Смотрите [https://github.com/NVIDIA/open-gpu-kernel-modules/issues/162 issue 162] на GitHub и [https://pointieststick.com/2023/05/26/this-week-in-kde-night-color-on-wayland-with-nvidia/ эту новость] о попытках разработчиков KDE заставить это работать.}}


{{Note|Ни в GNOME, ни в KDE не работает ночной режим в Wayland на видеокартах [[NVIDIA]] из-за того, что драйвер не поддерживает некоторые функции LUT. Смотрите [https://github.com/NVIDIA/open-gpu-kernel-modules/issues/162 issue 162] на GitHub и [https://pointieststick.com/2023/05/26/this-week-in-kde-night-color-on-wayland-with-nvidia/ эту новость] о попытках разработчиков KDE заставить это работать.}}
=== Xorg: настройка воспринимаемой яркости с помощью xrandr ===
=== Xorg: настройка воспринимаемой яркости с помощью xrandr ===


Можно использовать [[xrandr (Русский)|xrandr]] для изменения воспринимаемой яркости.
Можно использовать [[Xrandr]] для изменения воспринимаемой яркости.


Для установки воспринимаемой яркости выше максимального уровня (действуют вышеупомянутые предостережения для NVIDIA):
Для установки воспринимаемой яркости выше максимального уровня (действуют вышеупомянутые предостережения для NVIDIA):
Строка 302: Строка 298:
  $ xrandr | grep -w connected | cut -f '1' -d ' '
  $ xrandr | grep -w connected | cut -f '1' -d ' '


Для удобства можно сделать [[Bash (Русский)#Псевдонимы|псевдоним]]:
Для удобства можно сделать псевдоним:


  $ alias b='echo -e "Введите яркость:\n"; read val; xrandr --output ''название_вывода'' --brightness "${val}"'
  $ alias b='echo -e "Введите яркость:\n"; read val; xrandr --output ''название_вывода'' --brightness "${val}"'
Чтобы автоматически запускать xrandr при изменении файла, содержащего информацию о яркости подсветки, можно использовать {{AUR|oled_shmoled}}:
$ oled_shmoled ''название_вывода''


=== NVIDIA settings ===
=== NVIDIA settings ===


Пользователи проприетарных драйверов [[NVIDIA (Русский)|NVIDIA]] могут менять яркость дисплея с помощью утилиты [[NVIDIA (Русский)#nvidia-settings|nvidia-settings]] в разделе «X Server Color Correction». Однако имейте в виду, что это не имеет ничего общего с подсветкой (Интенсивность), она всего лишь регулирует цветность. (Уменьшение яркости таким образом не является энергоэффективным. Используйте его в последнюю очередь, если все другие варианты не срабатывают; увеличение яркости портит цвета на экране полностью, по аналогии с засвеченностью фотографий.)
Пользователи проприетарных драйверов [[Nvidia|NVIDIA]] могут менять яркость дисплея с помощью утилиты '''nvidia-settings''' в разделе «X Server Color Correction». Однако имейте в виду, что это не имеет ничего общего с подсветкой (Интенсивность), она всего лишь регулирует цветность. (Уменьшение яркости таким образом не является энергоэффективным. Используйте его в последнюю очередь, если все другие варианты не срабатывают; увеличение яркости портит цвета на экране полностью, по аналогии с засвеченностью фотографий.)


== Решение проблем ==
== Решение проблем ==
Строка 324: Строка 316:
Если у вас графический адаптер Intel i915, то возможно настроить частоту ШИМ, чтобы устранить мерцание.
Если у вас графический адаптер Intel i915, то возможно настроить частоту ШИМ, чтобы устранить мерцание.


Период ШИМ (обратно пропорциональный частоте) записывается в 2 старших байта регистра {{ic|0xC8254}} (если вы используете чипсет Intel GM45, вместо этого используйте адрес {{ic|0x61254}}). Чтобы манипулировать значениями регистров, [[установите]] пакет {{Pkg|intel-gpu-tools}}.
Период ШИМ (обратно пропорциональный частоте) записывается в 2 старших байта регистра {{cmd|0xC8254}} (если вы используете чипсет Intel GM45, вместо этого используйте адрес {{cmd|0x61254}}). Чтобы манипулировать значениями регистров, [[Команды_APT#Установка_пакетов|установите]] пакет {{pkg|igt-gpu-tools}}.  


Чтобы увеличить частоту, период должен быть уменьшен. Например:
Чтобы увеличить частоту, период должен быть уменьшен. Например:


{{hc|# intel_reg read 0xC8254|
<syntaxhighlight lang="bash">
0xC8254 : 0x12281228|
# intel_reg read 0xC8254
}}
0xC8254 : 0x12281228
</syntaxhighlight>


Затем, чтобы удвоить частоту ШИМ, разделите 2 старших байта (4 шестнадцатеричные цифры) на 2 и запишите полученное значение, сохраняя нижние байты неизменными:
Затем, чтобы удвоить частоту ШИМ, разделите 2 старших байта (4 шестнадцатеричные цифры) на 2 и запишите полученное значение, сохраняя нижние байты неизменными:
Строка 336: Строка 329:
  # intel_reg write 0xC8254 0x09141228
  # intel_reg write 0xC8254 0x09141228


Вы можете использовать онлайн-калькулятор для расчета желаемого значения
Вы можете использовать онлайн-калькулятор для расчета желаемого значения: https://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html
https://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html
 
Чтобы установить новую частоту автоматически, попробуйте написать правило udev или установить {{AUR|intelpwm-udev}}.
 
=== Инвертированная яркость (только для Intel i915) ===


Симптомы:
Чтобы установить новую частоту автоматически, попробуйте написать правило udev.
 
* после установки {{Pkg|xf86-video-intel}} systemd-backlight.service выключает подсветку во время загрузки
** возможное решение: маскировать systemd-backlight.service
* переключение с X на другую виртуальную консоль выключает подсветку
* кнопки регулировки подсветки инвертированы (то есть увеличение яркости делает экран темнее)
 
Эта проблема может быть решена добавлением {{ic|1=i915.invert_brightness=1}} в список [[Kernel parameters (Русский)|параметров ядра]].


=== Не работает управление яркостью панели eDP (только для Intel i915) ===
=== Не работает управление яркостью панели eDP (только для Intel i915) ===
Строка 358: Строка 339:
По умолчанию драйвер i915 пытается использовать ШИМ для управления яркостью подсветки, что может не сработать.
По умолчанию драйвер i915 пытается использовать ШИМ для управления яркостью подсветки, что может не сработать.


Чтобы менять подсветку путём записи в регистры DPCD по каналу AUX, пропишите [[параметр ядра]] {{ic|1=i915.enable_dpcd_backlight=1}}.
Чтобы менять подсветку путём записи в регистры DPCD по каналу AUX, пропишите параметр ядра {{cmd|1=i915.enable_dpcd_backlight=1}}.
 
{{Note (Русский)|В {{Pkg|linux}} 5.4 параметр изменился с bool на int.}}


=== sysfs редактируется, но яркость не меняется ===
=== sysfs редактируется, но яркость не меняется ===
{{Note|Такое поведение и способы его обхода были подтверждены на Dell M6700 с Nvidia K5000m (версия BIOS до A10) и Clevo P750ZM (Eurocom P5 Pro Extreme) с Nvidia 980m.}}
На некоторых системах клавиши изменения яркости корректно меняют значения интерфейса acpi в {{path|/sys/class/backlight/acpi_video0/actual_brightness}}, но яркость экрана не изменяется. Апплеты яркости в средах рабочего стола тоже могут показывать изменения без реального влияния на яркость.


{{Примечание|Такое поведение и способы его обхода были подтверждены на Dell M6700 с Nvidia K5000m (версия BIOS до A10) и Clevo P750ZM (Eurocom P5 Pro Extreme) с Nvidia 980m.}}
Если вы протестировали рекомендуемые параметры ядра и только {{cmd|xbacklight}} работает, то, возможно, вы столкнулись с несовместимостью между вашим BIOS и драйвером ядра.


На некоторых системах клавиши изменения яркости корректно меняют значения интерфейса acpi в {{ic|/sys/class/backlight/acpi_video0/actual_brightness}}, но яркость экрана не изменяется. Апплеты яркости в [[Desktop environment (Русский)|средах рабочего стола]] тоже могут показывать изменения без реального влияния на яркость.
В этом случае единственное решение — дождаться исправления от производителя BIOS или драйвера видеокарты.


Если вы протестировали рекомендуемые параметры ядра и только {{ic|xbacklight}} работает, то, возможно, вы столкнулись с несовместимостью между вашим BIOS и драйвером ядра.
Обходной путь — использовать inotify для запуска {{cmd|xbacklight}} после каждого изменения значения {{path|/sys/class/backlight/acpi_video0/actual_brightness}}.


В этом случае единственное решение — дождаться исправления от производителя BIOS или драйвера видеокарты.
Сперва установите пакет {{pkg|inotify-tools}}. Затем создайте скрипт, который будет запускаться при каждом включении с помощью автозагрузки.


Обходной путь — использовать inotify для запуска {{ic|xbacklight}} после каждого изменения значения {{ic|/sys/class/backlight/acpi_video0/actual_brightness}}.
{{path|/usr/local/bin/xbacklightmon}}:


Сперва [[установите]] {{Pkg|inotify-tools}}. Затем создайте скрипт, который будет запускаться при каждом включении с помощью [[Autostarting (Русский)|автозагрузки]].
<syntaxhighlight lang="bash">
 
{{hc|/usr/local/bin/xbacklightmon|<nowiki>
#!/bin/sh
#!/bin/sh


Строка 394: Строка 373:
     xbacklight -set "$(luminance)"
     xbacklight -set "$(luminance)"
done
done
</nowiki>}}
</syntaxhighlight>


=== Не работает управление подсветкой в MATE ===
=== Не работает управление подсветкой в MATE ===


Убедитесь, что [[установлен]] пакет {{Pkg|mate-power-manager}}.
Убедитесь, что установлен пакет {{pkg|mate-power-manager}}.


=== Не работают клавиши управления подсветкой в Xfce ===
=== Не работают клавиши управления подсветкой в Xfce ===
Строка 412: Строка 391:
=== xbacklight выдаёт: No outputs have backlight property ===
=== xbacklight выдаёт: No outputs have backlight property ===


Иногда, в зависимости от установленной видеокарты, xbacklight из пакета {{Pkg|xorg-xbacklight}} может выдать сообщение «No outputs have backlight property». Пакет {{Pkg|acpilight}} предоставляет альтернативную реализацию xbacklight, которая может оказаться рабочей.
Иногда, в зависимости от установленной видеокарты, xbacklight из пакета {{pkg|xbacklight}} может выдать сообщение «No outputs have backlight property». Пакет {{pkg|acpilight}} предоставляет альтернативную реализацию xbacklight, которая может оказаться рабочей.


=== На драйвере amdgpu после перезагрузки подсветка всегда имеет максимальную яркость ===
=== На драйвере amdgpu после перезагрузки подсветка всегда имеет максимальную яркость ===


Из-за [https://bugzilla.kernel.org/show_bug.cgi?id=203905 бага] в драйвере amdgpu значение {{ic|actual_brightness}} подсветки сообщается как 16-битное целое число, которое находится за пределами 8-битного диапазона, указанного в {{ic|max_brightness}}. Это приводит к тому, что служба {{ic|systemd-backlight}} при загрузке пытается установить слишком большое значение, которое в итоге уменьшается до максимальной яркости (255).
Из-за [https://bugzilla.kernel.org/show_bug.cgi?id=203905 бага] в драйвере amdgpu значение {{cmd|actual_brightness}} подсветки сообщается как 16-битное целое число, которое находится за пределами 8-битного диапазона, указанного в {{cmd|max_brightness}}. Это приводит к тому, что служба {{cmd|systemd-backlight}} при загрузке пытается установить слишком большое значение, которое в итоге уменьшается до максимальной яркости (255).


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


{{hc|fix-brightness.sh|2=
{{path|fix-brightness.sh}}:
 
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash


Строка 429: Строка 410:
BRIGHTNESS=${BRIGHTNESS/.*} # преобразование в целое число на всякий случай
BRIGHTNESS=${BRIGHTNESS/.*} # преобразование в целое число на всякий случай
echo $BRIGHTNESS > "$BRIGHTNESS_FILE"
echo $BRIGHTNESS > "$BRIGHTNESS_FILE"
}}
</syntaxhighlight>


{{hc|fix-brightness.service|2=
{{path|fix-brightness.service}}:
<syntaxhighlight lang="bash">
[Unit]
[Unit]
Description=Convert 16-bit brightness values to 8-bit before systemd-backlight applies it
Description=Convert 16-bit brightness values to 8-bit before systemd-backlight applies it
Строка 442: Строка 424:
[Install]
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target
}}
</syntaxhighlight>


На некоторых системах уровень подсветки, о котором сообщает драйвер, находится в правильном диапазоне [0, 255], но systemd всё равно не может восстановить правильное значение. Вероятно, это связано с [https://gitlab.freedesktop.org/drm/amd/-/issues/1337 гонкой в ядре]. В этом случае преобразование уровня яркости не поможет, так как он уже находится в правильном диапазоне. Вместо этого в качестве обходного пути можно сохранить уровень яркости в systemd перед выключением. Этого можно добиться с помощью следующего скрипта и юнита службы:
На некоторых системах уровень подсветки, о котором сообщает драйвер, находится в правильном диапазоне [0, 255], но systemd всё равно не может восстановить правильное значение. Вероятно, это связано с [https://gitlab.freedesktop.org/drm/amd/-/issues/1337 гонкой в ядре]. В этом случае преобразование уровня яркости не поможет, так как он уже находится в правильном диапазоне. Вместо этого в качестве обходного пути можно сохранить уровень яркости в systemd перед выключением. Этого можно добиться с помощью следующего скрипта и юнита службы:


{{hc|fix-brightness.sh|2=
{{path|fix-brightness.sh}}:
<syntaxhighlight lang="bash">
#!/bin/sh
#!/bin/sh


Строка 458: Строка 441:
readonly AMDGPU_BACKLIGHT_VALUE=$(cat "$AMDGPU_BACKLIGHT_FILE")
readonly AMDGPU_BACKLIGHT_VALUE=$(cat "$AMDGPU_BACKLIGHT_FILE")
echo "$AMDGPU_BACKLIGHT_VALUE" > "$SYSTEMD_BACKLIGHT_FILE"
echo "$AMDGPU_BACKLIGHT_VALUE" > "$SYSTEMD_BACKLIGHT_FILE"
}}
</syntaxhighlight>


{{hc|fix-brightness.service|2=
{{path|fix-brightness.service}}:
<syntaxhighlight lang="bash">
[Unit]
[Unit]
Description=Save brightness value from AMDGPU
Description=Save brightness value from AMDGPU
Строка 472: Строка 456:
[Install]
[Install]
WantedBy=final.target
WantedBy=final.target
}}
</syntaxhighlight>


=== Сохранение яркости <5% при перезагрузке ===
=== Сохранение яркости <5% при перезагрузке ===


Согласно {{man|8|systemd-backlight@.service}}, если свойство udev {{ic|ID_BACKLIGHT_CLAMP}} не установлено в false, минимальное допустимое значение сохраняемой яркости — 1 или 5% от максимальной яркости, в зависимости от того, что больше. Это ограничение будет снято, когда ядро позволит надёжно устанавливать в пользовательском пространстве значение яркости, не приводящее к выключению дисплея.
Согласно {{cmd|man 8 systemd-backlight@.service}}, если свойство udev {{cmd|ID_BACKLIGHT_CLAMP}} не установлено в false, минимальное допустимое значение сохраняемой яркости — 1 или 5% от максимальной яркости, в зависимости от того, что больше. Это ограничение будет снято, когда ядро позволит надёжно устанавливать в пользовательском пространстве значение яркости, не приводящее к выключению дисплея.


Чтобы яркость <5% сохранялась при перезагрузке, создайте правило [[udev (Русский)|udev]]:
Чтобы яркость <5% сохранялась при перезагрузке, создайте правило udev:


{{hc|/etc/udev/rules.d/99-backlight_clamp.rules|2=
{{path|/etc/udev/rules.d/99-backlight_clamp.rules}}:
<syntaxhighlight lang="bash">
# Разрешить сохранять яркость <5% при перезагрузке
# Разрешить сохранять яркость <5% при перезагрузке
SUBSYSTEM=="backlight", ENV{ID_BACKLIGHT_CLAMP}="0"
SUBSYSTEM=="backlight", ENV{ID_BACKLIGHT_CLAMP}="0"
}}
</syntaxhighlight>


==Источники==
==Источники==
*[https://wiki.archlinux.org/title/Backlight_(Русский) Wiki Archlinux]
*[https://wiki.archlinux.org/title/Backlight_(Русский) Wiki Archlinux]
[[Категория:Оборудование]]

Текущая версия от 17:40, 5 апреля 2024

Примечание: Последняя синхронизация и адаптация была выполнена 19 февраля 2024 г.

Иногда, при использовании Linux, могут возникнуть сложности с контролем яркости экрана. На некоторых компьютерах может отсутствовать физический переключатель, а программные решения могут работать некорректно. Тем не менее, возможно найти рабочий способ для вашего оборудования. Цель данной статьи — собрать все возможные способы регулировки подсветки.

Данные способы можно разделить на следующие категории:

  • яркость управляется горячей клавишей, определённой производителем, и нет интерфейса для того, чтобы ОС могла настраивать яркость;
  • яркость можно контролировать через ACPI, через графический драйвер или драйвер платформы. В этом случае управление подсветкой доступно пользователю через /sys/class/backlight, который может использоваться утилитами настройки;
  • яркость можно контролировать посредством аппаратного регистра с помощью setpci.
Примечание: Поскольку OLED-экраны не имеют подсветки, менять яркость на ноутбуках с OLED-экранами путём изменения яркости подсветки не получится. В этом случае воспринимаемую яркость экрана можно регулировать с помощью ШИМ-управления (не реализовано в ядре Linux) или с помощью программной цветокоррекции.


Аппаратные интерфейсы

ACPI

Яркость подсветки экрана регулируется установкой уровня питания светодиодов или катодов. Зачастую уровень питания можно контролировать с помощью ACPI модуля ядра для видео. Интерфейс к этому модулю доступен через man 5 sysfs в /sys/class/backlight/.

Имя каталога зависит от модели видеокарты.

$ ls /sys/class/backlight/
acpi_video0

В данном случае подсветкой управляет видеокарта ATI. В случае с картой Intel каталог будет называться intel_backlight. В следующих примерах используется acpi_video0. Если вы используете карту Intel, просто замените в примерах acpi_video0 на intel_backlight.

Каталог содержит следующие файлы и подкаталоги:

$ ls /sys/class/backlight/acpi_video0/
actual_brightness  brightness         max_brightness     subsystem/    uevent
bl_power           device/            power/             type

Максимальную яркость можно прочитать из файла max_brightness, и она обычно равна 15.

$ cat /sys/class/backlight/acpi_video0/max_brightness|
15

Яркость можно изменить путём записи числа в файл brightness. Установить яркость выше максимальной не получится.

 # echo 5 > /sys/class/backlight/acpi_video0/brightness

По умолчанию только root может менять яркость таким способом. Чтобы управлять яркостью могли пользователи из группы video, можно использовать правило udev (для применения может понадобиться перезагрузка):

 # mcedit /etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", RUN+="/bin/chgrp video $sys$devpath/brightness", RUN+="/bin/chmod g+w $sys$devpath/brightness"

Параметры ядра

Иногда ACPI не работает должным образом из-за различных реализаций материнских плат и особенностей ACPI, что может приводить, например, к некорректным уведомлениям о яркости. Этому могут быть подвержены некоторые ноутбуки с двойной графикой (например, дискретная видеокарта NVIDIA/AMD вместе с интегрированной Intel/AMD). Кроме того, иногда для ACPI может быть необходимо зарегистрировать свою собственную подсветку acpi_video0, даже если уже существует другая (например, intel_backlight), что может быть достигнуто добавлением следующих параметров ядра:

acpi_backlight=video
acpi_backlight=vendor
acpi_backlight=native


Совет:
  • На ноутбуках NVIDIA Optimus параметр ядра nomodeset может препятствовать регулировке подсветки.
  • На ноутбуках Asus вам может также понадобиться загрузить модуль ядра asus-nb-wmi.
  • Отключение legacy-загрузки на Dell XPS13 приводит к невозможности изменить подсветку.
  • В Linux 6.1 подсистема подсветки была переработана. Если после обновления подсветка не работает, сперва попробуйте удалить существующий параметр ядра acpi_backlight. На некоторых ноутбуках Optimus можно попробовать загрузиться с параметром acpi_backlight=nvidia_wmi_ec.

Правило udev

Если доступен интерфейс ACPI, уровень подсветки может быть установлен во время загрузки с помощью правила udev:

/etc/udev/rules.d/81-backlight.rules
# Установить уровень подсветки равным 8
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"

setpci

В некоторых случаях (например, Intel Mobile 945GME [1]) можно задать регистр видеокарты для регулировки подсветки. Это означает регулировку подсветки путём непосредственного манипулирования оборудованием, что может быть рискованно и, как правило, не является хорошей идеей. Не все видеокарты поддерживают этот метод.

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

# setpci -s 00:02.0 F4.B=0

Внешние мониторы

VESA DDC/CI DDC/CI (Display Data Channel Command Interface — командный интерфейс обмена данными между компьютером и монитором) может использоваться для связи с внешними мониторами, реализующими стандарт MCCS (Monitor Control Command Set) по шине I2C.

DDC может контролировать яркость, контрастность, входы и т.д. на поддерживаемых мониторах. Настройки, доступные с панели OSD (экранное меню), также могут управляться через DDC.

Может понадобиться загрузить модуль ядра i2c-dev, если устройства /dev/i2c-* отсутствуют.

Для получения или изменения яркости можно использовать ddcutil:

 # apt-get install ddcutil
# ddcutil capabilities | grep "Feature: 10"
  Feature: 10 (Brightness)
# ddcutil getvcp 10
VCP code 0x10 (Brightness                    ): current value =    60, max value =   100
 # ddcutil setvcp 10 70
Примечание:
  • ddcutil может не работать с некоторыми возможностями VCP, если на мониторе включена функция, которая уже автоматически их настраивает (например, Dynamic Contrast Ratio или BenQ Eye Care).
  • Чтобы упростить настройку горячих клавиш для управления яркостью, может быть удобно предоставить доступ обычному пользователю к соответствующим устройствам I2C. Для этого создайте группу i2c и настройте udev на назначение этой группы устройствам I2C. [2]
  • Пакет ddcutil предоставляет файл /usr/share/ddcutil/data/90-nvidia-i2c.conf, который можно скопировать в /etc/X11/xorg.conf.d/ вместо ручной настройки Xorg. Также он предоставляет правила udev /usr/share/ddcutil/data/45-ddcutil-i2c.rules и /usr/share/ddcutil/data/45-ddcutil-usb.rules.

Выключение подсветки

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

$ xset dpms force off

Подсветка должна включиться снова при движении мыши или вводе с клавиатуры.

Сохранение и восстановление

Пакет systemd предоставляет «static» службу systemd-backlight@.service, которая включена по умолчанию. Она сохраняет яркость подсветки во время выключения ПК и восстанавливает при включении. Эта служба использует метод ACPI, описанный в разделе #ACPI, создавая службы для каждого каталога, найденного в /sys/class/backlight/. Например, если есть каталог acpi_video0, она создаст службу systemd-backlight@backlight:acpi_video0.service. Если вы используете другие методы установки яркости во время загрузки, рекомендуется отключить systemd-backlight путём добавления параметра ядра systemd.restore_state=0. Смотрите man systemd-backlight@.service для более подробной информации.

Примечание: Некоторые ноутбуки имеют несколько видеокарт (например, Optimus) и восстановление подсветки может не сработать. Попробуйте [замаскировать] отдельный экземпляр этой службы, например systemd-backlight@backlight:acpi_video1 в случае acpi_video1.

Кроме того, утилита light поддерживает функцию сохранения и восстановления. Эта утилита может быть более полезна, если вы хотите сохранять яркость для отдельных пользователей, однако для этого не предусмотрено никаких юнитов systemd.

Утилиты настройки

Примечание: Приведённые в таблице утилиты можно использовать для управления яркостью экрана. Все они совместимы с Wayland и не требуют X. Некоторые (например, light) добавляют правила udev, разрешающие пользователям из группы video (или input) изменять яркость.


Пакет Управление подсветкой клавиатуры Реагирование на освещённость Язык Лицензия Примечания
acpilight Symbol support vote.svg  Symbol oppose vote.svg  Python3 GPL 3.0 или новее Предоставляет исполняемый файл «xbacklight»
xbacklight Symbol oppose vote.svg  Symbol oppose vote.svg  C MIT Простой демон уведомлений для X11 (считывает RandR-свойство backlight)
Примечание: Команды для запуска этих утилит можно привязать к клавишам XF86MonBrightnessUp и XF86MonBrightnessDown


xbacklight

Яркость может быть установлена с помощью пакета xbacklight.

Примечание:
  • xbacklight работает только с Intel. Другие драйверы не поддерживают RandR-свойство backlight.
  • xbacklight в настоящий момент не работает с драйвером modesetting [3].


Чтобы установить яркость в 50% от максимальной:

$ xbacklight -set 50

Приращения могут использоваться вместо абсолютных значений, например, для увеличения или уменьшения яркости на 10%:

$ xbacklight -inc 10
$ xbacklight -dec 10

Если вы получаете ошибку «No outputs have backlight property», это потому, что xrandr/xbacklight не выбирает правильный каталог в /sys/class/backlight. Вы можете указать каталог, задав опцию Backlight в разделе Device в файле /etc/X11/xorg.conf.d/20-video.conf. Например, если имя каталога intel_backlight и используется драйвер Intel, раздел Device может выглядеть так:

/etc/X11/xorg.conf.d/20-intel.conf
Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
EndSection
Примечание: Использование этого в связке со встроенной и дискретной видеокартами может привести к непредсказуемым задержкам обновления экрана и/или мерцанию интерфейса в приложениях, которые работают на дискретной видеокарте. Используйте это только в том случае, если всё остальное не помогает.


Если у вас включена функция Intel Fastboot, может возникнуть ошибка No outputs have backlight property. В этом случае попытка применить описанный выше метод может привести к сбою Xorg при запуске. Чтобы решить проблему, Fastboot следует отключить. Известно, что он вызывает проблемы с управлением яркостью.

Использование DBus с GNOME

Яркость также можно регулировать с помощью настроек gnome. При использовании этого метода изменения отражаются в интерфейсе gnome.

$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.freedesktop.DBus.Properties.Set org.gnome.SettingsDaemon.Power.Screen Brightness "<int32 50>"

Пошаговое изменение яркости (для контроля с клавиатуры) также может быть реализовано этим методом.

$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp
$ gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepDown

Использование DBus с KDE

Смотрите https://userbase.kde.org/KDE_Connect/Tutorials/Useful_commands#Brightness_settings.

Цветовая коррекция

Цветокоррекция не меняет яркость подсветки, а просто меняет LUT, то есть не влияет на время работы от батареи. Тем не менее, она может быть полезна, когда управление подсветкой недоступно (на настольных ПК или ноутбуках с OLED-экранами).

  • Monica - инструмент для калибровки монитора. Работает как фронтенд к xgamma для изменения гамма-коррекции. - Оф.сайт - пакет: monica
  • Redshift - инструмент для настройки цветовой температуры. Регулирует цветовую температуру изображения в зависимости от окружения. Это может снизить нагрузку на глаза, если вы работаете по ночам. Вдохновлён программой f.lux - Оф. сайт - пакет: redshift
  • xcalib - лёгкий загрузчик параметров калибровки монитора. Может загружать ICC-профиль монитора для совместного использования в настольных приложениях. - Оф. сайт - пакет: xcalib
  • xgamma - Настройка гамма-коррекции монитора. - Оф. сайт - пакет: xgamma

Приложения

Monica

Установка:

# apt-get install monica

Для запуска введите в консоли:

$ monica

Redshift

Установка:

# apt-get install redshift

Запуск службы (служба запускается от обычного пользователя):

$ systemctl --user enable --now redshift

Автонастройка местоположения не работает из-за Geoclue2. Но настройку можно сделать вручную.

Создаем файл

$ mcedit $HOME/.config/redshift.conf

Копируем в него следующее содержимое:

[redshift]
; Set the day and night screen temperatures
temp-day=6500
temp-night=5500

; enabling smooth transition
transition=1

adjustment-method=randr

; Now specify the location manually
location-provider=manual

[manual]
; use the Internet to get your latitudes and longitudes
lat=52.4064
lon=16.9252

lat/lon - Latitudes и longitudes - Широта и долгота. Открываем карты (Google, Яндекс), находим свое местоположение, находим координаты и вставляем их в конфигурационный файл.

Перезапускаем службу:

$ systemctl --user restart redshift

Wayland

Redshift не поддерживает Wayland (но есть форк redshift-wayland-git). В Альте пока нет! Можно применить нужную температуру в tty перед запуском композитора.

Например:

$ redshift -m drm -PO 3000

Некоторые композиторы позволяют применять цветокоррекцию во время работы:

  • Для GNOME можно использовать встроенный Night Light - Ночной свет.
  • Для KDE можно использовать встроенную Ночную цветовую схему.
Примечание: Ни в GNOME, ни в KDE не работает ночной режим в Wayland на видеокартах NVIDIA из-за того, что драйвер не поддерживает некоторые функции LUT. Смотрите issue 162 на GitHub и эту новость о попытках разработчиков KDE заставить это работать.

Xorg: настройка воспринимаемой яркости с помощью xrandr

Можно использовать Xrandr для изменения воспринимаемой яркости.

Для установки воспринимаемой яркости выше максимального уровня (действуют вышеупомянутые предостережения для NVIDIA):

$ xrandr --output название_вывода --brightness 2

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

Это также можно использовать для уменьшения воспринимаемой яркости в тёмной комнате, указав значение меньше 1 (например, 0.5). Это полезно, когда нет возможности регулировать подсветку (например, на настольном компьютере).

Определить название вывода подключенного устройства можно такой командой:

$ xrandr | grep -w connected | cut -f '1' -d ' '

Для удобства можно сделать псевдоним:

$ alias b='echo -e "Введите яркость:\n"; read val; xrandr --output название_вывода --brightness "${val}"'

NVIDIA settings

Пользователи проприетарных драйверов NVIDIA могут менять яркость дисплея с помощью утилиты nvidia-settings в разделе «X Server Color Correction». Однако имейте в виду, что это не имеет ничего общего с подсветкой (Интенсивность), она всего лишь регулирует цветность. (Уменьшение яркости таким образом не является энергоэффективным. Используйте его в последнюю очередь, если все другие варианты не срабатывают; увеличение яркости портит цвета на экране полностью, по аналогии с засвеченностью фотографий.)

Решение проблем

Частота ШИМ-модуляции подсветки (только для Intel i915)

Известно, что на ноутбуках со светодиодной подсветкой иногда мерцает экран. Это объясняется тем, что наиболее эффективным способом управления яркостью подсветки светодиодов является быстрое включение и выключение светодиодов, изменяя время их свечения.

Однако частота переключения, так называемая частота ШИМ (широтно-импульсная модуляция) может быть недостаточно высокой, чтобы глаз воспринимал её как непрерывное свечение, и вместо этого видно мерцание. Это вызывает у некоторых людей такие симптомы, как головные боли и усталость глаз.

Если у вас графический адаптер Intel i915, то возможно настроить частоту ШИМ, чтобы устранить мерцание.

Период ШИМ (обратно пропорциональный частоте) записывается в 2 старших байта регистра 0xC8254 (если вы используете чипсет Intel GM45, вместо этого используйте адрес 0x61254). Чтобы манипулировать значениями регистров, установите пакет igt-gpu-tools.

Чтобы увеличить частоту, период должен быть уменьшен. Например:

# intel_reg read 0xC8254
0xC8254 : 0x12281228

Затем, чтобы удвоить частоту ШИМ, разделите 2 старших байта (4 шестнадцатеричные цифры) на 2 и запишите полученное значение, сохраняя нижние байты неизменными:

# intel_reg write 0xC8254 0x09141228

Вы можете использовать онлайн-калькулятор для расчета желаемого значения: https://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html

Чтобы установить новую частоту автоматически, попробуйте написать правило udev.

Не работает управление яркостью панели eDP (только для Intel i915)

Embedded Display Port (eDP) v1.2 добавил новый протокол управления панелью дисплея для подсветки и других элементов управления, который работает через канал AUX [4]

По умолчанию драйвер i915 пытается использовать ШИМ для управления яркостью подсветки, что может не сработать.

Чтобы менять подсветку путём записи в регистры DPCD по каналу AUX, пропишите параметр ядра i915.enable_dpcd_backlight=1.

sysfs редактируется, но яркость не меняется

Примечание: Такое поведение и способы его обхода были подтверждены на Dell M6700 с Nvidia K5000m (версия BIOS до A10) и Clevo P750ZM (Eurocom P5 Pro Extreme) с Nvidia 980m.

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

Если вы протестировали рекомендуемые параметры ядра и только xbacklight работает, то, возможно, вы столкнулись с несовместимостью между вашим BIOS и драйвером ядра.

В этом случае единственное решение — дождаться исправления от производителя BIOS или драйвера видеокарты.

Обходной путь — использовать inotify для запуска xbacklight после каждого изменения значения /sys/class/backlight/acpi_video0/actual_brightness.

Сперва установите пакет inotify-tools. Затем создайте скрипт, который будет запускаться при каждом включении с помощью автозагрузки.

/usr/local/bin/xbacklightmon:

#!/bin/sh

path=/sys/class/backlight/acpi_video0

luminance() {
    read -r level < "$path"/actual_brightness
    factor=$(printf "$max" | awk '{print 100/$1}')
    printf "$level $factor" | awk '{print int($1*$2)}'
}

read -r max < "$path"/max_brightness

xbacklight -set "$(luminance)"

inotifywait -me modify --format '' "$path"/actual_brightness | while read; do
    xbacklight -set "$(luminance)"
done

Не работает управление подсветкой в MATE

Убедитесь, что установлен пакет mate-power-manager.

Не работают клавиши управления подсветкой в Xfce

В Xfce4 за обработку клавиш управления подсветкой отвечает Менеджер питания.

Иногда параметр «Обрабатывать кнопки яркости экрана» может оказаться отключен по умолчанию.

Чтобы включить их обработку, откройте настройки менеджера питания и включите соответствующий параметр:

$ xfce4-power-manager -c

xbacklight выдаёт: No outputs have backlight property

Иногда, в зависимости от установленной видеокарты, xbacklight из пакета xbacklight может выдать сообщение «No outputs have backlight property». Пакет acpilight предоставляет альтернативную реализацию xbacklight, которая может оказаться рабочей.

На драйвере amdgpu после перезагрузки подсветка всегда имеет максимальную яркость

Из-за бага в драйвере amdgpu значение actual_brightness подсветки сообщается как 16-битное целое число, которое находится за пределами 8-битного диапазона, указанного в max_brightness. Это приводит к тому, что служба systemd-backlight при загрузке пытается установить слишком большое значение, которое в итоге уменьшается до максимальной яркости (255).

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

fix-brightness.sh:

#!/bin/bash

# Адаптируйте эту строку под ваше оборудование
BRIGHTNESS_FILE="/var/lib/systemd/backlight/pci-0000:04:00.0:backlight:amdgpu_bl0"
BRIGHTNESS=$(cat "$BRIGHTNESS_FILE")
BRIGHTNESS=$(($BRIGHTNESS*255/65535))
BRIGHTNESS=${BRIGHTNESS/.*} # преобразование в целое число на всякий случай
echo $BRIGHTNESS > "$BRIGHTNESS_FILE"

fix-brightness.service:

[Unit]
Description=Convert 16-bit brightness values to 8-bit before systemd-backlight applies it
Before=systemd-backlight@backlight:amdgpu_bl0.service

[Service]
Type=oneshot
ExecStart=''путь/к/fix-brightness.sh''

[Install]
WantedBy=multi-user.target

На некоторых системах уровень подсветки, о котором сообщает драйвер, находится в правильном диапазоне [0, 255], но systemd всё равно не может восстановить правильное значение. Вероятно, это связано с гонкой в ядре. В этом случае преобразование уровня яркости не поможет, так как он уже находится в правильном диапазоне. Вместо этого в качестве обходного пути можно сохранить уровень яркости в systemd перед выключением. Этого можно добиться с помощью следующего скрипта и юнита службы:

fix-brightness.sh:

#!/bin/sh

# Уровень подсветки с точки зрения systemd (измените при необходимости)
readonly SYSTEMD_BACKLIGHT_FILE='/var/lib/systemd/backlight/pci-0000:04:00.0:backlight:amdgpu_bl0'

# Уровень подсветки из драйвера AMDGPU
readonly AMDGPU_BACKLIGHT_FILE='/sys/class/backlight/amdgpu_bl0/brightness'

# Читаем текущее значение из драйвера и применяем его в systemd
readonly AMDGPU_BACKLIGHT_VALUE=$(cat "$AMDGPU_BACKLIGHT_FILE")
echo "$AMDGPU_BACKLIGHT_VALUE" > "$SYSTEMD_BACKLIGHT_FILE"

fix-brightness.service:

[Unit]
Description=Save brightness value from AMDGPU
DefaultDependencies=no
After=final.target

[Service]
Type=oneshot
ExecStart=''путь/к/fix-brightness.sh''

[Install]
WantedBy=final.target

Сохранение яркости <5% при перезагрузке

Согласно man 8 systemd-backlight@.service, если свойство udev ID_BACKLIGHT_CLAMP не установлено в false, минимальное допустимое значение сохраняемой яркости — 1 или 5% от максимальной яркости, в зависимости от того, что больше. Это ограничение будет снято, когда ядро позволит надёжно устанавливать в пользовательском пространстве значение яркости, не приводящее к выключению дисплея.

Чтобы яркость <5% сохранялась при перезагрузке, создайте правило udev:

/etc/udev/rules.d/99-backlight_clamp.rules:

# Разрешить сохранять яркость <5% при перезагрузке
SUBSYSTEM=="backlight", ENV{ID_BACKLIGHT_CLAMP}="0"

Источники