По мотивам windows заставки «Ленты». Кроссплатформенный скринсейвер на JS и Electron

4a1d8dabe4e3c574ee52cffbdf0cbd4b.png

Предисловие

Со времен появления скринсейвера «Ленты» (ориг. «Ribbons») на Windows 7, эта заставка была стандартом для всех моих рабочих мест, благо в новых версиях Windows (8, 10, 11) эта заставка остается и по сей день. Однако с момента «импортозамещения» десктопной Windows на десктопную Linux, особенно актуального с 2022 года, хотелось получить эту или хотя бы похожую заставку и на этой свобоной платформе. Но вот незадача — нормальный порт найти мне не удалось. Может, конечно, плохо искал (скиньте ссылку в комментариях, если кто-то нашел что-то работоспособное).
И тут на просторах github очень удачно нашелся вот этот репозиторий https://github.com/fadyehabamer/Ribbons-Screensaver. Автор в canvas с использованием JS наваял на мой взгляд очень даже симпатичную анимацию по мотивам того самого скринсейвера «Ленты».
Причем он в README отметил, что пытался сделать из этой анимации PWA (Progressive Web App), но почему-то у него ничего из этого не вышло, читай «failed». Вопрос, почему человек, наваявший такой годный «генератор лент», не смог в PWA, оставим за скобками.
А тут как раз я, начавший недавно по служебной необходимости, изучать всем известный фреймворк Electron для создания кроссплатформенных настольных web-приложений… Чем не альтернатива PWA?
Причина написания сего опуса как и прежде — поделиться чем-то, что делал для себя и ближайшего окружения, с теми, кому это может быть интересно.

«Challenge accepted» © Барни Стинсон

Понятно, что, возможно, это создание троллейбуса из буханки, но интерес возник и мотивация подоспела.
Прошу рассматривать его как мини пет проект человека, далекого от профессионального программирования, поэтому многого можно не ждать (красивого кода или гибкого функционала). Доступен по адресу https://drlight17.github.io/ribbons-electron-page. Приложение на Electron тянет за собой по сути весь браузер Chromium, поэтому итоговый вес дистрибутива и тем более установленного приложения совсем не «скринсейверный». Да и системные требования я думаю тоже приличные (серьезных замеров потребления ресурсов не было). Но что не сделаешь, лишь бы не изучать программирование под традиционный десктоп =) Да и бонусом тут полноценная кроссплатформенность — пет проект доступен как для Linux, так и для MacOS с Windows. Правда для решения проблем совместимости с MacOS пришлось, начиная с актуальной альфа версии 0.3, обновить используемую версию Electron с 22 до 29 и, как следствие, лишиться поддержки Windows 7.

Возможности

После запуска приложение живет в системном трее и все настройки доступны там. На момент написания статьи актуальная версия имеет следующие возможности:

  • поддержка нескольких дисплеев

  • мониторинг активности пользователя, чтобы запускать заставку по истечении заданного срока неактивности

  • отслеживание запущенного полноэкранного приложения в фокусе, чтобы заставка не запускалась, например, при просмотре фильма и/или во время работы поставленной на паузу игры

  • поддержка некоторой настройки визуализации (в числе прочего по запросу одного своего товарища сделал возможность работы заставки в режиме российского триколора — патриоты всех мастей должны оценить =))

  • автоматизация установки приложения в автозагрузку ОС (должно работать на всех трех платформах, однако в случае с Linux протестировано это только для KDE и Cinnamon — будет ли работать корректно в других оболочках — надо проверять)

  • меню настроек поддерживает русский язык (языковые json файлы можно добавлять — приложение их найдет и задействует на этапе сборки проекта)

В процессе написания собственно обвязки на Electron заодно чуть изменил по своему вкусу визуальную составляющую исходного проекта уважаемого fadyehabamer (https://github.com/fadyehabamer).
В движении это можно смотреть на лендинге проекта.

Чем это приложение не является

Осваивать написание кода под нативные скринсейверы Linux xscreensaver и MacOS Screensaver framework в планах нет и, наверное, не будет. С Windows немного интереснее: если у кого-то появится интерес, то можно сделать отдельную ветку проекта с версией приложения в формате *.scr для Windows с адаптированной под нативный Windows скринсейвер логикой. Тут правда, оговорка: быстро осилить формирование превью и меню настроек не получилось, поэтому собственно и был сделан упор на «ненативность» скринсейвера. Но, опять же, если будет у кого-то интерес — могу попробовать.

Резюмируя: в настоящий момент это не нативный скрисейвер для трех платформ, а по сути кроссплатформенная полноэкранная анимация на JS с таймером. Поэтому главное, если вы решили воспользоваться им и установить его на свой ПК — обязательно отключите нативную заставку в ОС, иначе получите 2 одновременно работающих полноэкранных приложения. Кто будет поверх кого — не могу сказать, не проверял. Но уверен, что нативная заставка победит =)

Спасибо за внимание!

© Habrahabr.ru