По мотивам windows заставки «Ленты». Кроссплатформенный скринсейвер на JS и Electron
Предисловие
Со времен появления скринсейвера «Ленты» (ориг. «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 одновременно работающих полноэкранных приложения. Кто будет поверх кого — не могу сказать, не проверял. Но уверен, что нативная заставка победит =)
Спасибо за внимание!