Переписал скрипт stop-screensaver и добавил на панель Polybar

В прошлом посте выкладывал скрипт, который отключал скринсейвер при просмотре видео в браузере. Позже понял, что держать его запущенным постоянно - не лучшая идея.

Новый скрипт

Переписал скрипт /usr/local/bin/stop-screensaver.sh и максимально упростил:

#!/bin/bash
while true; do
  status=$(playerctl --player=vivaldi status 2>/dev/null)
  if [[ "$status" == "Playing" ]]; then
    xscreensaver-command -deactivate >/dev/null
  fi
  sleep 30
done

Для удобства написал полноценный модуль для Polybar, который позволяет включать и выключать эту функцию по клику. Для работы понадобится всего два небольших скрипта.

Статусный скрипт

Показывает иконку "ICON_ON" когда демон запущен, и "ICON_OFF" - когда нет) /home/$USER/.config/polybar/scripts/stop_screensaver_status.sh

#!/usr/bin/env bash
STATEFILE="/tmp/stop-screensaver.state"
ICON_ON=""
ICON_OFF=""

if [ -f "$STATEFILE" ]; then
  state=$(cat "$STATEFILE")
else
  state=""
fi

# fallback проверка процесса, если statefile отсутствует/неактуален
if pgrep -f "/usr/local/bin/stop-screensaver.sh" >/dev/null; then
  state="running"
fi

if [ "$state" = "running" ]; then
  echo " $ICON_ON "
else
  echo " $ICON_OFF "
fi

Кликабельный скрипт

Скрипт для запуска/остановки демона. /home/$USER/.config/polybar/scripts/stop_screensaver_toggle.sh

#!/usr/bin/env bash
SCRIPT="/usr/local/bin/stop-screensaver.sh"
STATEFILE="/tmp/stop-screensaver.state"

if pgrep -f "$SCRIPT" >/dev/null; then
  pkill -f "$SCRIPT"
else
  nohup "$SCRIPT" >/dev/null 2>&1 &
fi

# записать текущее состояние
if pgrep -f "$SCRIPT" >/dev/null; then
  echo "running" >"$STATEFILE"
else
  echo "stopped" >"$STATEFILE"
fi

Делаем файлы исполняемыми

chmod +x ~/.config/polybar/scripts/stop_screensaver_*.sh

Добавляем в polybar

В конфиге /home/$USER/.config/polybar/config.ini прописываем:

[module/stop_screensaver]
type = custom/script
exec = ~/.config/polybar/scripts/stop_screensaver_status.sh
interval = 2
click-left = ~/.config/polybar/scripts/stop_screensaver_toggle.sh
label-background = ${gruvbox.green-alt}
label-foreground = ${gruvbox.black}

и добавляем расположение модуля stop_screensaver в modules-left/modules-center/modules-right