127 lines
3.5 KiB
Markdown
127 lines
3.5 KiB
Markdown
+++
|
||
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-on.png">
|
||
<img src="stop-screensaver-on.png" alt="stop_screensaver включен">
|
||
</a>
|
||
...
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|