前提
一人でパソコンで作業していると時間を知らせるものがないので食事を取るのを忘れたり、寝る時間を忘れてしまう。なので定期的に音を流し、一定時間が過ぎたことを知らせてもらう。
使うもの
よさげな音をダウンロードする。mp3が望ましい
時報の音

学校のチャイム (四番を選びました。)
ジュピターB

まずコマンドラインで流して見ましょう
cvlc --play-and-exit ./jupiter.mp3
ジュピターBはオシャレですが、学校のチャイムはカッコよさがないですね
自分は作業をしているとき音楽を聞いたりしているので音を大きくすることにします
数字は%で指定です。
調子に乗って1000%とか入れるのは辞めましょう。(超音割れジュピターヤバい)
音源によりますが、150~300くらいが適正だと思います。
cvlc --play-and-exit ./jupiter.mp3 -g 200
cvlcの場合はx倍で指定します。少数も可
cvlc --play-and-exit jupitor.mp3 --gain=2.5
cronで自動化
自動で音を流すためにcronを使います。
crontab -e
こんなのがでるので、
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
* * * * * export XDG_RUNTIME_DIR="/run/user/1000"; mpg321 /home/nanasi/Music/jupiter.mp3 -g 200
こんな感じで追加しましょう。こうすると一分毎に音が流れると思います。
0 1-11,13-23 * * * export XDG_RUNTIME_DIR="/run/user/1000"; mpg321 /home/nanasi/Music/Japanese_School_Bell04-mp3/Japanese_School_Bell04-1\(Long\).mp3 -g 300
30 * * * * export XDG_RUNTIME_DIR="/run/user/1000"; mpg321 /home/nanasi/Music/jupitor.mp3 
0 0,12 * * * export XDG_RUNTIME_DIR="/run/user/1000";cvlc --play-and-exit /home/nanasi/Music/jihou-sine-3f.mp3 --gain=2.3
この設定だと0時と12時ぴったりに時報が流れ、それ以外の時間はチャイムが流れます。
そして毎時30分にジュピターが流れます。
イヤホンが刺さっていないとき、流さないよう修正
これを使ってすぐ気づいたのですが、イヤホンが刺さっていないときも爆音でチャイムがなってしまいます。
止め方も特にないので、例えば図書館で使っていて爆音が流れてしまったら司書さんにボコボコにされてしまいます。なのでイヤホンが刺さっていないときは流さないようにします。
このコマンドをイヤホンを外した時
amixer contents
オンオフが切り替わるものがあるので(diffなどで比較しても良)それを17番と置き換えてください
amixer -c0 cget numid=17
このコマンドでオンかオフか分かるので
#!/bin/bash
current_hour=$(date +"%H")
current_minute=$(date +"%M")
jack_status=$(amixer -c0 cget numid=17 | grep -o 'values=on\|values=off')
if [[ $jack_status == 'values=on' ]]; then
    if [[ $current_hour == 00 ]] || [[ $current_hour == 12 ]] && [[ $current_minute -eq 00 ]]; then
        cvlc --play-and-exit /home/nanasi/Music/jihou-sine-3f.mp3 --gain=2.5
    elif [[ $current_minute -eq 30 ]]; then
        cvlc --play-and-exit /home/nanasi/Music/jupitor.mp3 --gain=2.5
    else
        cvlc --play-and-exit /home/nanasi/Music/Japanese_School_Bell04-mp3/Japanese_School_Bell04-1\(Long\).mp3 --gain=2.5
    fi
else
    echo "ヘットフォンが刺さっていないので時報を再生しませんでした"
fi
こんな感じのシェルスクリプトを作ってcronをこんな感じにすれば完成
0,30 * * * * export XDG_RUNTIME_DIR="/run/user/1000"; bash /home/nanasi/zihou.sh
更にBluetoothイヤホンが接続されている時は再生
このコマンドで確認できます。
pactl list short sinks
47      alsa_output.pci-0000_01_00.1.pro-output-3       PipeWire        s32le 8ch 48000Hz       SUSPENDED
48      alsa_output.pci-0000_01_00.1.pro-output-7       PipeWire        s32le 8ch 48000Hz       SUSPENDED
49      alsa_output.pci-0000_01_00.1.pro-output-8       PipeWire        s32le 8ch 48000Hz       SUSPENDED
50      alsa_output.pci-0000_01_00.1.pro-output-9       PipeWire        s32le 8ch 48000Hz       SUSPENDED
55      alsa_output.pci-0000_00_1f.3.analog-stereo      PipeWire        s32le 2ch 48000Hz       SUSPENDED
4166    bluez_output.03_64_B9_08_FD_31.1        PipeWire        s16le 2ch 48000Hz       RUNNING
Bluetoothを使っているときはRUNNINGになっています。なのでコードをシェルをこう変更します。
#!/bin/bash
current_hour=$(date +"%H")
current_minute=$(date +"%M")
#current_hour=00
#$current_minute=00
jack_status=$(amixer -c0 cget numid=17 | grep -o 'values=on\|values=off')
if pactl list short sinks | grep 'bluez' | grep -q 'RUNNING' || [[ $jack_status == 'values=on' ]]; then
    if [[ $current_hour == 00 ]] || [[ $current_hour == 12 ]] && [[ $current_minute -eq 00 ]]; then
        cvlc --play-and-exit /home/nanasi/Music/jihou-sine-3f.mp3 --gain=2.5
    elif [[ $current_minute -eq 30 ]]; then
        cvlc --play-and-exit /home/nanasi/Music/jupitor.mp3 --gain=2
    else
        cvlc --play-and-exit /home/nanasi/Music/Japanese_School_Bell04-mp3/Japanese_School_Bell04-1\(Long\).mp3 --gain=2.5
    fi
else
    echo "ヘットフォンが刺さっていないので時報を再生しませんでした"
fi
今後
Bluetoothが刺さっているかも確認したい。11/14追記- もっと音で時刻が分かるようにしたい。
 - チャイムはいまいち、もっとかっこいい音がほしい
 
参考
How to Detect Headphone Connection/Disconnection in Linux
https://askubuntu.com/questions/548915/how-to-run-cvlc-closing-after-the-play.
  
  
  
  
