Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/07/2013, à 05: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…) smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne