Как установить нулевую яркость на ноутбуках, у которых на регуляторе яркости установлена ненулевая минимальная яркость?
Решение должно работать независимо от XIe, оно также должно работать в виртуальных терминалах.
решение1
В сегменте ноутбуков с чипсетами Intel, похоже, существует разделение между панелями, подключенными по LVDS и eDP:
еDP:
echo 4 > /sys/class/backlight/intel_backlight/bl_power
…следует отключить подсветку.
echo 0 > /sys/class/backlight/intel_backlight/bl_power
Низковольтная дифференциальная передача:
Я обнаружил, что невозможно отключить подсветку на моих планшетах Thinkpad X201 и X201 через sysfs (bl_power ничего не делает; по-видимому, это относится только к eDP).
Эта страницаимеет очень длинное описание запутанной истории управления подсветкой в ядре Linux. TL;DR:
i915 поддерживает bl_power для панелей eDP (но не LVDS), начиная с версии 3.18.
ОДНАКО,Мне удалось отключить подсветку с помощью инструмента под intel_backlight
названиемintel-gpu-tools. Для этого требуются права root, поскольку, по-видимому, запись производится в необработанный регистр.
intel_backlight 0
...выключил подсветку. Увеличив яркость с помощью регуляторов, я ее снова включил.
Я также написал скрипт, который подключил для срабатывания по событию ACPI, генерируемому клавиатурой (в моем случае это fn+space или ) button/zoom
. Если ваша система не использует это событие ACPI, вам нужно использовать acpi_listen, чтобы найти то, которое есть в вашей системе.
Чтобы запустить его, я создал файл с fnspace-backlight
именем /etc/acpi/events
:
# Wyatt Ward
# hook for magnify acpi event (fn+space)
# toggle LCD backlight on/off
event=button/zoom
action=/etc/acpi/actions/toggle-lcd-light.sh
Я также создал файл с именем /etc/acpi/actions/toggle-lcd-light.sh
, помеченный как исполняемый. Это позволяет мне переключать подсветку, не меняя ранее установленный уровень яркости, сохраняя временное значение в /brightness
. Поскольку события ACPI запускают действия от имени пользователя root, будьте осторожны.
#! /bin/bash
BRIGHTSAVEFILE="/brightness"
BRIGHTSYSFS="/sys/class/backlight/acpi_video0/brightness"
# is the light on or off?
INTEL_BACKLIGHT="/usr/bin/intel_backlight"
light_state=$("$INTEL_BACKLIGHT" | sed 's/current backlight value: //g'|sed 's/%//g')
echo "light: ""$light_state"
if [ "$light_state" -eq 0 ]; then
cat "$BRIGHTSAVEFILE" > "$BRIGHTSYSFS"
else
# back up current brightness level
cat "$BRIGHTSYSFS" > "$BRIGHTSAVEFILE"
# turn off backlight
"$INTEL_BACKLIGHT" 0
fi
А еще забавное замечание: вы можете управлять подсветкой с невероятной степенью детализации, слегка изменив intel_backlight. Изменение его для чтения аргументов как чисел с плавающей точкой, а не целых чисел, и для выполнения арифметики с плавающей точкой, требует только настройки нескольких строк кода и позволяет вам делать смехотворно точные изменения яркости, включая те, которые ниже минимума, который вы можете получить через sysfs.
решение2
Из X-Windows
В X Windows вы можете использовать приложение xbacklight
для получения и установки процентного значения яркости экрана.
Пример
текущий уровень
$ xbacklight -get
100.000000
установлен на 75%
$ xbacklight -set 75
$ xbacklight -get
73.333333
установить обратно на 100%
$ xbacklight -set 100
$ xbacklight -get
100.000000
С консоли
Чтобы добиться чего-то подобного для виртуального терминала, вам, скорее всего, придется взаимодействовать с настройками ACPI через /sys
файловую систему.
Пример
затемняет его
$ echo "10" | sudo tee /sys/class/backlight/acpi_video0/brightness
10
полная яркость
$ echo "15" | sudo tee /sys/class/backlight/acpi_video0/brightness
15
Вам придется поиграться с этим, диапазон яркости может быть от 0 до 9 или от 0 до 15, я думаю, что в конечном итоге это зависит от вашего ноутбука.
Ничего из этого не работает?
Если ни один из этих двух вариантов вам не подходит, взгляните на тему ArchLinux Wiki под названием:Подсветка. В этой статье описаны все методы, которые я когда-либо видел для достижения этой цели!