apmd - демон мониторинга расширенного управления питанием
(Advanced Power Management)
apmd [-d] [-f
файл ] [-v]
Демон apmd следит за наступлением заданных событий подсистемы
расширенного управления питанием (Advanced Power Management - APM) и, при наступлении
одного из этих событий, выполняет соответствующую последовательность команд.
Демон apmd обрабатывает только события, указанные в файле
конфигурации; все остальные события игнорируются. Для каждого события, о котором
уведомляет подсистема APM BIOS, демон apmd вызывает заданную
в конфигурационном файле последовательность команд. Когда демон apmd контролирует запросы
остановки/режима ожидания (suspend/standby requests), ядро эти запросы
обрабатывать не будет. Поэтому, если необходимо выполнять действие при наступлении
этих событий, надо явно задать соответствующие команды или вызовы встроенных
функций в конфигурационном файле.
Демон apmd распознает следующие опции:
-d |
Запуск в режиме отладки. В результате, демон apmd запускается
в приоритетном режиме, а не в фоновом. |
-f файл |
Задает другой конфигурационный файл, файл , для использования
вместо стандартного, /etc/apmd.conf . |
-v |
Многословный режим работы. |
При запуске демон apmd читает конфигурационый файл (по умолчанию
- /etc/apmd.conf ) и передает набор событий, которые надо
контролировать, драйверу устройства APM. При завершении работы демона драйвер
устройства APM автоматически прекращает контроль событий.
Если процесс apmd получает сигнал SIGHUP ,
он перечитывает свой конфигурационный файл и уведомляет драйвер устройства
APM о любых изменениях в конфигурации.
Демон apmd использует устройство /dev/apmctl для
выполнения запросов ioctl(2) для
контроля событий и управления подсистемой APM. Этот специальный файл устройства
открывается в режиме исключительного доступа, поэтому в каждый момент времени
может работать только один процесс apmd .
Когда демон apmd получает уведомление о событии от подсистемы
APM, он запускает порожденный процесс для выполнения команд, указанных в конфигурационном
файле, а затем продолжает работу в ожидании других событий. Порожденный процесс
выполняет команды последовательно, в указанном порядке.
Пока демон apmd обрабатывает список команд для запросов SUSPEND / STANDBY ,
драйвер устройства APM ядра выдает уведомления подсистеме APM BIOS раз в секунду,
так что BIOS знает, что есть еще не выполненные команды, и что запрос еще нельзя
считать обработанным.
Демон apmd создает файл /var/run/apmd.pid ,
в котором записывает свой идентификатор процесса. Этот идентификатор можно
использовать для остановки или переконфигурирования процесса apmd .
Структура конфигурационного файла демона apmd весьма проста.
Например, конструкция:
apm_event SUSPENDREQ {
exec "sync &&
sync &&
sync"; exec "sleep
1"; exec "zzz";
}
вызовет получение демоном apmd события APM " SUSPENDREQ " (которое
может инициироваться закрытием ноутбука), при обработке которого трижды выполняется
команда " sync ", затем демон ожидает 1 секунду и выполняет
команду zzz ( apm-z ) для перевода системы
в состояние останова.
Итак, конфигурационный файл содержит одну или более подобных конструкций со
следующими компонентами:
Ключевое слово
apm_event apm_event - это ключевое
слово, свидетельствующее о начале конструкции, задающей обработку событий.
События APM Если необходимо выполнять одни и те же команды для разных событий,
имена событий перечисляются через запятую. Поддерживаются следующие имена событий:
- События, игнорируемые ядром, если работает демон apmd :
STANDBYREQ |
|
USERSTANDBYREQ |
|
SUSPENDREQ |
в списке команд должна быть sync |
USERSUSPENDREQ |
в списке команд должна быть sync |
BATTERYLOW |
в списке команд должна быть только zzz |
- События, передаваемые демону apmd после обработки ядром:
NORMRESUME |
CRITRESUME |
STANDBYRESUME |
POWERSTATECHANGE |
UPDATETIME |
CAPABILITIESCHANGE |
Уведомления о других событиях демону apmd не посылаются.
Команды В представленном выше примере три строки, начинающиеся с "
exec " -
это команды обработки события. Каждая строка должна заканчиваться точкой с запятой.
Список команд обработки события надо брать в фигурные скобки, "
{" и "
}".
Для выполнения команд демон
apmd вызывает командный интерпретатор
/bin/sh ,
точно так же, как и системный вызов
system(3).
Команды выполняются последовательно, пока не будет достигнут конец списка или
пока очередная команда не вернет ненулевой статус выхода. Демон
apmd сообщает
о статусе выхода любой не сработавшей команды через системный вызов
syslog(3),
а затем отвергает запрос, посланный APM BIOS.
Встроенные функции Вместо команд можно также вызывать встроенные функции
apmd .
После имени встроенной функции надо указывать точку с запятой, так же, как и
в конце строки команды. В настоящее время поддерживаются следующие встроенные
функции:
- reject : Отвергает последний запрос, выполненный подсистемой
APM BIOS. Эту функцию можно использовать, чтобы отказаться от обработки запроса
останова ( SUSPEND ) при закрытии ноутбука и перевода системы
вместо этого в состояние ожидания ( STANDBY ).
Типичные команды в конфигурационном файле:
apm_event SUSPENDREQ {
exec "/etc/rc.suspend";
}
apm_event USERSUSPENDREQ {
exec "sync && sync && sync";
exec "sleep 1";
exec "apm -z ";
}
apm_event NORMRESUME, STANDBYRESUME {
exec "/etc/rc.resume";
}
# Обработка события resume для мыши на последовательном порту:
# переинициализация демона moused(8), подключенного к этому порту.
#
#apm_event NORMRESUME {
# exec "kill -HUP `cat /var/run/moused.pid`";
#}
#
# Обработка события suspend для пользователей жестких дисков ATA:
# выполняем standby вместо suspend .
# #apm_event SUSPENDREQ {
# reject;
# exec "sync && sync && sync";
# exec "sleep 1";
# exec "apm -Z";
#}
/etc/apmd.conf /dev/apmctl /var/run/apmd.pid
apm(4) ,
apm(8)
Мицуру Ивасаки (Mitsuru IWASAKI) ( iwasaki@FreeBSD.org),
Коё Хидетака (KOIE Hidetaka) ( koie@suri.co.jp)
Определенный вклад внесли также:
Уорнер Лош (Warner Losh) ( imp@FreeBSD.org),
Хироши Ямашита (Hiroshi Yamashita) ( bluemoon@msj.biglobe.ne.jp),
Ёшихико Сарумару (Yoshihiko SARUMARU) ( mistral@imasy.or.jp),
Норихиро Кумагаи (Norihiro Kumagai) ( kuma@nk.rim.or.jp),
Накагава Ёшихиша (NAKAGAWA Yoshihisa) ( nakagawa@jp.FreeBSD.org)
и
Ник Хильярд (Nick Hilliard) ( nick@foobar.org).
Демон apmd появился в FreeBSD 3.3.
FreeBSD 4.6, 28 июня 1999 года