#1 Le 18/07/2013, à 04:06
- nesthib
[script] stopper mpd après x minutes ou x morceaux (sleep)
Voici un petit script pour éteindre mpd après un délai en temps (minutes) ou nombre de chansons.
Idéalement ce script doit être couplé à une télécommande via lirc et grâce à la commande irexec.
Prérequis : avoir une télécommande fonctionnelle, mpd installé et fonctionnel, avoir installé mpc (client mpd léger).
Rapide rappel sur le couplage de la télécommande au script :
– Placer dans le fichier ~/.lircrc :
begin
prog = irexec
button = KEY_SLEEP_TIME
config = mpd_sleep 30m &
repeat = 0
end
begin
prog = irexec
button = KEY_SLEEP_SONG
config = mpd_sleep 1 &
repeat = 0
end
Où KEY_SLEEP_TIME est le code de la touche qui servira à déclencher le délai temporel (ici extinction après 30 minutes) et KEY_SLEEP_SONG le code de la touche qui déclenchera le délai en nombre de morceaux.
– Lancer la commande :
irexec
Le script :
(à enregistrer sous le nom « mpd_sleep » dans un chemin du PATH et à rendre exécutable)
#!/bin/bash
#[[ $1 == +* ]] && MODE=relative
# if argument is xm then sleep after x minutes
[[ $1 == *m ]] && MODE=time
if [[ $MODE == time ]]
then
echo at now + ${1%m} min "mpc pause"
at now + ${1%m} min <<<"mpc pause"
exit
fi
# number of song mode
# if script is killed, remove the tracking file
trap "rm ~/.mpd_sleep_remaining; exit" SIGHUP SIGINT SIGTERM
# if tracking file exists, get number of songs
if [[ -f ~/.mpd_sleep_remaining ]]
then
remaining_songs=$(($(cat ~/.mpd_sleep_remaining)+${1-1}))
else
remaining_songs=${1-1}
fi
echo $remaining_songs >~/.mpd_sleep_remaining
# if process is already running, quit
if (( $(pgrep -c ${0##*/}) > 1 ))
then
echo 'already running'
exit
fi
current_song=""
mpd_infos () {
# read mpd_status mpd_song mpd_maxsong < <(mpc | sed -n '2s|\[\([^]]\+\)\].*#\([0-9]\+\)/\([0-9]\+\).*|\1 \2 \3|p')
read mpd_status mpd_song < <(mpc | sed -n '2s|\[\([^]]\+\)\].*#\([0-9]\+\).*|\1 \2|p')
}
# loop (mpd idle), refreshed each song change or play/pause
while true
do
mpd_infos
# if mpd is not playing or paused (i.e. stopped), quit
if [[ $mpd_status != playing && $mpd_status != paused ]]
then
rm ~/.mpd_sleep_remaining
exit
fi
# update counter if song changed
if [[ $mpd_song != $current_song ]]
then
current_song=$mpd_song
remaining_songs=$(($(cat ~/.mpd_sleep_remaining)-1))
echo $remaining_songs >~/.mpd_sleep_remaining
else
remaining_songs=$(cat ~/.mpd_sleep_remaining)
fi
# if no more songs are left, stop mpd
if (( remaining_songs < 0 ))
then
mpc stop
rm ~/.mpd_sleep_remaining
exit
fi
echo "remaining songs: $remaining_songs"
# wait until mpd changes state
mpc idle player >/dev/null
done
La commande :
mpd_sleep x
ajoutera x morceaux avant extinction. Sans argument le script ajoutera un seul morceau.
À chaque lancement du script, si un délai en nombre de chansons est déjà en cours, la valeur sera incrémentée. Ceci signifie que dans le cas où une télécommande est programmée pour lancer « mpd_sleep 1 », une chanson sera ajoutée au décompte à chaque pression de la touche liée au script.
La mise en pause de mpd ne changera pas le délai (celui-ci reprendra son cours à la reprise de la lecture). Un arrêt de mpd (stop) annulera en revanche le décompte.
La commande :
mpd_sleep xm
Où x est un entier, ajoutera un délai de x minutes avant extinction.
Bien entendu le script peut être contrôlé lancé autrement que via une télécommande (touches multimédia, ssh…)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne