<Top of this site> <Top of programming pages in this site> <Top of linux related pages in this site>

apmd.cへのパッチ

私がLinuxをインストールして使用しているDEC Highnote Ultra(以下DHU)や同IIでは、 suspend後resumeするとsuspendしていた時間だけ時計が遅れます。

ネットニュースのfj.os.linuxやNIFTY-SERVEのfunix/mes19を読んでいると、 カーネルのAdvanced Power Management用のコードの問題により、 standby時にはそのような現象が起きるとのことで、 対策用のパッチも投稿されています。

このパッチがDHUの場合にも適用できるのかも知れませんが、 カーネルを再構築するのも時間がかかるし、 もし再構築しても解決しない場合にはチョットアレだなぁ、 ということで、 apmd(-2.4)を改造して対症療法することにしました。

apmd-2.4.tar.gz中のapmd.cに 改造用パッチ を当ててから、 g?ccに'-DEVENT_ACTION'というオプションが渡るようにしてメイクすると、 任意のAPM event発生時に指定したコマンドを起動できるようになります。 上記の時計の遅れの問題を解消するには、 resume event発生時に'/sbin/clock -s'が実行されるようにすれば良い訳です。

起動すべきコマンドは、 apmd起動時時に、 イベントを表わすキーワードを1個以上「|」で区切って並べたものを、 空白を区切として対にして

-e 'キーワード[|キーワード…] コマンド'
と指定するか、 同様の形式のキーワード列とコマンドの対を改行文字(LF)で区切って並べたテキストファイルを
-f ファイル名
と指定するかします。

-eオプションへの引数は、 キーワード列とコマンドの区切として空白が必要なので、 必ずクォートする必要があります。

-fオプションでファイルを指定する場合、 ファイル中の各行の文字「#」から改行までは、 1個の空白(SP)に置換されます。 ただし「#」の直後に改行がある場合は、 その2文字に加えて、 続く空白文字(ANSI Cの標準ライブラリのisspaceが真を返す文字)全体と共に、 1個の空白に置換されます。

指定可能なキーワードは以下のとおりです。


  • low_battery
  • sys_standby
  • update_time
  • sys_suspend
  • user_standby
  • user_suspend
  • normal_resume
  • standby_resume
  • critical_resume
  • critical_suspend
  • power_status_change

  • 例えば

    normal_resume
    または
    standby_resume
    というイベント発生時に、
    /sbin/clock -s
    というコマンドを実行したい場合、 apmdを
    apmd -e 'normal_resume|standby_resume /sbin/clock -s'
    と起動するか、 内容が
    normal_resume|standby_resume
    	/sbin/clock -s
    の(2行で2行目の行頭がタブの)ファイル (名前は何でもよいですが、 ここでは例えば/etc/apmd.event-actionとしましょう) を作成し
    apmd -f /etc/apmd.event-action
    と起動します。 /etc/apmd.event-actionの内容は
    normal_resume|standby_resume /sbin/clock -s
    の1行でも
    normal_resume|standby_resume
    /sbin/clock -s
    と2行目の行頭のタブが無くても
    normal_resume|standby_resume
    # This is a comment line.
    /sbin/clock -s
    とコメントが入っても構いません。


    Any questions or comments about this page are greatly appreciated.

    Almost all contents in this site are written by Kiyokazu SUTO (i.e. me) unless especially noted. I want to put all of them into the PUBLIC DOMAIN, even though some lawyers mention that it is impossible in my country.