APMD(8)

名称
apmd - Advanced Power Management 監視デーモン

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

解説
apmd ユーティリティは、指定した Advanced Power Management (APM) イベントを監視し、 いずれかのイベントが発生した場合、 対応するコマンドシーケンスを実行します。 設定ファイルで指定されたイベントのみが apmd へ通知され、それ以外のイベントは無視されます。 APM BIOS によって発行された イベントに対して、 apmd は設定ファイルで指定されたコマンドシーケンスを実行します。 apmd をサスペンド/スタンバイを監視するようにして起動すると、 カーネルはそれらの要求イベントに対する 処理を行いません。 そのためそれらのイベント発生時に 処理をさせたい場合は、適切なコマンドまたは組み込み関数を 明示的に設定ファイルに指定する必要があります。

apmd ユーティリティは以下の実行時オプションを理解します。

-d  デバッグモードで起動します。 デーモンモードではなくフォアグラウンドで動作します。

-f file
    デフォルトの設定ファイル /etc/apmd.conf の代りに使用する、別の設定ファイル file を指定します。

-s  電源状態の変更が検出されたが (AC_POWER_STATE) ラップトップの BIOS がそれを報告しないときに、 apmd に POWERSTATECHANGE イベントをシミュレートさせます。 これにより、電源コードを抜いたときに LCD バックライトを暗くする といったことが可能になります。

-v  冗長モードで動作します。

apmd は起動時に設定ファイル (デフォルトは /etc/apmd.conf) を読み込み、 監視すべきイベントを APM デバイスドライバへ通知します。 終了時には APM デバイスドライバはイベントの監視を自動的に解除します。

apmd プロセスがシグナル SIGHUP を受信すると、設定ファイルを読み込み直して、 設定の変更内容を APM デバイスドライバに通知します。

apmd ユーティリティは、デバイスファイル /dev/apmctl を経由して、イベントの受け取りや APM システム制御用の ioctl(2) 要求を発行します。 このデバイスファイルは排他制御されてオープンされるため、 apmd プロセスは同時に 1 つのみ起動可能です。

apmd が APM イベントを受け取ると、設定ファイルで指定された イベントに対応するコマンドリストを実行するために 子プロセスを生成し、再び APM イベントの待ち状態になります。 生成された子プロセスは、 指定されたコマンドを 1 つずつ列挙された順番に実行します。

apmd が SUSPEND/STANDBY 要求に対するコマンドリストを処理している間、 カーネル内の APM デバイスドライバは、APM BIOS に対して 毎秒 1 回以上通知を発行し続けます。 これによって BIOS は、コマンド処理中であり要求が まだ完結していないことを認識します。

apmd ユーティリティはファイル /var/run/apmd.pid を作成し、プロセス ID を記録します。これは apmd を kill や、設定ファイルを読み込ませるために使えます。

設定ファイル
apmd の設定ファイルの構造は非常にシンプルです。 例えば次のようになります。

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

この例では、APM イベント ‘SUSPENDREQ’ (ディスプレイを閉じた時などに発生します) を apmd が受け取ると、 ‘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 からの直前の要求を拒否します。 ディスプレイを閉じた時に発生する SUSPEND 要求を拒否して、 代りに STANDBY 状態にしたい場合などに使用します。

使用例
設定ファイルのサンプルには、以下のものが含まれています。

    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";
    }
    # resume event configuration for serial mouse users by
    # reinitializing a moused(8) connected to a serial port.
    #
    #apm_event NORMRESUME {
    #       exec "kill -HUP `cat /var/run/moused.pid`";
    #}
    # suspend request event configuration for ATA HDD users:
    # execute standby instead of 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 から登場しました。