diff --git a/content/blog/polybar-stop-screensaver/index.md b/content/blog/polybar-stop-screensaver/index.md new file mode 100644 index 0000000..8257e10 --- /dev/null +++ b/content/blog/polybar-stop-screensaver/index.md @@ -0,0 +1,126 @@ ++++ +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 + + + + + + + + + + + diff --git a/content/blog/polybar-stop-screensaver/social_cards/polybar-stop-screensaver.png b/content/blog/polybar-stop-screensaver/social_cards/polybar-stop-screensaver.png new file mode 100644 index 0000000..90578cb Binary files /dev/null and b/content/blog/polybar-stop-screensaver/social_cards/polybar-stop-screensaver.png differ diff --git a/content/blog/polybar-stop-screensaver/stop-screensaver-off.png b/content/blog/polybar-stop-screensaver/stop-screensaver-off.png new file mode 100644 index 0000000..a62baa0 Binary files /dev/null and b/content/blog/polybar-stop-screensaver/stop-screensaver-off.png differ diff --git a/content/blog/polybar-stop-screensaver/stop-screensaver-on.png b/content/blog/polybar-stop-screensaver/stop-screensaver-on.png new file mode 100644 index 0000000..18fd1f8 Binary files /dev/null and b/content/blog/polybar-stop-screensaver/stop-screensaver-on.png differ