Files
2025-11-22 20:57:34 +07:00

129 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
+++
title = "Переписал скрипт stop-screensaver и добавил на панель Polybar"
date = 2025-11-22
description = "В прошлом [посте](https://blog.zlinux.ru/articles/disable-screensaver-fullscreen/) выкладывал скрипт, который отключал скринсейвер при просмотре видео в браузере. Позже понял, что держать его запущенным постоянно - не лучшая идея."
[taxonomies]
tags = ["xscreensaver", "polybar", "playerctl"]
[extra]
quick_navigation_buttons = true
toc = false
mermaid = false
social_media_card = "social_cards/polybar-stop-screensaver.png"
+++
В прошлом [посте](https://blog.zlinux.ru/articles/disable-screensaver-fullscreen/) выкладывал скрипт, который отключал скринсейвер при просмотре видео в браузере. Позже понял, что держать его запущенным постоянно - не лучшая идея.
## Новый скрипт
Переписал скрипт `/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-on.png">
<img src="stop-screensaver-on.png" alt="stop_screensaver включен">
</a>
...
</div>