Linux acpi backlight vendor

What do the kernel parameters acpi_osi=linux and acpi_backlight=vendor do?

I had troubles with the screen brightness control in my laptop and I fixed it by adding the acpi_osi=linux and acpi_backlight=vendor parameters to the file grub.cfg . I’d like to know what these parameters mean and why they work.

2 Answers 2

To understand what acpi_osi does, you roughly need to know how ACPI works. ACPI consists of so-called tables that the BIOS loads into RAM before the operating system starts. Some of them simply contain information about essential devices on the mainboard in a fixed format, but some like the DSDT table contain AML code. This code is executed by the operating system and provides the OS with a tree structure describing many devices on the mainboard and callable functions that are executed by the OS when e.g. power saving is enabled. The AML code can ask the OS which OS it is by calling the _OSI function. This is often used by vendors to make workarounds e.g. around bugs in some Windows versions.

As many hardware vendors only test their products with the (at that time) latest version of Windows, the «regular» code paths without the workarounds are often buggy. Because of this Linux usually answers yes when asked if it’s Windows. Linux also used to answer yes when asked if it’s «Linux», but that caused BIOS vendors to work around bugs or missing functionality in the (at that time) latest Linux kernel version instead of opening bug reports or providing patches. When these bugs were fixed the workarounds caused unnecessary performance penalities and other problems for all later Linux versions.

acpi_osi=Linux makes Linux answer yes again when asked if it’s «Linux» by the ACPI code, thus allowing the ACPI code to enable workarounds for Linux and/or disable workarounds for Windows.

Читайте также:  Монтировать sd карту linux

acpi_backlight=vendor changes the order in which the ACPI drivers for backlights are checked. Usually Linux will use the generic video driver, when the ACPI DSDT provides a backlight device claiming standard compatibility and will only check other vendor specific drivers if such a device is not found. acpi_backlight=vendor reverses this order, so that the vendor specific drivers are tried first.

Источник

Управление питанием и настройки acpi

Трудно приходится линуксоидам, не имеющим DE, а сидящим исключительно на WM — всё, что в полноценном Desktop Environment ( окружении рабочего стола или как это лучше обозначить на великом и могучем? ) поставляется и работает «из коробки» в WM нужно подбирать и настраивать. Вот и автором сего поста ранее были использованы элементы xfce для таких вещей как управление питанием, регулировка громкости звука и яркости экрана. Но вступило что-то в голову: ведь в моей системе всегда установлены acpi и laptop-mode-tools, так почему бы не обучить их выполнять их же непосредственные обязанности: делать всё то, для чего раньше нужны были xfce4-volumed и xfce4-power-manager?

Для обучения нам понадобятся пакеты laptop-mode-tools , acpi , acpid . Acpid должен быть запущен.

Уровень яркости экрана

Дописать в /etc/default/grub строки:

GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=vendor resume=/dev/sda5"

Лезем в acpi. Создайте файлы со следующим содержанием.

# /etc/acpi/actions/bl_up.sh #!/bin/sh bl_device=/sys/class/backlight/intel_backlight/brightness echo $(($(cat $bl_device)+200)) >$bl_device
# /etc/acpi/actions/bl_down.sh: #!/bin/sh bl_device=/sys/class/backlight/intel_backlight/brightness echo $(($(cat $bl_device)-200)) >$bl_device

В bl_device замените inel_backlight на своё значение в зависимости от используемой видеокарты. Также стоит выяснить устраивающее вас значение, на основе которого будет увеличиваться или уменьшаться яркость экрана. У автора это значение = 200.

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

# cat /sys/class/backlight/intel_backlight/brightness 4882

Теперь поиграйте со значениями, чтобы выбрать нужный шаг:

# echo 1000 > /sys/class/backlight/intel_backlight/brightness # echo 1010 > /sys/class/backlight/intel_backlight/brightness # echo 1100 > /sys/class/backlight/intel_backlight/brightness

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

Читайте также:  Ioctl example in linux

Теперь укажем acpi использовать наши скрипты:

# /etc/acpi/events/bl_up # event=video[ /]brightnessup action=/etc/acpi/actions/bl_up.sh # /etc/acpi/events/bl_down # event=video[ /]brightnessdown action=/etc/acpi/actions/bl_down.sh

и сделаем эти скрипты исполняемыми:

Чтобы автоматически подбирать яркость при работе от аккумулятора или же сети, установим laptop-mode-tools:

и немного изменим его настройки:

# /etc/laptop-mode/conf.d/lcd-brightness.conf # CONTROL_BRIGHTNESS=1 # Commands to execute to set the brightness on your LCD # #BATT_BRIGHTNESS_COMMAND="echo [value]" BATT_BRIGHTNESS_COMMAND="echo 700" LM_AC_BRIGHTNESS_COMMAND="echo 2000" NOLM_AC_BRIGHTNESS_COMMAND="echo 3000" BRIGHTNESS_OUTPUT="/sys/class/backlight/intel_backlight/brightness"

