Kiosk
This runbook covers the Raspberry Pi kiosk hosts
homepi4andweatherpi4. Both usenix/services/kiosk.nix. The display stack is Cage on Wayland; Firefox runs in kiosk/private-window mode against the configured kiosk URL. For container-backed kiosks, the default URL ishttp://localhost:8080.Quick checks
Check Cage and Firefox:
nix run .#<host> -- systemctl --no-pager --full status cage-tty1.service nix run .#<host> -- pgrep -a firefoxExpected:
cage-tty1.serviceisactive (running)Cage runs
/nix/store/...-kiosk-firefoxFirefox runs with
--kiosk --private-window http://localhost:8080
Check the container-backed app:
nix run .#<host> -- systemctl --no-pager --full status docker-kiosk.service nix run .#<host> -- docker ps nix run .#<host> -- journalctl -u docker-kiosk.service -n 50 --no-pagerExpected:
docker-kiosk.serviceis activeContainer
kioskis runningghcr.io/jonpulsifer/hub:latestPort mapping includes
0.0.0.0:8080->8080/tcpRecent logs include
GET / 200and, for the weather app,GET /api/weather 200
If the screen shows Firefox "Oops"
This is usually Firefox loading before the local container is ready. The module uses a wrapper that waits for the kiosk URL before launching Firefox, but after manual switches or service restarts it is still worth checking the order of events.
Check whether the app is serving:
nix run .#<host> -- journalctl -u docker-kiosk.service -n 80 --no-pagerIf the app is healthy and logging
GET / 200, refresh the display by restarting Cage:nix run .#<host> -- sudo systemctl restart cage-tty1.serviceVerify Firefox relaunched:
nix run .#<host> -- pgrep -a firefox nix run .#<host> -- journalctl -u docker-kiosk.service -n 20 --no-pager
If Cage is inactive
Check whether it is enabled and part of the graphical target:
nix run .#<host> -- systemctl is-enabled cage-tty1.service nix run .#<host> -- readlink -f /etc/systemd/system/default.target nix run .#<host> -- systemctl --no-pager list-dependencies graphical.targetStart it manually if needed:
nix run .#<host> -- sudo systemctl start cage-tty1.serviceIf this happens immediately after
nixos-rebuild switch, note that NixOS may report:NOT restarting the following changed units: cage-tty1.serviceIn that case, restart Cage once:
nix run .#<host> -- sudo systemctl restart cage-tty1.service
If the container is down
Restart the container service:
nix run .#<host> -- sudo systemctl restart docker-kiosk.service nix run .#<host> -- systemctl --no-pager --full status docker-kiosk.serviceThen restart Cage so Firefox reconnects to the now-running app:
nix run .#<host> -- sudo systemctl restart cage-tty1.service
Deploying changes
Build before switching:
nix build .#nixosConfigurations.<host>.config.system.build.toplevel --no-linkSwitch a kiosk host:
nixos-rebuild switch --flake .#<host> --target-host <host> --sudoFor
weatherpi4over Tailscale:nixos-rebuild switch --flake .#weatherpi4 --target-host weatherpi4.pirate-musical.ts.net --sudoAfter a switch, check whether Cage was restarted. If the switch output says it was not restarted, run:
nix run .#<host> -- sudo systemctl restart cage-tty1.service
Linked references 4
Weather kiosk (Runbooks/Kiosk). Config: nix/hosts/weatherpi4.nix.
Kiosk Pi in a SmartiPi Touch 2 case with the Raspberry Pi 7" Touch Display — a physical twin of Hosts/weatherpi4 (same Pi 4B 8 GB, same pi4 + common + iperf3 + kiosk NixOS modules; only Wi-Fi SSIDs differ). Runbooks/Kiosk.
| Host | Purpose | Hardware | Notes |
|---|---|---|---|
| Hosts/cloudpi4 | utility Pi | Pi 4B 4 GB | still Ubuntu 22.04, not NixOS |
| Hosts/homepi4 | kiosk | Pi 4B 8 GB | Runbooks/Kiosk; use homepi4-wifi.lolwtf.ca |
| Hosts/weatherpi4 | kiosk | Pi 4B 8 GB | reach over Tailscale; Runbooks/Kiosk |
| Hosts/dns | DNS | Pi 5 8 GB | |
| Hosts/rackpi5 | rack status | Pi 5 8 GB | diskless — RAM image from spore (ADR/0008 Diskless netboot for rackpi5) |
| Hosts/spore | NFS/PXE boot server | Pi 5 8 GB, NVMe | boot-critical for rackpi5; monitored by folly |
| Hosts/radiopi0 | radio | Pi Zero W | unmanaged — Raspbian buster, Pirate Radio case + pHAT BEAT DAC |
Runbooks/Kiosk — the Raspberry Pi kiosk hosts (homepi4, weatherpi4): Cage/Wayland, Firefox, container-backed apps