Add post Переписал скрипт stop-screensaver и добавил на панель Polybar
This commit is contained in:
126
content/blog/polybar-stop-screensaver/index.md
Normal file
126
content/blog/polybar-stop-screensaver/index.md
Normal 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>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
BIN
content/blog/polybar-stop-screensaver/stop-screensaver-off.png
Normal file
BIN
content/blog/polybar-stop-screensaver/stop-screensaver-off.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
content/blog/polybar-stop-screensaver/stop-screensaver-on.png
Normal file
BIN
content/blog/polybar-stop-screensaver/stop-screensaver-on.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Reference in New Issue
Block a user