RedLamp
Redlamp - это программа, предоставляющая возможность регулировать цветовую температуру экрана в соответствии с окружающей обстановкой. Это позволяет защитить глаза пользователя от негативного влияния свечения монитора, особенно в ночное время.
Возможности и особенности
Программа является аналогом (и некоторые плагины являются прямым форком) таких проектов, как RedShift / Gammastep, отличаясь от них наличием таких возможностей как:
- Модульность Программа, как сущность, реализует только минимальное рабочее ядро процесса. Все остальные функции являются плагинами и могут (не-)использоваться по желанию пользователя.
- Интегрируемость Программа предоставляет плагины для работы с популярными композиторами Linux (как следствие, поддерживает Wayland)
- Управляемость В состав программы включены плагины, дающие возможность осуществлять внешнее управление запущенным приложением.
- Интеграция с системой Возможность работать как в режиме приложения, так и в режиме unix-демона (старый и новый стиль, опционально, можно отключать при сборке). Обеспечена опциональная интеграция с systemd.
- Минимизация зависимостей Приложение требует минимально необходимое для работы количество зависимостей.
- Кастомизация Существенно расширено количество опций настраиваемости сборки и параметров настройки приложения.
- Совместимость Обеспечена возможность импорта настроек RedShift при первом запуске. Также обеспечена максимально возможная совместимость в ключах запуска и режимах работы, drop-in совместимость с индикаторами родительских проектов.
Особенности эксплуатации
Программа запускается, как консольное unix-приложение и начинает работу. Никаких дальнейших действий не требуется. Выход из приложения осуществляется по сигналу SIGTERM (Ctrl+C в консоли)
Опции запуска приложения (опции совместимые с RedShift помечены соответствующей меткой)
- -b <основной[:ночной]> - параметры яркости экрана (если разрешено управления яркостью) (RedShift)
- -c <файл> - альтернативный конфигурационный файл приложения. При отсутствии, будет создан, если не указана опция read-only (RedShift)
- -d - demo-запуск приложения на определённое количество секунд (по умолчанию 5 сек.). (RedShift)
- -g <R[:G:B]> - установка параметров гаммы
- -h, -? - справка приложения
- -l <id-плагина[:help|name=value[:…]]> [list|<lat:lon>] - опции плагина геолокации
- id - использовать указанный плагин (RedShift)
- list - список доступных плагинов (RedShift)
- id:help - информация о плагине (RedShift)
- name=value - пара ключ=зачение параметров плагина, можно передавать несколько, разделённых символом ‘:’
- lat:lon - ручной режим указания координат (RedShift)
- -m <id-плагина[:help|name=value[:…]]> [list] - опции плагина окраски
- id - использовать указанный плагин (RedShift)
- list - список доступных плагинов (RedShift)
- id:help - информация о плагине (RedShift)
- name=value - пара ключ=зачение параметров плагина, можно передавать несколько, разделённых символом ‘:’
- -O <температура> - oneshot-режим с указанной температурой красного. (RedShift)
- -p - режим отображения текущего плана работы (RedShift)
- -q - тихий режим. Любые сообщения stdout/stderr подавляются (не отражается на работе плагинов логирования) (RedShift)
- -r - отключение плавного перехода (fade) между режимами (RedShift)
- -s - загрузка с использованием только статических плагинов. Если приложение собрано без статических плагинов, то опция игнорируется.
- -t <основной[:ночной]> - температура красного день/ночь (RedShift)
- -v - расширенный режим вывода сообщений (RedShift)
- -x - очистка гаммы экрана (RedShift)
- -y - отключение проверки плагинов на совместимость с текущей версией приложения (опасно)
- -C id:name=value[: …] - установка настроек
- id - использовать указанный плагин
- name=value - пара ключ=зачение параметров плагина, можно передавать несколько, разделённых символом ‘:’
- -D - запуск в режиме демона
- -H - расширенная справка приложения. Информация об особенностях сборки, рабочих путях и плагинах.
- -P - очистка гаммы экрана перед применением нового значения (RedShift)
- -R - защита от изменений конфигурации (read-only mode)
- -V - информация о версии
Опции запуска имеют приоритет над опциями файла настройки приложения и могут перезаписывать их, если не включена защита конфига от записи.
Приложение реализует протокол общения индикаторов родительских проектов, чем обеспечивает возможность drop-in замены. Для этого достаточно подменить бинарный файл на одноименную символическую ссылку на бинарный файл Redlamp и указать в настройках режим совместимости.
Плагины в комплекте
- comm_dbus - плагин управления задействующий пользовательскую шину D-Bus
- comm_socket - плагин управления задействующий сокеты (UDS или Inet, определяется пользователем)
- geoclue2 - плагин геолокации с использованием подсистемы GeoClue2
- manual - плагин геолокации по указанным в конфиге координатам
- locate_portal - [XDG] плагин геолокации с использованием XDG Desktop Portal (Location).
- hooks - плагин запуска скриптов по определённым событиям
- notify - [XDG] плагин пользовательских уведомлений
- flogger - плагин для ведения текстовых логов приложения (преимущественно для отладочных целей)
- drm - плагин коррекции гаммы DRM
- gnome_nl - плагин коррекции гаммы для DE GNOME 3.*,4.*
- kde_nc - плагин коррекции гаммы для DE KDE 5/6 (экспериментальный)
- randr - плагин коррекции гаммы XRandr
- vidmode - плагин коррекции гаммы xf86VidMode
- zwlr - плагин коррекции гаммы wlroots
Более подробное описание см. README.md конкретного плагина. Плагины, отмеченые меткой [XDG], позволяют задействовать в своей работе механизмы XDG Desktop Portal, при условии сборки с поддержкой данной технологии и включении соответствующей опции (ключём или в настройках).
Плагины, встроенные в приложение
Приложение использует ряд виртуальных плагинов для различных целей. Например, когда мы указываем координаты геолокации в командной строке, то они передаются виртуальному плагину, который их и предоставляет. Виртуальные плагины имеют такую же функциональность, как и обычные, но отличаются тем, что не участвуют в автоматических выборах и доступны пользователю только через ключи командной строки. Кроме того, виртуальные плагины встроены непосредственно в программу и не поставляются отдельной библиотекой.
- vred - виртуальный плагин раскрашивания
- vloc - виртуальный плагин геолокации
- core - виртуальный плагин, используемый для различных сервисных функций
Дополнительная информация по плагинам
Также в комплекте исходников (в каталоге plugins) присутствует плагин-пример example. Он не включён в список плагинов для установки и представляет из себя типовой шаблон, на основании которого можно реализовать собственный плагин.
Обратите внимание, что имеется возможность собрать плагины и как динамически загружаемые модули (библиотеки) и как статические модули, собраные с приложением.
Режим максимальной совместимости
В приложении реализован режим максимальной совместимости с родительскими проектами. Это означает, что приложение пытается поддерживать максимально похожее на родительский проект поведение, чтобы не нарушать пользовательский опыт и возможные интеграции с другими программами. При его использовании:
- Файл конфига приводится к совместимому формату. Удаляются выравнивающие пробелы и обрамления кавычками.
- Включается режим вывода в stdout, совместимый с протоколом обмена индикаторов родительских проектов
- Вывод информации о режиме работы (ключ -p) осуществлется в совместимом формате
- Плагины hooks и manual работают без расширеных функций
Режим включается опцией в настройках ( compat_mode = 1 )
Особенности сборки
Для сборки проекта используется система сборки meson и ninja, актуальная на данный момент
Для сборки необходим компилятор с поддержкой стандарта С11: GCC >= 4.6, CLANG >= 3.1
Необходимые зависимости
['iniparser' , '>=4.1'] (обязательно, включена поставку)
['libportal' , '>=0.7.1'] (опционально, включена поставку)
['libsystemd'] (опционально)
Зависимости для плагинов смотрите в README конкретного плагина.
Конфигурирование сборки
Настройка сборки осуществляется стандартным для системы meson способом: редактированием опций файла meson_options.txt или ключами командной строки (ознакомьтесь с документацией)
Описание настроек приложения (файла конфигурации)
Важно! При первом запуске приложение пытается найти и импортировать существующий конфиг RedShift. Если его не обнаруживается, то значения параметров устанавливаются по-умолчанию. При создании приложения подбираются умолчания, кажущиеся разумными, но это не означает, что они удовлетворят каждого. Файл конфига может периодически меняться в зависимости от того, какие плагины задействует пользователь. Если необходимо избежать перезаписи конфига, используйте настройку/ключ, включающие данный режим
Настройки основного приложения деляться на две группы (Redshift и Redlamp). Это связано с возможностью совместимости конфига с родительскими проектами, а также возможностью самого приложения работать в режиме максимальной совместимости.
Описание групп настроек:
- Настройки RedShift. Данная группа максимально совместима с родительскими приложениями и напрямую заимствована из конфига RedShift.
[redshift]
; Температура (интенсивность) цвета в дневном периоде (1000 - 6500)
temp-day = "6500"
; Температура (интенсивность) цвета в ночном периоде (1000 - 6500)
temp-night = "4500"
; Цветовое значение гаммы в формате R:G:B ("число RGB" - сокращение, устанавливающий равные значения)
; Применяется для установки гаммы на протяжении всего времени работы программы и имеет приоритет над
; раздельным вариантом настроек gamma-day/gamma-night
gamma = "0.8:0.7:0.8"
; Цветовое значение гаммы в формате R:G:B ("число RGB" - сокращение, устанавливающий равные значения)
; в дневной период
gamma-day = "1.0000000"
; Цветовое значение гаммы в формате R:G:B ("число RGB" - сокращение, устанавливающий равные значения)
; в ночной период
gamma-night = "1.0000000"
; ID плагина, предоставляющего геолокацию (в режиме работы по положению солнца)
location-provider = "manual"
; ID плагина, реализующего технологию изменения гаммы экрана
adjustment-method = "randr"
; Включает режим сглаживания переходов температуры окрашивания.
; Игнорируется при использовании плагинов окрашивания реализующих слгаживание самостоятельно
; плагины отмечеы модификатором (RLMP_PLUGIN_FLAG_PASSTHROUGH)
fade = "1"
; Включает режим плавного перехода между дневным и ночным режимом работы окрашивания
transition = "0"
; Числовое значения яркости в диапазоне (0.1 - 1.0).
; Применяется для установки яркости на протяжении всего времени работы программы и имеет приоритет над
; раздельным вариантом настроек brightness-day/brightness-night
brightness = "1.0000000"
; Числовое значения яркости в дневном периоде в диапазоне (0.1 - 1.0).
brightness-day = "1.0000000"
; Числовое значения яркости в ночном периоде в диапазоне (0.1 - 1.0).
brightness-night = "1.0000000"
; Угол восхождения солнца, за которым начинается рассвет (-50 - 50)
; Игнорируется в случае установленного режима работы по времени
elevation-high = "3.0000000"
; Угол восхождения солнца, за которым начинается закат (-50 - 50)
; Игнорируется в случае установленного режима работы по времени
elevation-low = "-6.0000000"
; Временной диапазон переходного периода, считающегося рассветом
; Игнорируется в случае установленного режима работы по солнцу
dawn-time = "06:00-08:00"
; Временной диапазон переходного периода, считающегося закатом
; Игнорируется в случае установленного режима работы по солнцу
dusk-time = "18:00-20:00"
- Настройки Redlamp. Данная группа содержит собственые базовые настройки ядра приложения.
[redlamp]
; Версия файла конфига. НЕ РЕКОМЕНДУЕТСЯ исправлять это значение вручную
version = "0.3.0"
; Включает режим масимальной совместимости с родительскими проектами
compat_mode = "0"
; Включает режим запрета изменения конфигурационного файла
config_readonly = "0"
; Включает режим проверки существования единственной версии экземпляра приложения
one_instance = "1"
; Время работы приложения в демонстрационном режиме (demo)
demo_delay = "10"
; Размер очереди сообщений (message queue) ядра приложения (макс. 256). Меньшее значение
; уменьшает размер занятой памяти, но увеличивает вероятность переполнения очереди и
; потери сообщений. По-умолчанию выставляется максимум, но если вы решите менять данный
; параметр, то делайте это с умом и проинспектируйте с загруженность очереди
; с помощью отладочной сборки
queue_limit = "256"
; Включает проверку плагинов на совместимость с приложением. НЕ рекомендуется отключать.
plugins_verify = "1"
; Черный список плагинов. Можно указывать через запятую как ID, так и имя библиотеки.
; Указанные в данном списке плагины/модули игнорируются при загрузке (как системные,
; так и пользовательские)
plugins_blacklist = "id,library"
; Включает использование пользовательских плагинов. По-умолчанию отключено
; в целях безопасности
user_plugins = "0"
; Включает режим работы по-времени. По-умолчанию используется режим работы по солнцу.
time_sync_mode = "0"
; Включает использование плагинами XDG-порталов, если приложение собрано с данной
; поддержкой (иначе игнорируется).
portals = "1"
; Включает режим постоянной окраски (гамма не меняется с течением времени).
; см. примечание
persistent = "0"
; Включает режим использования только статически собраных с приложением плагинов.
; Плагины в формате динамических библиотек в этом режиме НЕ опрашиваются.
static = "0"
; Задаёт количество шагов "сглаживания" цветовых переходов (1 - 100).
; Большее значение делает переход более плавным, но и дольше воспроизводится.
fade_length = "10"
; Задаёт скорость шагов сглаживаия (в мсек. 1 - 50).
fade_refresh_rate = "20"
; Задаёт "тактовый генератор" для всех циклов внутри приложения (в мсек. 10 - 500).
; Большая частота увеличивает отзывчивость, но и увеличивает нагрузку на ЦП,
; меньшая частота разгружает систему, но ухудшает отзывчивость приложения.
; НЕ рекомендуется менять данный параметр, но если требуется, то делайте это
; крайне осторожно
core_refresh_rate = "50"
; опция принудительно указывает, в каком стиле запускать демона:
; современном - systemd,new
; unix-стиле - old,sysv,classic
daemon_style = "systemd"
; включает цветное представление лога в консоли. Escape последовательности, с помощью
; которых осуществляется раскрашивание, не всегда поддерживаются (особенно при выводе
; в логи), поэтому по-умолчанию параметр выключен
color_log = "0"
; включает поддержку передачи пользовательских параметров через командную строку
cmdline_opts = "1"
об изменении настроек из командной строки
Начиная с версии 0.3, приложение поддерживает переопределение опций кофигурационного файла через командную строку. Это осуществляется с помощью опций -l и -m (т.к. того требует совместимость с Gammastep), а также с использованием универсальной опции -C. Формат аргумента опций: <плагин-цель>:<опция>=<значение>: .... Если плагин не поддерживает переопределение опций, то это не повлияет на запуск приложения, но будут использованы настройки из конфигурационного файла или настройки по-умолчанию.
Для переопределения опций ядра можно использовать, как цель, идетификатор core. Внимание не все опции ядра доступны к переопределению. Это обоснованное решение, т.к. некоторые настройки коренным образом вляют на работу приложения или на безопасность его использования и было-бы крайне сомнительной идеей - давать их к использованию пользователю напрямую. Если же пользователь решил править конфигурационный файл, то он, очевидно знает, зачем он это делает. Настройки ядра, которые недоступны к переопределению:
- version - это, в сущности, техническая опция, но важная и переопределять её крайне не рекомендуется
- config_readonly - если пользователь указал неизменяемость конфига, то было-бы странно давать кому угодно его изменять
- queue_limit - это важный технический параметр и простой доступ к ему не желателен
- core_refresh_rate - аналогично предыдущему
- user_plugins - недоступно по соображениям безопасности, если пользователь их отключил, не нужно давать возможности включать напрямую
- cmdline_opts - отключать разбор опции комадной строки из командной строки было-бы странной идеей
Важно!!! Если не указана блокировка конфигурационного файла от записи, то настройки перезаписываются.
о режиме persistent
В приложении реализован режим постоянного окрашивания (persistent). Это простой режим, в котором не производится расчёты корректировок гаммы, не используются плагины геолокации. В данном режиме всегда используются настройки *-day (или константные).
При написании плагинов и скриптов учитывайте, что т.к. в данном режиме расчёты не производятся, то и сообщения о данных событиях приходить внешним адресатам НЕ будут.
FAQ
-
Зачем этот проект при наличии Redshift/Gammastep
Изначально рассматривалось развитие работы с DE GNOME в рамках проекта gammastep. Gammastep - это форк заброшенного Redshift, в который собраны патчи от сообщества, не вошедшие в оригинальный проект, и добавлен провайдер для wlroots-based систем . Автор не увидел возможности в рамках проекта gammastep, без глубоких и, иногда, достаточно спорных архитектурных изменений, внести необходимую функциональность (см.выше).
-
Почему плагины KDE считаются нестабильными
На то существует несколько причин (в порядке убывания значимости):
- В KDE есть свой конфигуратор - NightColor, который имеет практически идентичную функциональность (более того, плагин разрабатывается, по аналогии с ним).
- В режиме Xorg, KDE не препятствует установке нужной гаммы напрямую в Xorg (плагины XRandr, XVidMode), не привлекая механизмы KDE
- Автор приложения не пользуется KDE и осуществляет поддержку и тестирование данных плагинов в режиме минимальной работоспособности.
Более подробное описание можно прочесть в README плагина. Возможно, со временем найдутся желающие более деятельно развивать данное направление и ситуация улучшится.
-
Почему проект ведётся на русском языке
Поскольку единственный, на данный момент, автор - русский и вести проект на родном языке для него предпочтительней. Современные онлайн-переводчики вполне хороши (Yandex.Translate, Google.Translate). Желающие могут пользоваться ими, если есть такая потребность.
-
Почему gitflic.ru, а не github.com/gitlab.com/etc.
Потому что это желание автора. Для пользователя gitflic принципиально ничем не отличается. Желание организовать зеркала на соответствующих сервисах автором приветствуется, но участие в их жизни не гарантируется.
-
Почему, на данный момент, поддерживается только Linux
Потому что автор приложения использует Linux в повседневной жизни и разработка плагинов под другие системы не является приоритетом. Под Windows и MacOS сущестует множество замечательных решений, зачастую куда более функциональных. Тем не менее, ядро RedLamp разрабатывается максимально независимым от особенностей конкретной системы и, следовательно, может быть легко портировано под нужную ОС. Реализацию-же плагинов коррекций гаммы и, возможно, геолокации, очевидно придётся осуществлять под конкретную систему.
-
Я не буду использовать это приложение, пока не …, вы обязаны … , и прочий FUD
Авторы приложения не заставляют Вас пользоваться данным приложением и не интересуются Вашим мнением о том, что им делать.
Приветствуются:
- осмысленные сообщения об ошибках в разделе “Проблемы”,
- вежливые запросы на реализацию желаемых функций в разделе “Проблемы” (реализация не гарантируется),
- исправления ошибок и реализации интересных идей в разделе “Запросы на слияние” (слияние не гарантируется, но будет рассмотрено, при наличии у сопровождающих времени)
Описание
Модульный аналог RedShift с поддержкой Wayland и плагинами для DE