команда acpid в Linux с примерами
Демон acpid обеспечивает интеллектуальное управление питанием в системе и позволяет запрашивать состояние батареи и конфигурации, поддерживая расширенный интерфейс конфигурации и питания (ACPI). События ACPI уведомляются программами пользовательского пространства с помощью acpid.
Спецификация ACPI (Advanced Configuration и Power Interface) позволяет операционной системе контролировать количество энергии, которое она предоставляет каждому устройству или периферийному устройству, подключенному к системе. Это заставляет операционную систему отключать определенные устройства, когда они больше не используются, например монитор, обеспечивая стабильное и эффективное управление питанием.
Демон acpid по умолчанию работает как фоновый процесс и должен запускаться во время загрузки системы . Всякий раз, когда происходит событие, он выполняет программы для обработки события. Это происходит при открытии файла событий (по умолчанию / proc / acpi / event) и считывании всех строк. Когда строка получена (событие), она проверяет список правил, чтобы выполнить то, которое соответствует событию. Если существует файл блокировки (по умолчанию / var / lock / acpid), он игнорирует все входящие события ACPI.
Простые файлы конфигурации используются для определения правил. Он просматривает каталог конфигурации (по умолчанию / etc / acpi / events), и все файлы, которые не начинаются с точки (‘.’) Или заканчиваются тильдой (
), анализируются. Каждый файл должен определять событие и соответствующее действие. Пустые строки или строки с первым символом в виде хэша (‘#’) игнорируются.
В каждой строке есть три токена : ключ , буквальный знак равенства и значение .
- Ключ может содержать до 63 символов, регистр не учитывается, но пробелы имеют значение.
- Значение может содержать до 511 символов, оно чувствительно к регистру и пробелам. Значение события состоит из регулярного выражения, и события сопоставляются с ним.
Команда установки:
Сводка:
Параметры:
- c, –confdir каталог
Изменяет каталог, в котором acpid ищет файлы конфигурации правил. Каталог по умолчанию / etc / acpi / events. - C, –clientmax число
Изменяет максимальное количество подключений некорневого сокета, которое может быть сделано к сокету acpid. По умолчанию 256. - d, –debug
Увеличивает уровень отладки acpid на единицу. Он запускается на переднем плане, если уровень отладки отличен от нуля, и регистрируется в stderr и обычном системном журнале. - e, –eventfile filename
Изменяет файл события. Acpid читает события из него. Файл по умолчанию / proc / acpi / event. - f, –foreground
Сохраняет кислотность на переднем плане, не разветвляясь при запуске. - l, –logevents
Сообщает acpid регистрировать информацию, связанную со всеми событиями и действиями. - L, –lockfile имя файла
Изменяет файл блокировки, используемый для остановки обработки событий. Файл по умолчанию / var / lock / acpid. - g, –socketgroup groupname
Изменяет групповое владение доменным сокетом. Acpid публикует события для него. - м, режим сокет-режима
Изменяет разрешения сокета домена UNIX. По умолчанию 0666. - s, –socketfile filename
Изменяет имя сокета домена UNIX, который открывается с помощью acpid. По умолчанию используется /var/run/acpid.socket. - S, –nosocket имя файла
Говорит acpid не открывать сокет домена UNIX. Это отменяет параметр -s, а также отменяет все остальные параметры сокета. - p, –pidfile filename
Указывает acpid использовать указанный файл в качестве pid-файла. Если файл существует, он будет удален и перезаписан. По умолчанию используется /var/run/acpid.pid. - v, –версия
Распечатывает информацию о версии и завершает работу.
ч, –помощь
Показывает помощь и выходы.
Сервисный контроль
- Используйте служебную утилиту для управления сервисом acpid:
Для запуска услуги:
Вам будет предложено для аутентификации.
Чтобы остановить службу:
Вам будет предложено для аутентификации.
Проверьте, запущено или остановлено обслуживание:
acpid (Русский)
Contents
Краткое вступление
Многие руководства описывают процесс настройки мультимедийных клавиш с использованием таких программ как xev или keyTouch. Настоящая статья поясняет использование утилиты acpi_listen и создание вашего собственного скрипта для горячих клавиш.
Для кого предназначено данное руководство?
Данный метод предполагает, что сигналы с клавиатуры передаются через acpi. Если вам неизвестно, как это происходит в вашей системе, то полезно обратиться к статьям:
- Using Multimedia Keys in Linux
- Hotkeys
Установка необходимых инструментов
Скорее всего, все необходимое уже присутствует на вашей машине, но для уверенности лучше выполнить
Данная статья рассказывает, какие модули вам необходимо загрузить (например, в /etc/rc.conf или через modprobe).
Использование acpi_listen
Из-под суперпользователя или же из-под обычного, но с достаточными привилегиями доступа к устройствам ввода, выполните:
Если при нажатии особой клавиши, например «Следующий» («Next») или «Предыдущий» («Previous») на экране появляются строки, похожие на:
значит все в порядке и можно продолжать.
Настройка ACPID
Демон ACPI реагирует на события ACPI в соответствии с содержимым файла handler.sh , который находится в /etc/acpi/handler.sh
Вы можете либо редактировать его непосредственно, либо указать в нем другой скрипт (например /etc/acpi/hotkeys.sh )
В файл /etc/acpi/hotkeys.sh нужно добавить следующие строки:
Значения «00000b31» и тому подобные представляют собой ответ, полученный от acpi_listen. «$4» представляет собой последнюю часть строки «hkey VALZ 00000000 00000b31» и различает мультимедийные клавиши.
К тому же можно создать краткий shell-скрипт для управления медиа проигрывателем (на примере Exaile), который назовем exailectl. Так как ACPID запускается от суперпользователя, то вызов Exaile нужно выполнить командой:
В противном случае acpi не сможет обнаружить нашу плеер, работающий на пользовательском уровне запуска, и воссоздаст другой процесс.
Устаревшее: пример скрипта
Так как keyTouch и другие программы для работы с клавиатурой у меня либо не заработали, либо работали не совсем хорошо, то перед редактированием handler.sh я создал свой скрипт, запускающийся в фоне и непосредственно реагирующий на вывод acpi_listen. Это не совсем правильный способ, так как его работа постоянно нагружала мой ноутбук. Но так или иначе я привожу данный скрипт, поэтому вы можете использовать или изменять его для себя, а также добавлять свои предложения по его улучшению. Он создан для ноутбука Toshiba Satellite A50 и управляет плеером Exaile, но его легко изменить для управления Amarok, Xine или даже приспособить для немультимедийных программ.
Указание: скрипт необязательно запускать из-под суперпользователя, если вы можете получать ответ acpi_listen из-под обычного пользовательского аккаунта (снова подразумевается, что для него возможен доступ к устройствам ввода).
Управление питанием и настройки 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 строки:
Лезем в acpi. Создайте файлы со следующим содержанием.
Для увеличения яркости:
Для уменьшения яркости:
В bl_device замените inel_backlight на своё значение в зависимости от используемой видеокарты. Также стоит выяснить устраивающее вас значение, на основе которого будет увеличиваться или уменьшаться яркость экрана. У автора это значение = 200.
Как найти подходящее значение? Посмотрите какая цифра стоит сейчас. Если вы ничего ещё не настраивали, она должна отражать максимально допустимое значение:
Теперь поиграйте со значениями, чтобы выбрать нужный шаг:
Посмотрите как будет изменяться яркость экрана при разных значениях, если при добавлении 10 единиц вы практически не чувствуете разницы, добавьте ещё 50-100 единиц. Какой шаг покажется оптимальным, тот и оставьте.
Теперь укажем acpi использовать наши скрипты:
и сделаем эти скрипты исполняемыми:
Чтобы автоматически подбирать яркость при работе от аккумулятора или же сети, установим laptop-mode-tools:
и немного изменим его настройки:
Разумеется, значения 700/2000/3000 и путь /sys/class/backlight/intel_backlight/brightness должны быть заменены на ваши значения.
Автогибернация при критическом уровне заряда батареи
Достаточно часто бывает такое, что при работе от батареи забываешь посматривать на уровень её заряда, в результате чего получаешь отключение машины при полной разрядке батареи. Внезапное — как хлопок — выключение и все несохранённые данные потеряны. Обидно, не правда ли? Поэтому неплохо было бы позаботиться о своевременных мерах предосторожности.
Для этих целей также будем использовать функционал laptop-mode.
Если вас не устраивают значения по умолчанию, вы также можете изменить их. В случае, если до этого момента у вас не был указан раздел swap, укажите его в grub2, эти настройки уже были даны выше:
где /dev/sda5 — ваш swap-раздел Кроме того, в случае с archlinux следует добавить хук suspend в /etc/mkinitcpio.conf :
и пересобрать initrd:
Регулировка звука
Для этого снова обратимся к скриптам acpi, как и в случае с управлением яркостью дисплея.
Делаем скрипты в actions исполняемыми:
Для корректного распознавания мультимедийных клавиш, лучше использовать утилиту xmodmap .
Acpi и события клавиш
Честно говоря, меня устраивает поведение по-умолчанию, поэтому с пристрастием этот вопрос не рассматривался. При закрытии крышки ноутбука машина переходит в режим гибернации. При нажатии кнопки питания — корректно отключает систему. Оно и хорошо.
Похоже, управление этими событиями тоже берёт на себя laptop-mode-tools ( только пока неясно, в каком модуле/скрипте лежат эти настройки), поскольку в /etc/acpi/handler.sh каких-либо действий на события не назначено.
Но таки рассмотрим как настраивать то или иное событие.
Ответственен за эти шаманские действа вышеупомянутый handler.sh (или default.sh в зависимости от используемого дистрибутива), где и прописываются настройки. В случае, если вам хочется использовать не команду, а скрипт, расположите его в отдельном файле, подобно тому, как выше настраивалось управление яркостью дисплея и уровнем громкости .
button/lid указывает на управление закрытием/открытием крышки ноутбука, пока здесь нет ничего интересного.
Пример с воспроизведением звукового файла при закрытии/открытии крышки ноутбука:
То есть для настройки события нужно добавить его команду в соответствующее поле ( здесь после 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 :
Пожалуй, на этом стоит остановиться и дать читателю возможность самостоятельно поэкспериментировать с настройками энергосбережения и событий acpi.