Files
blog.zlinux.ru/content/blog/polybar-stop-screensaver/index.md
2025-11-22 18:35:26 +07:00

3.5 KiB
Raw Blame History

+++ title = "Переписал скрипт stop-screensaver и добавил на панель Polybar" date = 2025-11-22 description = "В прошлом посте выкладывал скрипт, который отключал скринсейвер при просмотре видео в браузере. Позже понял, что держать его запущенным постоянно - не лучшая идея."

[taxonomies] tags = ["screensaver", "polybar", "playerctl"]

[extra] quick_navigation_buttons = true toc = false mermaid = false social_media_card = "social_cards/polybar-stop-screensaver.png" +++

Новый скрипт

Переписал скрипт /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

stop_screensaver выключен stop_screensaver включен ...