一定の時間ごとに注意を向ける必要のある作業が出てきた。
スマホのアラームは鳴り続けるので止めるのが面倒。リマインダーほど「やらなければ」というものでもないので、完了済みにしたり通知を消していくのは煩わしい。理想は質実剛健なデジタル腕時計が正時にピッピッと鳴るアレ。
音を鳴らすスクリプトを作って、cronに登録。
#!/bin/bash
export PULSE_RUNTIME_PATH=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/pulse
SOUND_DEVICE=alsa_output.pci-0000_00_1b.0.analog-stereo
SOUND_FILE=/usr/share/sounds/freedesktop/stereo/alarm-clock-elapsed.oga
timeout 2 paplay --device="$SOUND_DEVICE" "$SOUND_FILE"```
PULSE_RUNTIME_PATH
cronからpulseaudioを使おうとすると DISPLAY=:0
を指定しても下記のエラーが出て音が鳴らない。
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
稼働中のpulseaudioが使っているディレクトリをPULSE_RUNTIME_PATHで指定してやる。OSやデスクトップ環境その他の要因で異なるかもしれないが、Lubuntu(Ubuntu+LXQt)だと /run/user/1000/pulse/
だった。
これをもう少し環境依存しない感じの変数に直してセット。
追記: DEなしのraspberry pi(Raspbian)でも同じ位置だった。
device引数
普段はBluetoothイヤホンを使っているが、時報は本体スピーカーから流したい。pacmd list-sinks
で出力装置の一覧が取れるのでその中の name
を引数に指定すると任意の装置から音を出すことができる。
~$ pacmd list-sinks
5 sink(s) available.
index: 76
name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY
state: SUSPENDED
timeout 2
OS同梱の音素材でアラーム音があったものの、ピピ、ピピと6回。これが毎時鳴るのはやかましいし音編集も面倒なので2秒でぶったぎる。
もっと好みの音素材を探してくる余裕がある場合には、まったく必要のない指定。