3.5 KiB
+++ 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