私が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個の空白に置換されます。
    
指定可能なキーワードは以下のとおりです。
例えば
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.