i3blocks выводит состояние аудиоплеера, этот индикатор является также кнопкой, которая может ставить плеер на паузу или продолжать воспроизведение.
Делается это с помощью внутренней команды плеера deadbeef --play-pause
.
Если плеер выключен, то эта же команда его запустит.
Всё работает. Но если научить индикатор отображать также состояние, когда плеер не запущен (с помощью команды pidof deadbeef > /dev/null
), то кнопка начинает работать неправильно — проигрыватель запускается, но состояние уже не обновляется. По сути он зависает, и не работает более пока не перезапустишь. А если перезапустить i3blocks (сделав рестарт оболочки i3-msg restart), то плеер выключается.
Т. е. ошибка где-то на этапе проверки состояния плеера. Но с чем это связано? i3blocks, плеер или скрипт некорректно составлен? Как решить?
Скрипт индикатора:
#!/bin/bash
## проверить включена ли программа
if pidof deadbeef > /dev/null ;
then STATE="10"
else STATE="20"
fi
## определить статус воспроизведения
if [ $(deadbeef --nowplaying-tf '%isplaying%') == "1" ];
then STATUS="3"
elif [ $(deadbeef --nowplaying-tf '%ispaused%') == "1" ];
then STATUS="4"
else STATUS="5"
fi
## вычислить статус
let "CALC = $STATE + $STATUS"
## отобразить состояние плеера
if [[ "$CALC" -eq "13" ]];
then echo "PLAY"
elif [[ "$CALC" -eq "14" ]];
then echo "PAUSE"
elif [[ "$CALC" -eq "15" ]];
then echo "STOP"
elif [[ "$STATE" -eq "20" ]];
then echo "OFF"
fi
case $BLOCK_BUTTON in
## левым кликом поставить на паузу или запустить плеер
1) deadbeef --play-pause ;;
esac