Dashboards

A wall-mounted HA dashboard on a Raspberry Pi

A Pi 4 and a 10-inch touch panel running a Home Assistant dashboard in Chromium kiosk mode: autostart, a hidden cursor, no pinch-zoom, and a screen you can turn off from HA.

Some hardware links on this page are affiliate links. As an Amazon Associate I earn from qualifying purchases. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.

A wall tablet dies when its battery swells. A Pi and an HDMI touch panel don’t have that problem, and they cost about the same. This is the setup we run on a desk: a Pi 4 with 4 GB, a 10-inch touch panel, Raspberry Pi OS, and Chromium in kiosk mode on a Home Assistant dashboard.

What you need

  • A Pi 4 (2 GB is enough, 4 GB is comfortable) or a Pi 5. Use a real supply: 5.1 V 3 A for a Pi 4, 27 W for a Pi 5. A weak phone charger gives you a yellow lightning bolt and random freezes.
  • A 10-inch HDMI touch panel. Touch goes over a separate USB cable. If touch does nothing, that cable is the first thing to check.
  • Raspberry Pi OS (64-bit, with desktop). Current releases run the labwc Wayland session, which is what this guide uses.

1. A user for the wall

In Home Assistant, go to Settings → People and add a user just for the panel. Make it a normal user, not an admin. If someone walks off with the Pi, you delete one user.

Build the dashboard for the panel’s real size. At the default scale a 1024×600 panel is short, so aim for one screen with no scrolling.

2. Install and log in once

  1. Flash Raspberry Pi OS with Raspberry Pi Imager. Set the user name, Wi-Fi and SSH there.
  2. In Raspberry Pi Configuration, turn on desktop autologin.
  3. Open Chromium with a separate profile and log in to Home Assistant as the panel user:
chromium --user-data-dir="$HOME/.config/chromium-kiosk" "http://HA_ADDRESS:8123/"

Use your Home Assistant’s LAN address. Tick “Keep me logged in”, then close the window. The login stays in that profile.

3. The kiosk script

Save this as ~/kiosk.sh and make it executable (chmod +x ~/kiosk.sh):

#!/bin/sh
URL="http://HA_ADDRESS:8123/wall-panel/0"

# Wait until Home Assistant answers, so a power cut doesn't leave an error page up
until curl -s -o /dev/null "$URL"; do sleep 5; done

exec chromium \
  --user-data-dir="$HOME/.config/chromium-kiosk" \
  --kiosk --noerrdialogs --disable-infobars \
  --disable-pinch --overscroll-history-navigation=0 \
  --check-for-update-interval=31536000 \
  "$URL"
  • --disable-pinch stops a two-finger tap from zooming the dashboard.
  • --overscroll-history-navigation=0 stops a swipe from going back a page.
  • If the dashboard looks too small or too big, add --force-device-scale-factor=1.25 (or another value) and try again.

4. Start it at login

labwc runs the commands in ~/.config/labwc/autostart when the session starts. Add one line:

~/kiosk.sh &

Reboot. The panel should come up on the dashboard with no browser chrome.

To hide the mouse cursor, add a window rule in ~/.config/labwc/rc.xml that hides the cursor for Chromium, or simply unplug the mouse. A touch panel doesn’t need one.

5. Hide the HA header and sidebar

Home Assistant has no built-in kiosk switch. The common fix is the kiosk-mode plugin from HACS. Install it, then add ?kiosk to the end of the URL in kiosk.sh to hide the header and sidebar on that dashboard only.

6. Turn the screen off from Home Assistant

A panel that is on all night burns out sooner and lights up the room. On labwc, wlopm turns the display off and back on:

wlopm --off '*'   # screen off
wlopm --on '*'    # screen on

Wrap those two in a small script you can call over SSH from a Home Assistant shell_command, or run a tiny HTTP service on the Pi that Home Assistant calls. Then an automation can turn the panel off at night and back on when a motion or mmWave sensor sees someone (see mmWave presence sensors, explained).

Optional: Browser Mod

The Browser Mod integration (HACS) gives each browser a Browser ID that Home Assistant can target: pop-ups on the panel, a different default dashboard, or a reload when the dashboard changes. Open the Browser Mod panel once in the kiosk profile to set the ID. A small badge in the corner means the browser is waiting for its first touch, not that something is broken.

Troubleshooting

  • Touch does nothing. The touch USB cable is not connected, or is in a power-only port. Run libinput list-devices and look for the panel. It may not have “touch” in its name.
  • Blank page after a power cut. Chromium started before Home Assistant was up. The until curl loop in the script fixes it.
  • Login screen instead of the dashboard. Autologin only applies at boot. Restarting just the session lands at the login screen. Reboot instead.
  • Logged out after an update. The profile was cleared or the URL changed from LAN address to a different name. Each address is its own login.

Use your own LAN address in the script. Don’t publish it, or your dashboard, with your home’s names in it.