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

This commit is contained in:
2025-11-22 18:14:41 +07:00
parent 8a2b8c3532
commit 7f79015199
4 changed files with 126 additions and 0 deletions

View File

@@ -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
<div class="gallery">
<a href="stop-screensaver-off.png" data-caption="Значок на панеле Polybar">
<img src="stop-screensaver-off.png" alt="stop_screensaver выключен">
</a>
<a href="stop-screensaver-off.png">
<img src="stop-screensaver-off.png" alt="stop_screensaver включен">
</a>
...
</div>