ルギア君の戯言

雑多な記事。

Amarok Alarm 2

以前作った Amarok をアラームとして使うシェルスクリプトを機能は削らないまま簡素化した。

#!/bin/bash

set -m

charcode=`echo $LANG | sed -e 's,^.*\.,,g'`

locknumber=`uuid | cut -f 1 -d -`
msglate=`echo '遅刻だよ〜♪' | iconv -f UTF-8 -t $charcode`
msgmorning=`echo 'おはよー♪' | iconv -f UTF-8 -t $charcode`
msgunlock=`echo '解除するには <code>'"$locknumber"'</code> をいれてね♪' | iconv -f UTF-8 -t $charcode`
msgnotrack=`echo 'Amarok のプレイリストに曲が入っていません!!' | iconv -f UTF-8 -t $charcode`
msgamaroknotrun=`echo 'Amarok が起動していません!! \n(Amarok と通信できませんで>した)' | iconv -f UTF-8 -t $charcode`

qdbus org.kde.amarok
if [ $? != 0 ]; then
  kdialog --error "$msgamaroknotrun" --title "Amarok Alarm"
  exit 1
fi
if [ `qdbus org.kde.amarok /TrackList GetLength` == 0 ]; then
  kdialog --error "$msgnotrack" --title "Amarok Alarm"
  exit 1
fi

oriVol=`qdbus org.kde.amarok /Player VolumeGet`
tarVol=25
qdbus org.kde.amarok /amarok/MainWindow setDisabled 1
qdbus org.kde.amarok /Player VolumeSet 0
qdbus org.kde.amarok /Player Play
for f in `seq 0 100`; do
  qdbus org.kde.amarok /Player VolumeSet $(($tarVol*$f/100))
  sleep 0.05
done

sh -c "sleep 3600; ps --ppid $$ --pid $$ | cut -f 1 -d ' ' | grep -v \$\$ | xargs kill; qdbus org.kde.amarok /Player PlayPause; qdbus org.kde.amarok /Player VolumeSet $oriVol; qdbus org.kde.amarok /amarok/MainWindow setDisabled 0; kdialog --msgbox '$msglate' --title 'Amarok Alarm'" &
pid=$!

kdialog --msgbox "$msgmorning" --title 'Amarok Alarm'
ret=''
while [ x$ret != x$locknumber ]; do
  ret=`kdialog --inputbox "$msgunlock" "" --title 'Amarok Alarm'`
done

qdbus org.kde.amarok /Player PlayPause
qdbus org.kde.amarok /Player VolumeSet $oriVol
qdbus org.kde.amarok /amarok/MainWindow setDisabled 0
ps --ppid $pid --pid $pid | cut -f 1 -d ' ' | xargs kill

必要なもの

パッケージの名前は Momonga Linux のもので環境によっては違う場合もある。

coreutils
bash
amarok   (2 以降 / 2.4 以降推奨)
qt       (4 以降 / 4.6 以降推奨)
kdebase  (4 以降 / 4.6 以降推奨)
procps
glibc-common
uuid
cron

でたぶん足りると思います。

$ ps

の出力が procps と異なる環境 (SolarisBSDMac OS X など) では動きません。

設定

鳴らしたい時間にこのスクリプトを起動するように cron に設定してあげれば OK。解除するには uuid から得た 6 桁の英数字を入力する。

必要な環境変数

PATH
LANG
DISPLAY
XIMMODULES

注意する点は

  • 寝る前にスタンバイはもちろん、ログアウトしてはいけない。
  • Amarok は予め起動しておくこと。
    • Amarok の起動時にパスワードの入力などでユーザーからの入力待ちになることがあるためこのスクリプトから起動するようなことはしていない
  • Amarok のプレイリストには予め何かしら入れておき、再生ボタンを押せば音がなる状態にしておくこと。
音量調整

目覚ましとして起動した時の最終音量は

tarVol=25

変数に設定する。(デフォルト: 25)

同じく初期音量は

qdbus org.kde.amarok /Player VolumeSet 0

の最後の 0 を変更する。(デフォルト: 0)