Troubleshooting

Commands for after setup

Everything here runs on the Pi itself — either directly, or over SSH from another computer (ssh [email protected], or whatever hostname you set) or a phone using an SSH app like Termius or PiSSH. Tap the icon on any command to copy it.

Add remote access

Reach the control app from anywhere, not just your home network — sets up Tailscale, a private network (nothing exposed publicly). This is interactive: it'll show you a login link to open once in any browser.

bash ~/piazzahq/setup-remote-access.sh

Already set up? Check its status:

bash ~/piazzahq/setup-remote-access.sh --status
Once this is set up, you can also SSH in from your phone — an app like Termius or PiSSH works well — using the same address Tailscale gives the Pi, no different from SSHing in from a computer.

Switch to X11

The installer offers this automatically near the end of setup. If you skipped it, or want to do it manually:

sudo raspi-config nonint do_wayland W1 && sudo reboot
If that doesn't work on your image, do it through the menu instead: sudo raspi-config → 6 Advanced Options → Wayland → W1 X11 → reboot.

Setup didn't finish, or something went wrong

Safe to run again as many times as needed — it won't repeat steps that already succeeded, and never touches your actual data (events, photos, chores).

bash ~/piazzahq/install.sh
Don't re-run the one-line curl | bash install command once ~/piazzahq already exists — it refuses on purpose, specifically so it can't be used to accidentally wipe a real install. The command above is the one that's actually safe to repeat.

Wipe everything and start completely fresh

Destructive. This is a different, much bigger step than the repair command above — use it only if you genuinely want to lose everything and set up as if this were a brand new Pi. The vast majority of "something's wrong" situations are the repair command above, not this.

curl -sSL https://piazzahq.com/fresh-install | bash
Makes a local backup of your database and photos before deleting anything, and requires typing a full confirmation phrase (not just yes/no) before it touches anything — but a backup you haven't verified isn't a backup you can rely on. Deletes every event, photo, layout, setting, and your PIN, then reinstalls from scratch.

Remove Piazza HQ from this device entirely

Destructive. Different from the fresh-install command above — this doesn't reinstall anything afterward. Use this when you actually want Piazza HQ gone from this specific device (retiring it, repurposing the Pi for something else), not when you're troubleshooting.

curl -sSL https://piazzahq.com/uninstall | bash
Same local backup-first behavior and typed confirmation as the fresh-install command above. Stops and disables the service, removes the systemd service file, and deletes the whole install folder (database, photos, every setting) — then stops, with nothing reinstalled. To set the device back up later, use the normal install command.

White or blank screen after a reboot

After power-on the display goes through a few stages before the layout appears, and on a small Pi that takes a while: on a Pi 3B+, expect the screen to sit white, then dark, for up to a minute or so before the layout draws. That's the Pi being busy starting up, not a fault. If yours is still white or blank after two or three minutes, or stays that way until you press F11 or F5, work through these in order.

1. Update to version 1.87.14 or newer. It shortens the white stage on small Pis (calendar feeds no longer all sync during the first minute after start-up), makes the start-up check wait for the desktop, and fixes a browser window that comes up too small. In the control app: Settings → Advanced → Version & License, then update.

2. Try F11. With a keyboard plugged into the Pi, press F11. If the layout appears, the browser window started smaller than the screen. Over SSH instead:

DISPLAY=:0 xdotool key F11

3. Run the checkup. It changes nothing and prints no passwords: it reports your Pi model, desktop type, how the browser is launched at boot, and whether that launch line points at a file that exists.

bash ~/piazzahq/scripts/kiosk-diagnose.sh

On a version older than 1.87.14 that file isn't on your Pi yet; this fetches and runs the same checkup:

curl -fsSL https://raw.githubusercontent.com/jlauty21/PiazzaHQ/main/scripts/kiosk-diagnose.sh | bash

4. If the checkup says a boot line points at a missing file, the display never starts after a reboot because the launcher it names is gone (this happens on a Pi whose project folder was renamed or moved). Re-running the installer repairs it, and is safe to repeat:

bash ~/piazzahq/install.sh
Still stuck? Send us the checkup output through Settings → Feedback & Ideas in the control app, or the contact page: the Pi model and whether you installed with the Pi installer or with Docker are the two most useful facts. Running in Docker? There's no launcher in a container, so the browser on your display machine can start before the container is ready. The Docker guide has a short boot-time recipe for that.

Kiosk display controls

Drop in and out of the fullscreen display without racing an auto-relaunching browser.

Current installs bind Ctrl+Alt+K automatically to kiosk toggle — no SSH needed for routine use. (Older installs may still have the previous Super+K binding, which turned out to conflict with the Raspberry Pi desktop's own "tap Super to open the menu" gesture — re-running install.sh adds Ctrl+Alt+K alongside it without removing the old one.) The commands below stop the underlying process cleanly either way, and are the only option if you're on a device with no keyboard at all. If you're physically at the Pi with no SSH access and need a terminal, Ctrl+Alt+F2 switches to a text console below the whole graphical session — log in there and run kiosk off.
kiosk off

Bring it back:

kiosk on

Or just flip between the two:

kiosk toggle
If kiosk restart leaves a black screen, or logs you out of the desktop, the kiosk command on your Pi is an old copy. The installer used to copy it into a system folder once, and updates can't refresh a file there, so fixes to it never reached the command you type (and the Ctrl+Alt+K shortcut). Newer installs link to the up-to-date copy automatically; on an older one, run this once (it asks for your Pi password):
sudo ln -sfn ~/piazzahq/scripts/kiosk /usr/local/bin/kiosk

Until then, the current copy always works when you run it by its full path:

bash ~/piazzahq/scripts/kiosk restart

Check whether the app is actually running

sudo systemctl status piazzahq

Watch its logs live (useful if something's actually broken):

journalctl -u piazzahq -f

Restart it (e.g. after manually changing a setting):

sudo systemctl restart piazzahq

Still stuck? Get in touch — include what you ran and what actually happened, and it's usually a quick fix.