acpid (Русский)

acpid2 — это гибкий и расширяемый демон для доставки событий ACPI. Когда происходит событие, демон запускает программы для его обработки. Эти события запускаются определёнными действиями, такими как:

  • Нажатие специальных кнопок, включая кнопки выключения и сна
  • Закрытие крышки ноутбука
  • Подключение или отключение внешнего питания ноутбука
  • Подключение или отключение наушников и т.д.
Примечание: Окружения рабочего стола, такие как GNOME, менеджер входа systemd и демоны обработки дополнительных клавиш могут реализовывать собственные схемы обработки событий, независимые от acpid. Одновременный запуск нескольких систем может приводить к неожиданному поведению, такому как двойному уходу в ждущий режим после нажатия кнопки сна. Вы должны помнить об этом и включать только желаемые обработчики.

Состояние перевода: На этой странице представлен перевод статьи acpid. Дата последней синхронизации: 11 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Установка

Установите пакет acpid. Затем запустите/включите службу acpid.service.

Настройка

acpid поставляется с рядом предопределенных действий для событий, например для того, что должно произойти при нажатии кнопки питания. По умолчанию эти действия определены в файле /etc/acpi/handler.sh, который выполняется после возникновения любого ACPI-события (как указано в ).

Ниже приводится краткий пример одного из таких действий. В этом случае при нажатии кнопки сна acpid запускает команду , которая должна увести компьютер в ждущий режим:

button/sleep)
    case "$2" in
        SLPB) echo -n mem >/sys/power/state ;;
    *)    logger "ACPI action undefined: $2" ;;
    esac
    ;;

К сожалению, не все компьютеры называют ACPI-события одинаково. Например, кнопка сна на одних компьютерах обозначается как SLPB, а на других как SBTN.

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

# journalctl -f

и затем понажимайте интересующие вас кнопки. В журнале должны появиться подобные записи:

logger: ACPI action undefined: PBTN
logger: ACPI action undefined: SBTN

Если это не работает, запустите:

# acpi_listen

или с помощью :

$ netcat -U /var/run/acpid.socket

Затем нажмите кнопку питания, и вы увидите что-то такое:

button/power PBTN 00000000 00000b31

Вывод команды отправляется /etc/acpi/handler.sh в виде параметров $1, $2, $3 и $4. Например:

$1 button/power
$2 PBTN
$3 00000000
$4 00000b31

Как вы могли заметить, в данном примере кнопка сна определилась как SBTN, а не как SLPB, прописанный по умолчанию в файле /etc/acpi/handler.sh. Чтобы кнопка сна работала, может понадобиться исправить SLPB) на SBTN).

Базируясь на этой информации, вы можете легко изменить файл /etc/acpi/handler.sh для выполнения различных команд в зависимости от запускаемых событий. Смотрите раздел #Советы и рекомендации ниже, чтобы узнать о других часто используемых командах.

Альтернативная настройка

По умолчанию все события ACPI проходят через скрипт /etc/acpi/handler.sh. Это прописано в правиле :

# Pass all events to our one handler script
event=.*
action=/etc/acpi/handler.sh %e

Хотя это нормально работает как есть, некоторые пользователи предпочитают разделить правила и действия на отдельные файлы. Следующий пример показывает, как можно как можно создать отдельный файл событий и соответствующий ему скрипт.

Будучи суперпользователем, создайте следующие файлы:

/etc/acpi/events/sleep-button
event=button sleep.*
action=/etc/acpi/actions/sleep-button.sh %e

Сделайте скрипт исполняемым и перезагрузите службу acpid.service, чтобы она прочла и применила изменения в этих файлах.

Советы и рекомендации

Примечание: Некоторые из описанных здесь действий, такие как переключение Wi-Fi и управление подсветкой, уже могут обрабатываться непосредственно драйвером. Сверьтесь с документацией соответствующих модулей ядра.

Примеры событий

Ниже приведены примеры событий, которые можно использовать в скрипте /etc/acpi/handler.sh. Их следует адаптировать под ваше конкретное окружение, например изменить названия переменных, интерпретируемых .

Для изменения яркости экрана ноутбука при подключении или отключении внешнего питания (числа может понадобиться поправить в соответствии с ):

ac_adapter)
    case "$2" in
        AC*|AD*)
            case "$4" in
                00000000)
                    echo -n 50 > /sys/class/backlight/acpi_video0/brightness
                    ;;
                00000001)
                    echo -n 100 > /sys/class/backlight/acpi_video0/brightness
                    ;;
            esac

Включение управления громкостью

Найдите acpi идентификаторы кнопок громкости (смотрите выше) и подставьте их в файлы ниже.

Смотрите также .

Включение управления подсветкой

Можно настроить управление яркостью экрана аналогичным образом. Напишите примерно такой скрипт-обработчик:

и подключите его к ACPI событиям:

/etc/acpi/events/bl_d
event=video/brightnessdown
action=/etc/acpi/handlers/bl -

Переключение Wi-Fi

Вы также можете создать простой переключатель питания Wi-Fi адаптера нажатием кнопки WLAN. Пример события:

и его обработчик:

Получение имени пользователя текущего дисплея

Чтобы запускать команды, зависимые от Xorg, требуется определить X-дисплей и файл MIT magic cookie (через XAUTHORITY). Последний — это учётные данные безопасности, предстоавляющие доступ к X-серверу, экрану и устройствам ввода.

Смотрите как пример функции при использовании xinitrc.

Подключение к сокету acpid

В дополнение к файлам правил acpid принимает соединения по UNIX-сокету, по умолчанию /var/run/acpid.socket. Пользовательские приложения могут подключаться к нему.

Где может быть скриптом, подобным /etc/acpi/handler.sh.

Смотрите также

gollark: +>markov 258639553357676545 2
gollark: It loves saying ++apioform even thought it should say ++remind 7w bees.
gollark: +>markov 258639553357676545 2
gollark: +>markov 258639553357676545 2
gollark: +>markov 258639553357676545 2
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.