Об этом проекте

DesktopPanel — это панель управления рабочим столом, предназначенная для Raspberry Pi с официальным сенсорным экраном RPi. Она является переработанным продолжением проекта автора SmartBedroomPanel и распространяется в виде образа Docker (mrtux/desktop-panel). В примечаниях по настройке описывается управление подсветкой: правило udev предоставляет непривилегированному пользователю доступ на запись к элементам sysfs brightness и bl_power для подсветки. Если известная плата не обнаружена, окружение sysfs для подсветки имитируется во временном каталоге, что полезно при разработке. Для запуска в Docker требуются повышенные права, поскольку приложение обращается к нескольким системным ресурсам. Контейнер ожидает, что каталог конфигурации будет примонтирован в режиме только для чтения по пути /app/configuration и будет содержать desktop-panel-config.json и issuelist.json; дополнительно может быть примонтирован доступный для записи каталог снимков экрана по пути /app/screenshots. В примере команды используются --privileged, --restart always, переменная окружения TZ и bind-монтирование; монтирование конфигурации при этом позволяет приложению реагировать на изменения JSON-файлов. Интеграция в основном основана на сообщениях. Через AMQP доступ и учетные данные задаются параметрами amqp.host, amqp.user и amqp.passwd. Если amqp.declare имеет значение true, ресурсы объявляет панель; в противном случае их настройка выполняется извне. Панель ожидает команды в amqp.command_channel (по умолчанию command.DesktopPanel). Команды представляют собой JSON-объекты с идентификатором команды и объектом arguments; текущая реализация работает только в режиме запросов и не имеет универсального механизма ответов RPC. Известные команды включают screenshot (сохраняет изображение в каталоге снимков экрана) и show page, которая переключается на страницу с именем из аргумента page и поддерживает go_back_if_current для извлечения из стека навигации, а также block_input для предотвращения кликджекинга. Канал syslog может отображать критические сообщения syslog на странице System. Сообщения потребляются из очереди с именем, заданным в amqp.syslog_channel (значение по умолчанию отсутствует; если параметр опущен, функция отключена). Они должны поступать из AMQP-назначения syslog-ng, при этом вся информация размещается в заголовках свойств сообщения AMQP (DATE, FACILITY, HOST/HOST_FROM, MESSAGE, PRIORITY, PROGRAM), а тело сообщения остается пустым. Практическое значение имеют только сообщения уровня error и выше; для маршрутизации только этих уровней следует использовать фильтры syslog-ng или привязки RabbitMQ. README рекомендует выделенную долговременную очередь (например, syslog.DesktopPanel), привязанную к тематическому обмену syslog-ng, с amqp.declare=false, если очередь управляется извне, и приводит фрагмент JSON-конфигурации. Когда новое сообщение поступает, пока страница System неактивна, кнопка вкладки System загорается красным для уровней crit/critical/alert/emerg/panic и желтым для error/err; уведомление сбрасывается при открытии страницы. Через MQTT, если настроен mqtt.presence-topic, статус присутствия публикуется как необработанный текст статуса. Проект использует бесплатные иконки из Streamline Icons Pack и распространяется под лицензией MIT (© 2021 Stefan Haun и участники). Для статического анализа в проект включен рабочий процесс CodeQL.