Использую связку i3wm+i3blocks.
В i3blocks стоит индикатор состояния плеера deadbeef (отдельным скриптом).
На индикаторе, помимо отображения, прикручена обработка событий для мыши — «колесо» крутит громкость, «клик» ставит на паузу/воспроизведение.
Всё работает, но есть момент.
Пауза/воспроизведение реализуется командой deadbeef --play-pause
. Если эту команду выполнить в консоли при закрытом плеере, то плеер будет запущен.
Но вот из скрипта плеер запускается, но перестаёт обрабатываться индикатором. Т. е. плеер как будто запускается в каком-то подпроцессе. Кстати, если перезапустить оболочку i3wm, плеер будет выключен, в то время как если запустить его отдельной командой, он продолжает работать.
Соответственно вопрос, если я правильно понял проблему, как сделать, чтобы плеер запускался самостоятельным процессом?
Код индикатора:
#!/bin/bash
# иконки состояний
ICON_PLAY="[⏴]"
ICON_PAUSE="[⏸]"
ICON_STOP="проигрыватель остановлен [⏹]"
ICON_OFF="проигрыватель выключен [⏻]"
SONG=$(deadbeef --nowplaying-tf '%tracknumber%. %title% \ %playback_time% / %length%')
# проверить включена ли программа
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 "$SONG $ICON_PLAY"
elif [[ "$CALC" -eq "14" ]];
then echo "$SONG $ICON_PAUSE"
elif [[ "$CALC" -eq "15" ]];
then echo "$ICON_STOP"
elif [[ "$STATE" -eq "20" ]];
then echo "$ICON_OFF"
fi
case $BLOCK_BUTTON in
# левым кликом поставить на паузу
1) exec nohup deadbeef --play-pause && > /dev/null; exec pkill -SIGRTMIN+12 i3blocks ;;
# средним кликом отключить звук
2) ponymix toggle >/dev/null ;;
# правым кликом передать фокус
3) i3-msg workspace 4 ;;
# Прокрутка вниз
4) ponymix increase 5 >/dev/null; exec pkill -SIGRTMIN+10 i3blocks ;;
# Прокрутка вниз
5) ponymix decrease 5 >/dev/null; exec pkill -SIGRTMIN+10 i3blocks ;;
esac