ルギア君の戯言

雑多な記事。

Amarok で目覚し2

目覚しに Amarok で音楽を流すことができます。

必要な物

  • Amarok 2
  • Qt 4 (Amarok の実行にも必要)
  • zenity (ダイアログ)
  • uuid (ランダム文字列の作成に利用)
  • bash
  • procps
  • sed
  • kill
  • cron (タスクスケジューラ)

メインスクリプト

Amarok の操作を担います。

ファイル名: amarokalarm

#!/bin/bash

qdbus org.kde.amarok /amarok/MainWindow setDisabled 1
amarokalarmui &
pid=$!
qdbus org.kde.amarok /Player VolumeSet 0
qdbus org.kde.amarok /Player Play
for volume in 10 20 30 40 50 60 70 80 90 100; do
    sleep 0.5
    qdbus org.kde.amarok /Player VolumeSet $volume
done

cnt=$((0))

# およそ1時間 (正確では無い)
while [ $cnt -lt 3600 ]; do
    sleep 1
    cnt=$(($cnt+1))
    line=`ps $pid | wc -l`
    if [ $line == 1 ]; then
	break
    fi
done

# 停止
if [ $cnt == 3600 ]; then
    cpid=`ps --ppid $pid | sed -e "1s/.*//g" -e "2,\\$s/\([ 0-9]\{5\}\).*/\1/g"`
    kill $cpid
    kill $pid
    zenity --error --text="遅刻だよ〜♪ 急げ〜★" --title="Amarok Alarm からオハヨー" &
fi
qdbus org.kde.amarok /Player Stop
qdbus org.kde.amarok /amarok/MainWindow setEnabled 1

実行中 Amarok は操作無効になりますが、KDE 環境下ではこれとおなじ方法で操作しているウィジェットがあり、それが置いてあるとあまり意味がない(そのウィジェットを通じて操作できるため)。


3600 (2箇所)を別の数値に変えるとタイムアウトが変わります。(秒単位、小数無効。3600 = 1時間)

サブスクリプト

GUI表示を担当します。


ファイル名: amarokalarmui

#!/bin/bash

rand=`uuid | sed "s,-.*,,g"`
zenity --warning --text="おはようございます❣❣\\n朝ですよ〜♪" --title="Amarok Alarm からオハヨー"
entry=""
while [ x$entry != x$rand ]; do
    entry=`zenity --entry --text="解除するには $rand を入力してくださいね〜★" --title="Amarok Alarm からオハヨー"`
done

UUID 全部入力すると長いので最初のパーツだけ(8文字)を切り取って利用します。それを呈示し、おなじ物を入力してもらうことで、アラームを解除できます。


❣ (文字:❣ UTF-8 Only) は ! のようなマークです。左に示した文字を置き換えてご使用ください(このページが EUC-JP のため)。

cron への設定

メインスクリプトのほうを今の DISPLAY、LANG、GTK_IM_MODULE、PATH の値とともに設定します。2つのファイルはパスの通ったところに置いてください。

Screen shot

いるのか? (笑)
[f:id:lugia:20100115135447p:image f:id:lugia:20100115135451p:image f:id:lugia:20100115135457p:image]

補足事項

わざわざこんなことしなくてもさすがは Linux の世界w


http://www.kde-apps.org/content/show.php/Alarm?content=102901
にありますw