acpid (Русский)
acpid2 — это гибкий и расширяемый демон для доставки событий ACPI. Когда происходит событие, демон запускает программы для его обработки. Эти события запускаются определёнными действиями, такими как:
- Нажатие специальных кнопок, включая кнопки выключения и сна
- Закрытие крышки ноутбука
- Подключение или отключение внешнего питания ноутбука
- Подключение или отключение наушников и т.д.
Установка
Установите пакет 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
, чтобы она прочла и применила изменения в этих файлах.
Советы и рекомендации
Примеры событий
Ниже приведены примеры событий, которые можно использовать в скрипте /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
.