Здравствуйте, мои дорогие любители громадных скриптов на баше!
Сегодня вашему вниманию предоставляется клиент-серверная моструозина (24KiB), которая предназначена для того, чтобы управлять обоями на рабочем столе.
Предыстория
Где-то за пару недель до нового года мне уже набила оскомину серая обоина, стоявшая у меня с незапамятных времён, её даже можно найти в галерее, и я затосковал по тем пяти гигабайтам отснятых скриншотов, что лежат у меня диске и постепенно истираются из памяти. И тут ко мне пришла она — белоидея! Написать скрипт, который бы ставил рандомные изображения из папки со скриншотами и менял их каждые, скажем, 10 минут. Первые наброски появились за пару дней, скрипт умел определять aspect ratio и подбирать соответствующий режим заполнения экрана.
Но мне этого показалось мало, и, посмотрев, что умеет hsetroot
, я понял, что всегда хотел иметь возможность выставить яркость обоине, ибо через затемнённые и относительно прозрачные окна терминалов некоторые не подходили просто из-за того, что были слишком светлыми. В общем, после Рождества скрипт уже позволял
- настраивать яркость текущей обоине и выставлять начальную яркость, с которой ставилась любая новая обоина;
- подбирать режим заполнения в рантайме;
- хранить историю предыдущих обоин, запоминать их яркость и режим заполнения;
- оставлять текущую обоину и не менять её до специально отправленной команды;
- восстанавливать прежнее состояние после перезагрузки;
- выбирать каталог с обоями в рантайме через гуи (zenity) или отправлять каталог через командую строку для автоматизации переключения (например, по крону).
Ну и ещё по мелочи, так что одну половину января я всё это писал, а другую — отлавливал баги и правил документацию.
Запускается он просто. Cначала демон:
~/path/to/wallpaper_setter.sh -d /home/picts/wallpapers &
Хотя, чтобы видеть ошибки, лучше указать также программу, которая будет выводить сообщения, например, i3-nagbar
~/path/to/wallpaper_setter.sh \
-e "i3-nagbar -m \"%m\" -b 'Restart' \"%a\"" \
-d /home/picts/wallpapers &
или zenity
~/path/to/wallpaper_setter.sh \
-e "zenity --error --text=\"%m\"" \
-d /home/picts/wallpapers &
i3-nagbar позволяет также указать действие для одной кнопки, чтобы рестартануть скрипт. Не все ошибки критические, но после некоторых скрипт обязан выйти.
Теперь, когда демон запущен, поставить новую обоину можно с помощью
~/path/to/wallpaper_setter.sh -n
А автосмену занести в крон, открыть сrontab -e
и написать туда
# Менять обоину раз в 10 минут
*/10 * * * * ~/path/to/wallpaper_setter.sh -qn
-q нужен, чтобы запретить выхлоп и сообщения (при корректно настроенном кроне любой выхлоп будет отправлен на имейл же). Это станет актуально, когда захочется подержать понравившуюся обоину на рабочем столе подольше и запретить её менять
~/path/to/wallpaper_setter.sh -k
А чтобы поставить новую и разрешить делать это крону, досатотчно добавить ключ -f
~/path/to/wallpaper_setter.sh -fn
Чтобы уменьшить яркость текущей обоины на 20%, можно отправить такую команду
~/path/to/wallpaper_setter.sh -b -0.2
Соответственно, чтобы увеличить — -b +0.2
. Тут надо заметить, что если передать тому же hsetroot
-brightness -0.2
, то он поставит эту яркость. Скрипт же её отнимет от текущей яркости, так что повесив -b -0.1
и -b +0.1
на горячие клавиши, яркость можно менять очень легко.
«Зачем менять её руками, если можно просто каждое новое изображение ставить на обои с заданной яркостью?» — спросите вы? Правильно, задать начальную яркость можно при запуске демона через ключ -B
~/path/to/wallpaper_setter.sh -B -0.3 \
-e "i3-nagbar -m \"%m\" -b 'Restart' \"%a\"" \
-d /home/picts/wallpapers &
Полная документация и сам скрипт на гитхабе.
──────────
Пользуясь случаем хочу попросить прощения за задержки с watch.sh, следующее свободное время для скриптования будет отведено переходу на getopt, взаимодействию с MyAnimeList и (возможно) переходу на подобную клиент-серверную хреновину, она мне понравилась. Тогда можно будет держать в демоне что-то наподобие сессии на каждое аниме, а не держать терминал открытым всё время (хотя с tmux сейчас я не вижу проблем).