hakeの日記

Windows環境でプログラミングの勉強をしています。

スリープタイマ機能 - SHOUTcastPlayer(その2)

スリープタイマ暫定版その2です。スクリーンセーバが動いている時に電源オフしない問題をスクリーンセーバを無効にすることで対応しました。
別館から0.1.1pre2をダウンロードしてください。


使用方法

  • 0.1.1pre1を使用されていた方は/home/zaurus/Applications/shoutcastplayer/以下の全ファイルを削除
  • 0.1.1pre2をインストールして、起動→終了
  • ZEditor等で/home/zaurus/Applications/shoutcastplayer.confを開き、以下の様に修正
sleep=yes      ←noならばスリープ機能は働きません
sleeptime=30    ←起動してから30分後に電源オフ(数字は2以上の適当な値を)
  • ネットに接続して普通に起動、再生させる。
  • 時間がくると、再生停止→SHOUcastPlayer終了→ネット切断→20秒待つ→電源オフします(ただし数十秒の誤差あり)


注意事項
スリープ機能を使用しているときは省電力設定画面を開かないで下さい。またQCop等スクリーンセーバを有効にする操作を行わないでください。
現状では一度設定したら削除できません、ターミナルで/var/spool/at/以下のスクリプトファイル(ファイル名は数字です)を直接削除してください。削除の際は間違えて他のファイルを削除しない様に注意、内容を確認して行うこと。設定した時間になればこのファイルは自動消滅します。
上記ファイルを直接削除した場合はスクリーンセーバが無効のままとなります。省電力設定画面を開く→OKで有効にしてください。

atd下でのQCopコマンドの実行

さらに昨日の続き
SHOUTcastPlayerのスリープ機能でatdに登録したスクリプトでQCopコマンドを使用するようにしたのですが、スクリーンセーバが働いていると動かないとのご指摘を受けました。実験してみるとたしかにスクリーンセーバが働いているとQCopが実行されない(あるいはペンディングになっている?)です。設定画面でセットできるスクリーンセーバの最大値は30分なので、これを超える時間のスリープ機能は使用できないことになります。
そこでatdにスクリプトを登録する際にスクリーンセーバを切る以下のQCopコマンドを発行してみたところ、何故か機能しません。

停止
qcop QPE/System 'setScreenSaverMode(int)' 0
再開
qcop QPE/System 'setScreenSaverMode(int)' 3

そこでもう一つのコマンド

停止
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' 0 0 0
再開
qcop QPE/System 'setScreenSaverIntervals(int,int,int)' -1 -1 -1

を試したところ、こちらは機能しました。
でもスリープさせるときにスクリーンセーバを切るのを良いとして、スリープで電源オフした後使用するときにもスクリーンセーバがオフのままなんですよね。
この問題をどう処理したら良い物なのか、よく判りません。。。
一応省電力設定画面を開いてOKで閉じれば機能は再開するみたいなのですけどね、なんとか自動で行う良い方法はないものか。


……


よくよく考えたら、atdに登録して実際にネット切断や電源オフするスクリプトにスクリーンセーバの復帰コマンドを書いておけば良いんだ。
うん、これならなんとかなりそう。