{"id":15290624,"url":"https://github.com/eliasstar/dashd","last_synced_at":"2026-05-04T06:35:33.982Z","repository":{"id":37237244,"uuid":"495945229","full_name":"EliasStar/DashD","owner":"EliasStar","description":"Lightweight daemon for Raspberry Pi driven kiosks","archived":false,"fork":false,"pushed_at":"2022-12-10T20:24:02.000Z","size":3660,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-24T08:17:20.653Z","etag":null,"topics":["daemon","kiosk","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EliasStar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-24T18:36:10.000Z","updated_at":"2023-01-19T08:05:28.000Z","dependencies_parsed_at":"2023-01-26T07:40:12.613Z","dependency_job_id":null,"html_url":"https://github.com/EliasStar/DashD","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/EliasStar/DashD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EliasStar%2FDashD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EliasStar%2FDashD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EliasStar%2FDashD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EliasStar%2FDashD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EliasStar","download_url":"https://codeload.github.com/EliasStar/DashD/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EliasStar%2FDashD/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32597566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daemon","kiosk","raspberry-pi"],"created_at":"2024-09-30T16:08:49.210Z","updated_at":"2026-05-04T06:35:33.967Z","avatar_url":"https://github.com/EliasStar.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DashD\n\u003e Lightweight daemon for Raspberry Pi driven kiosks\n\n## Features\n- software control for screen buttons (power, source, menu, plus, minus)\n- lighting integration with Artemis-RGB (UDP and HTTP support)\n- website display using Chromium based browser\n- control via HTTP server\n\n### Display\nOn startup DashD will create a browser window with the specified position and size, which can be changed later over HTTP. If the window is closed, DashD will exit.\n\n|     CLI Flag      |           Default           |     Unit      |\n| :---------------: | :-------------------------: | :-----------: |\n| `display_enabled` |            true             |     Bool      |\n|  `browser_path`   | \"/usr/bin/chromium-browser\" | String (Path) |\n|   `default_url`   |                             | String (URL)  |\n|    `window_x`     |              0              | UInt (Pixel)  |\n|    `window_y`     |              0              | UInt (Pixel)  |\n|  `window_width`   |            1920             | UInt (Pixel)  |\n|  `window_height`  |            1080             | UInt (Pixel)  |\n\n### Lighting\nDashD can drive a single addressable LED strip with WS281X LEDs (any GRB LEDs should work). On most Raspberry Pi GPIO 12, 18, 40, and 52 can be used for connecting the data line of the LED strip. However if you are using Model B+, 2B or 3B only GPIO 12 and 18 are supported due to a hardware limitation.\n\n|      CLI Flag      | Default |     Unit     |\n| :----------------: | :-----: | :----------: |\n| `lighting_enabled` |  true   |     Bool     |\n|   `ledstrip_pin`   |   18    | UInt (GPIO)  |\n| `ledstrip_length`  |   100   | UInt (Count) |\n\n### Screen\nDashD virtualizes the buttons of the screen, so they can be remote controlled via the HTTP server. The GPIOs should be connected to transistors in a way that a high output corresponds to pressing down the button.\n\n|     CLI Flag     | Default |    Unit     |\n| :--------------: | :-----: | :---------: |\n| `screen_enabled` |  true   |    Bool     |\n|   `power_pin`    |   17    | UInt (GPIO) |\n|   `source_pin`   |   24    | UInt (GPIO) |\n|    `menu_pin`    |   27    | UInt (GPIO) |\n|    `plus_pin`    |   22    | UInt (GPIO) |\n|   `minus_pin`    |   23    | UInt (GPIO) |\n\n### Server\nOn startup DashD will start a HTTP server on the specified port, which serves a basic web interface. It allows the user to change the website shown, move and resize the window, configure the lighting and press the virtual screen buttons, if those modules are enabled.\n\n|     CLI Flag     | Default |    Unit     |\n| :--------------: | :-----: | :---------: |\n| `server_enabled` |  true   |    Bool     |\n|  `server_port`   |   80    | UInt (Port) |\n\n### Socket\nDashD will listen for UDP packets on the specified port, which can be used to control the lighting with [Artemis-RGB](https://github.com/Artemis-RGB/Artemis) or any compatible program that supports the Artemis Lighting Protocol. If lighting is disabled, this module will be disabled.\n\n|     CLI Flag     | Default |    Unit     |\n| :--------------: | :-----: | :---------: |\n| `socket_enabled` |  true   |    Bool     |\n|  `socket_port`   |  1872   | UInt (Port) |\n\n\n## Installation\nDownload the latest release from [GitHub Releases](https://github.com/EliasStar/DashD/releases/latest) for your platform. Then run the following commands in the directory where you downloaded DashD:\n``` sh\nsudo apt-get update\nsudo apt-get install chromium-browser\nsudo mv DashD.* /usr/local/sbin/dashd\nsudo chmod +x /usr/local/sbin/dashd\n```\n\n\n## Usage\nOne possible way to use DashD is to run it on startup with systemd and xinit as basic display manager. To use this configuration install xinit like so:\n``` sh\nsudo apt-get update\nsudo apt-get install xserver-xorg xfonts-base xinit\n```\n\nThen put the following in `/etc/X11/xinit/xinitrc`:\n``` sh\n#!/bin/bash\n\nxhost +\n\n/usr/local/sbin/dashd \u0026\u003e /var/log/dashd.log\n```\n\nMake a new systemd unit for xinit at `/etc/systemd/system/xinit.service` with this content:\n``` systemd-unit\n[Unit]\nDescription=Xinit display manager using startx\n\n[Service]\nType=simple\nExecStart=/usr/bin/startx -- -nocursor\nRestart=always\n\n[Install]\nAlias=display-manager.service\n```\n\nFinally enable the service, switch to the `graphical` target and reboot. The logs will be put in `/var/log/DashD.log`.\n``` sh\nsudo systemctl enable xinit.service\nsudo systemctl set-default graphical.target\nsudo reboot\n```\n\n\n## Building\nDashD utilizes Docker to cross-compile for the Raspberry Pi. The Dockerfile in this repository creates an image that can be used to build DashD.\nTo build the docker image run `docker build -t dashd_builder:arm32 -f Dockerfile.arm32 .` in the root directory of this repository. Then run `docker run --rm --volume $(pwd):/dashd/app dashd_builder:arm32` to build DashD for 32-bit. The binary is located at `build/DashD.arm32`. Replace `arm32` with `arm64` in the previous commands to build for 64-bit.\n\n\n## HTTP API\nThe endpoints ignore the HTTP method used, however POST is recommended for all, except `/` and `/config`, which should be used with GET.\n\n|   Endpoint | Description                             |          Parameters | Parameter Description                                                                                          |\n| ---------: | :-------------------------------------- | ------------------: | :------------------------------------------------------------------------------------------------------------- |\n|        `/` | Get the web interface                   |                     |                                                                                                                |\n| `/display` | Set the website to be displayed         |               `url` | the URL of the website as a percent-encoded string\u003cbr\u003edata URLs are also supported                             |\n|    `/move` | Set the window position                 |    `posX`\u003cbr\u003e`posY` | the x position in pixel\u003cbr\u003ethe y position in pixel                                                             |\n|  `/resize` | Set the window size                     | `width`\u003cbr\u003e`height` | the width in pixel\u003cbr\u003ethe height in pixel                                                                      |\n|  `/config` | Get the LED count in JSON (Artemis API) |                     |                                                                                                                |\n|  `/update` | Set colors of LED strip (Artemis API)   |            `base64` | a UDP packet (described below) as a base64 encoded string\u003cbr\u003ename is not enforced; must be the first parameter |\n|   `/reset` | Set all LEDs to black (Artemis API)     |                     |                                                                                                                |\n|   `/power` | Toggle the power button                 |                     |                                                                                                                |\n|  `/source` | Toggle the source button                |                     |                                                                                                                |\n|    `/menu` | Toggle the menu button                  |                     |                                                                                                                |\n|    `/plus` | Toggle the plus button                  |                     |                                                                                                                |\n|   `/minus` | Toggle the minus button                 |                     |                                                                                                                |\n\n\n## UDP Lighting Protocol\nEach UDP packet contains a single frame of lighting data. The first byte is the sequence number which is used for basic packet ordering and must be incremented with each request. The second byte is the channel number which is ignored by DashD because it supports only a single channel. The remaining packet consists of byte triplets which represent the RGB value in that order. The number of byte triplets does not need to be equal to the number of LEDs. Any extra bytes are ignored and LEDs not contained in the packet retain their color. To calculate the length of a packet that sets all LEDs use: `2 + (leds * 3)`.\n\n\n## License\nDashD - Lightweight daemon for Raspberry Pi driven kiosks\u003cbr\u003e\nCopyright (C) 2022 Elias*\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\nany later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliasstar%2Fdashd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feliasstar%2Fdashd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliasstar%2Fdashd/lists"}