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