Разумеется, значения 700/2000/3000 и путь /sys/class/backlight/intel_backlight/brightness должны быть заменены на ваши значения.

Автогибернация при критическом уровне заряда батареи

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

Для этих целей также будем использовать функционал laptop-mode.

# /etc/laptop-mode/conf.d/auto-hibernate.conf: # ENABLE_AUTO_HIBERNATION=1 # # The hibernation command that is to be executed when auto-hibernation # is triggered. # HIBERNATE_COMMAND=/usr/share/laptop-mode-tools/module-helpers/pm-hibernate # # Auto-hibernation battery level threshold, in percentage of the battery's # total capacity. # AUTO_HIBERNATION_BATTERY_CHARGE_PERCENT=4 # # Enable this to auto-hibernate if the battery reports that its level is # "critical". # AUTO_HIBERNATION_ON_CRITICAL_BATTERY_LEVEL=1

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

# /etc/default/grub # GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=vendor resume=/dev/sda5"

где /dev/sda5 — ваш swap-раздел Кроме того, в случае с archlinux следует добавить хук suspend в /etc/mkinitcpio.conf :

HOOKS="base udev autodetect modconf block filesystems usbinput fsck resume"

Регулировка звука

Для этого снова обратимся к скриптам acpi, как и в случае с управлением яркостью дисплея.

# /etc/acpi/actions/volume_up.sh # #!/bin/bash /usr/bin/amixer set Master 5%+ # /etc/acpi/actions/volume_down.sh # #!/bin/bash /usr/bin/amixer set Master 5%- # /etc/acpi/events/volume_up # event=button[ /]volumeup action=/etc/acpi/actions/volume_up.sh # /etc/acpi/events/volume_down # event=button[ /]volumedown action=/etc/acpi/actions/volume_down.sh

Делаем скрипты в actions исполняемыми:

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

$ xmodmap -pke > ~/.xmodmap $ vim .xinitrc: xmodmap ~/.xmodmap

Acpi и события клавиш

Честно говоря, меня устраивает поведение по-умолчанию, поэтому с пристрастием этот вопрос не рассматривался. При закрытии крышки ноутбука машина переходит в режим гибернации. При нажатии кнопки питания — корректно отключает систему. Оно и хорошо.

Читайте также:  Typing in terminal linux

Похоже, управление этими событиями тоже берёт на себя laptop-mode-tools ( только пока неясно, в каком модуле/скрипте лежат эти настройки), поскольку в /etc/acpi/handler.sh каких-либо действий на события не назначено.

Но таки рассмотрим как настраивать то или иное событие.

Ответственен за эти шаманские действа вышеупомянутый handler.sh (или default.sh в зависимости от используемого дистрибутива), где и прописываются настройки. В случае, если вам хочется использовать не команду, а скрипт, расположите его в отдельном файле, подобно тому, как выше настраивалось управление яркостью дисплея и уровнем громкости .

button/lid) case "$3" in close) logger 'LID closed' ;; open) logger 'LID opened' ;; *) logger "ACPI action undefined: $3" ;; esac ;;

button/lid указывает на управление закрытием/открытием крышки ноутбука, пока здесь нет ничего интересного.

Пример с воспроизведением звукового файла при закрытии/открытии крышки ноутбука:

button/lid) case "$3" in close) logger 'LID closed' aplay /home/redvi/.scripts/message.wav ;; open) logger 'LID opened' aplay /home/redvi/.scripts/message.wav ;; *) logger "ACPI action undefined: $3" ;; esac ;;

То есть для настройки события нужно добавить его команду в соответствующее поле ( здесь после logger ‘LID closed’ ). Так, действие при открытии крышки нужно будет вписать после logger ‘LID opened’ .

  • button/power — события, связанные с кнопкой управления питанием
  • logger ‘PowerButton pressed’ — когда клавиша нажата
  • button/sleep — сон, если подобная кнопка/клавиша имеется
  • ac_adapter — события, связанные с подключением/отключением адаптера питания
  • logger ‘AC unpluged’ — когда адаптер отключен
  • logger ‘AC pluged’ — когда адаптер подключен
  • battery — батарея ноутбука
  • button/lid — крышка ноутбука

Для перевода в ждущий/спящий режимы можно использовать скрипты laptop-mode-tools из /usr/share/laptop-mode-tools/module-helpers : pm-hibernate и pm-suspend .

Для выключения питания при закрытии крышки достаточно добавить в /etc/acpi/actions/lm_lid.sh строку:

Помимо всего вышеописанного мы можем контролировать парковку головок жёсткого диска. Дабы отключить парковку совсем пропишите в /etc/laptop-mode/laptop-mode.conf :

BATT_HD_POWERMGMT=254 LM_AC_HD_POWERMGMT=254 NOLM_AC_HD_POWERMGMT=254

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

Источник

Оцените статью
Adblock
detector