About this project
DesktopPanel is a desktop control panel designed for a Raspberry Pi with the official RPi touch screen. It is a restructured successor to the author's SmartBedroomPanel project and is distributed as a Docker image (mrtux/desktop-panel).
Setup notes cover backlight control: a udev rule grants non-root write access to the backlight brightness and bl_power sysfs entries. If no known board is detected, the backlight sysfs environment is faked in a temporary directory, which is useful for development.
Running with Docker requires elevated access because the application touches several system resources. The container expects a configuration directory mounted read-only at /app/configuration containing desktop-panel-config.json and issuelist.json, plus an optional writable screenshots directory at /app/screenshots. The example command uses --privileged, --restart always, a TZ environment variable, and bind mounts; the configuration mount still allows the app to react to JSON file changes.
Integration is primarily message-based. Over AMQP, access and credentials are set with amqp.host, amqp.user and amqp.passwd. If amqp.declare is true the resources are declared by the panel, otherwise setup is external. The panel listens for commands on amqp.command_channel (default command.DesktopPanel). Commands are JSON objects with a command identifier and an arguments object; the current implementation is request-only with no generic RPC response mechanism. Known commands include screenshot (stores an image in the screenshots directory) and show page, which switches to the page named in the page argument and supports go_back_if_current to pop the navigation stack and block_input to prevent clickjacking.
A syslog channel can display critical syslog messages on the System page. Messages are consumed from the queue named in amqp.syslog_channel (no default; omit to disable). They must come from syslog-ng's AMQP destination, with all information in AMQP message property headers (DATE, FACILITY, HOST/HOST_FROM, MESSAGE, PRIORITY, PROGRAM) and an empty body. Only error severity and above are meaningful; syslog-ng filters or RabbitMQ bindings should route just those severities. The README recommends a dedicated durable queue (e.g. syslog.DesktopPanel) bound to the syslog-ng topic exchange, with amqp.declare set to false when the queue is managed externally, and gives a configuration JSON snippet. When a new message arrives while the System page is not active, the System tab button lights red for crit/critical/alert/emerg/panic and yellow for error/err; the notification clears when the page is opened.
Over MQTT, if mqtt.presence-topic is configured, presence status is published as raw status text.
The project uses free icons from the Streamline Icons Pack and is licensed under MIT (© 2021 Stefan Haun and contributors). A CodeQL workflow is included for static analysis.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.