Hub Dashboard Kiosk
| Hub Dashboard Kiosk | |
|---|---|
| Status | Operational! (and very fast) |
| Model | Lenovo M75q // AMD Ryzen 5 PRO 4650GE // 16GB RAM |
| Owner | tracert (aka amber 💖) |
| Quirks | so many. don't ask about the grafana auth method 😬 |
| Passwords | user: devhack // pass: nevergonnagiveyouup |
| Hostname | hub-dashboard-kiosk |
The new dashboard kiosk hardware and software stack has been rolled out! Welcome to the future of hubbing in the dashboard (or something like that)!
Located centrally over the table, the kiosk is intended to show stats and other info from the space. It also supports casting over Apple AirPlay and Google Chromecast (though those features are broken at the best of times.)
the kiosk setup:
grafana: https://grafana.devhack.net/playlists/ config: https://git.devhack.net/tracert/hub-dashboard-kiosk

some details:
This machine currently lives in the /dev/hack Hub room. With a pretty spry AMD Ryzen 5 PRO 4650GE processor, 16GB of RAM, and 512GB of NVMe storage. This is probably wayyyy too much power for this application, but whatever.
The OS of choice is NixOS and has basically nothing installed but the base packages, Sway, and Firefox. Visit the config repo to push changes.
Feel free to install or modify the applications or settings, just please DOCUMENT ALL CHANGES HERE. The "devhack" account can be logged into with the password, "nevergonnagiveyouup".
the implementation:
startup
When the OS is started, Firefox is opened to the Grafana playlist assigned to this task. After that, the AirPlay and Chromecast servers start up in the background and will take over the display when remotely activated. For more, check out the config repo.
the hook-ups
The PC is hooked up using a DisplayPort to HDMI adaptor to a Dell monitor. The wall mount for the monitor kinda unstable and shouldn't be moved without supporting the bottom (UwU). Networking is handled by Ethernet routed under the table.
kiosk service:
There's a simple Go program that runs on this machine that is in charge of injecting the ponies script, and running the carousel to ensure that we're cycling through dashboards due to a stupid Grafana limitation. The API base for this is http://hub-dashboard-kiosk:8888, and the endpoints are as follows:
- /next - cycle to the next dashboard
- /prev - cycle to the previous dashboard
- /pause - stop the carousel
- /resume - continue the carousel
- /eval - inject arbitrary javascript into the current webpage
We don't believe in HTTP semantics, so GET, POST, OPTIONS, hell, probably even non-standard verbs will work.
To inject arbitrary JavaScript into the current webpage (arguably the most fun part of kiosk service), pass the script you'd like injected in the body of your HTTP request. No headers necessary. An example cURL request is as follows:
; cat faggotry.js
for (let i = 0; i < 100; i++) {
const flag = document.createElement("script");
flag.setAttribute("type", "text/javascript");
flag.setAttribute("src", "https://t4t.net/trans-flag-bounce.js");
flag.setAttribute("id", '__trans-flag-bounce-' + Math.random().toString(36).slice(2));
document.body.appendChild(flag);
}
; curl -X POST --data @flag.js http://hub-dashboard-kiosk:8888/eval
{"value":null}⏎
contact me:
questions? hmu on matrix: @tracert:devhack.net or visit my site: https://tracert.me