EN JA
APMD(8) (i386)
APMD(8) FreeBSD System Manager's Manual (i386) APMD(8)

名称

apmdAdvanced Power Management (高度な電源管理) 監視デーモン

書式

apmd [ -d][ -f -file][ -s][ -v]

解説

apmd ユーティリティは、指定された Advanced Power Management (高度な電源管理) (APM) イベントの発生を監視し、イベントの 1 つが発生するなら、イベントに対応するコマンドのシーケンスを実行します。設定ファイルで指定されたイベントだけが、 apmd に通知されます。他のすべてのイベントは、無視されます。 APM BIOS によって通知された各イベントに対して、 apmd は、設定ファイルで指定されたコマンドのシーケンスを呼び出します。 apmd がサスペンド/スタンバイ要求を監視する状態で実行されるとき、カーネルは、それらの要求を処理しません。したがって、これらのイベントが生じたときに、アクションを取りたいなら、設定ファイルに適切なコマンドまたは組み込み関数を明示的に設定する必要があります。

apmd ユーティリティは、次の実行時オプションを認識します:

-d
デバッグモードで開始する。これによって apmd は、デーモンモードではなくフォアグラウンドで実行します。
-f file
デフォルトの /etc/apmd.conf の代わりに使用される別の設定ファイル file を指定します。
-s
apmd は、電源状態の変更が検出される (AC_POWER_STATE) が、ラップトップの BIOS がそれを報告しないとき、POWERSTATECHANGE イベントをシミュレートします。これは、電源コードのプラグを抜くとき、LCD バックライトを暗くするようなことをできるようにします。
-v
冗長なモード。

apmd が開始するとき、設定ファイル (デフォルトとして /etc/apmd.conf) を読み込み、監視されるイベントの組を APM デバイスドライバに通知します。終了するとき、APM デバイスドライバは、監視されるイベントを自動的にキャンセルします。

apmd のプロセスが SIGHUP を受信するなら、その設定ファイルを再読み込みし、その構成へのあらゆる変更を APM デバイスドライバに通知します。

apmd ユーティリティは、イベントの監視と APM システムの制御のための ioctl(2) 要求を発行するためにデバイス /dev/apmctl を使用します。このデバイスファイルは、排他的にオープンされるので、常に単一の apmd プロセスのみが実行することができます。

apmd が APM イベントを受信するとき、設定ファイルで指定されたコマンドを実行するために子プロセスをフォーク (fork) し、次に、より多くのイベントに対して listen する (接続を受け付ける) ことを継続します。子プロセスは、それらがリストされた順序で一度に 1 つずつ指定されたコマンドを実行します。

apmd が SUSPEND/STANDBY (サスペンド/スタンバイ) 要求のためのコマンドリストを処理している間に、APM カーネルのデバイスドライバは、まだ保留されたいくつかのコマンドがあること、および要求が今すぐには終了すべきでないことを BIOS が知ることができるように、 APM BIOS への通知を 1 秒毎一度発行します。

apmd ユーティリティは、ファイル /var/run/apmd.pid を作成し、そこにそのプロセス ID を格納します。 apmd を kill するか、または再設定するために、これを使用することができます。

設定ファイル

apmd 設定ファイルの構造は、とても単純です。例えば:

apm_event SUSPENDREQ { 
       exec "sync && sync && sync"; 
       exec "sleep 1"; 
       exec "zzz"; 
}

上記によって、 apmd は、(LCD をクローズすることによって通知される) APM イベント‘ SUSPENDREQ’を受信し、‘ sync’コマンドを 3 回実行し、すこしの間ウェートし、次に、システムをサスペンドされた状態に置くために 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’で始まる 3 つの行は、イベントに対するコマンドです。各行は、セミコロンで終了されるべきです。イベントに対するコマンドリストは、‘ {’と‘ }’によって囲まれるべきです。 apmd ユーティリティは、ちょうど system(3) でのように、ダブルクォーテーション (二重引用符) で囲まれたコマンドを実行するために /bin/sh を使用します。各コマンドは、リストの終りに到達するか、またはコマンドが 0 でないステータスコードで終了するまで、順番に実行されます。 apmd ユーティリティは、 syslog(3) によってあらゆる失敗したコマンドのステータスコードを報告し、次に APM BIOS によって通知された要求のイベントを拒否します。
  • 組み込み関数

    コマンド行の代わりに apmd の組み込み関数を指定することもできます。組み込み関数の名前は、ちょうどコマンド行でのように、セミコロンで終了するべきです。次の組み込み関数が現在サポートされています:
    • - reject
      APM BIOS によって通知された最後の要求を拒否します。 LCD がクローズされたとき、SUSPEND 要求を拒否し、システムを STANDBY (スタンバイ) 状態に置くために、これを使用することができます。

関連ファイル

/etc/apmd.conf
/dev/apmctl
/var/run/apmd.pid

使用例

サンプルの設定コマンドは、次の通りです:

apm_event SUSPENDREQ { 
        exec "/etc/rc.suspend apm suspend"; 
} 
 
apm_event USERSUSPENDREQ { 
        exec "sync && sync && sync"; 
        exec "sleep 1"; 
        exec "apm -z"; 
} 
 
apm_event NORMRESUME { 
        exec "/etc/rc.resume apm suspend"; 
} 
 
apm_event STANDBYRESUME { 
        exec "/etc/rc.resume apm standby"; 
} 
 
# シリアルポートに接続された、moused(8) を再初期化することによって, 
# シリアルマウスのユーザのためのイベント設定をレジュームします. 
# 
#apm_event NORMRESUME { 
#       exec "kill -HUP `cat /var/run/moused.pid`"; 
#} 
# 
# ATA HDD ユーザのためのサスペンド要求イベント設定: 
# サスペンドの代わりにスタンバイを実行します. 
# 
#apm_event SUSPENDREQ { 
#       reject; 
#       exec "sync && sync && sync"; 
#       exec "sleep 1"; 
#       exec "apm -Z"; 
#}

関連項目

apm(4), apm(8)

歴史

apmd ユーティリティは、 FreeBSD 3.3 で登場しました。

作者

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>. によって行われました。

June 28, 1999 FreeBSD