+++ title = "Переписал скрипт stop-screensaver и добавил на панель Polybar" date = 2025-11-22 description = "В прошлом [посте](https://blog.zlinux.ru/articles/disable-screensaver-fullscreen/) выкладывал скрипт, который отключал скринсейвер при просмотре видео в браузере. Позже понял, что держать его запущенным постоянно - не лучшая идея." [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` и максимально упростил: ```bash #!/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` ```bash #!/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` ```bash #!/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 ``` Делаем файлы исполняемыми ```bash chmod +x ~/.config/polybar/scripts/stop_screensaver_*.sh ``` ## Добавляем в polybar В конфиге `/home/$USER/.config/polybar/config.ini` прописываем: ```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