Turning a Raspberry Pi Into a Full-Screen Home Assistant Dashboard

January 24, 2026 | 9 minutes

I've been using a Raspberry Pi as a wall-mounted Home Assistant dashboard in my home for a while now. The goal is simple: plug it in and have it boot directly into a full-screen browser showing my dashboard. No desktop, no mouse cursor, no login prompts.

This post walks through how to set up a Raspberry Pi as a dedicated kiosk display that launches automatically on boot. I'll cover both a basic setup for getting started quickly and a more robust systemd-based approach for something you can mount on a wall and forget about.

If you've followed older tutorials and found that they no longer work, you're not alone. Raspberry Pi OS has changed significantly in recent versions, and many of the old methods for setting up kiosk mode are now outdated.

Why Old Kiosk Tutorials Don't Work Anymore

If you've come across tutorials that tell you to edit this file /etc/xdg/lxsession/LXDE-pi/autostart and found that it doesn't exist on your system, it's because Raspberry Pi OS (Bookworm and later) no longer uses LXDE as its desktop environment. Here's what changed:

  • LXDE has been replaced: Current versions of Raspberry Pi OS use Wayland-based compositors instead of the LXDE desktop
  • Autostart works differently: The old lxsession autostart method no longer applies
  • Chromium package name changed: The browser package was renamed in newer releases

The good news is that setting up kiosk mode still works, but it just requires a different approach.

What You'll Need

  • Raspberry Pi (3, 4, or 5)
  • Raspberry Pi OS with desktop installed
  • A display connected to the Pi (I love my SunFounder 10.1" touchscreen)
  • The URL for your Home Assistant dashboard (or whatever page you want to display)
  • SSH access to the Pi (see my post on enabling SSH on a Raspberry Pi if you need help with this)

Basic Setup: Getting Your Dashboard Running

This section covers the simplest approach to get a kiosk display working. If you want something more robust that will recover from crashes and run as a proper system service, skip ahead to the Advanced Setup section.

Step 1: Install Required Packages

First, connect to your Raspberry Pi via SSH and install Chromium along with a couple of helper utilities:

1sudo apt update
2sudo apt install -y chromium unclutter xdotool

Here's what each package does:

  • chromium: The web browser that will display your dashboard
  • unclutter: Hides the mouse cursor after a period of inactivity, which keeps the display looking clean
  • xdotool: A utility for simulating keyboard and mouse input, which we'll use to dismiss any browser pop-ups

Step 2: Create the Kiosk Script

Next, create a folder for your kiosk files and a script that will launch the browser:

1mkdir -p /home/pi/kiosk
2nano /home/pi/kiosk/start.sh

Add the following to the script:

1#!/bin/bash
2
3# Wait for the desktop environment to fully load
4sleep 15
5
6# Hide the mouse cursor when it's not moving
7unclutter -idle 0.5 -root &
8
9# Dismiss any Chromium crash recovery dialogs
10# This handles the "Chromium didn't shut down correctly" message
11xdotool search --sync --onlyvisible --class "chromium" windowactivate --sync key Return &
12
13# Launch Chromium in kiosk mode
14# --kiosk: Runs in full-screen kiosk mode
15# --noerrdialogs: Suppresses error dialogs
16# --disable-infobars: Hides the "Chrome is being controlled" bar
17# --check-for-update-interval=31536000: Disables update checks (1 year in seconds)
18/usr/bin/chromium \
19    --kiosk \
20    --noerrdialogs \
21    --disable-infobars \
22    --check-for-update-interval=31536000 \
23    http://homeassistant.local:8123

Replace http://homeassistant.local:8123 with the URL of your Home Assistant dashboard or whatever page you want to display. Note: this post assumes that Home Assistant is running on another computer on the same network if you are displaying a Home Assistant dashboard.

The sleep 15 at the beginning gives the desktop environment time to fully initialize before launching the browser. You may need to adjust this value depending on your Pi's speed—if Chromium launches before the desktop is ready, it may not display correctly. This was enough for my Raspberry Pi 4 Model B.

Make the script executable:

1chmod +x /home/pi/kiosk/start.sh

Step 3: Set Up Autostart

Modern Raspberry Pi OS uses the XDG autostart specification for launching applications when the desktop loads. Create an autostart entry for the kiosk script:

1mkdir -p ~/.config/autostart
2nano ~/.config/autostart/kiosk.desktop

Add the following content:

1[Desktop Entry]
2Type=Application
3Name=Home Assistant Kiosk
4Comment=Launch Home Assistant dashboard in kiosk mode
5Exec=/home/pi/kiosk/start.sh
6Terminal=false

The fields in this file tell the desktop environment:

  • Type: This is an application (as opposed to a link or directory)
  • Name: A human-readable name for the entry
  • Comment: A description of what it does
  • Exec: The script to run
  • Terminal: Whether to run in a terminal window (we don't need one)

Reboot your Pi to test the setup:

1sudo reboot

After rebooting, your Pi should automatically launch Chromium in full-screen mode and display your dashboard.

Advanced Setup: systemd Service

The basic autostart method works, but it has some limitations. If Chromium crashes, it won't automatically restart. The browser also runs under your user session, which means it won't start until you log in (unless you've configured auto-login).

For a more reliable setup, you can run the kiosk as a systemd user service. This approach offers several advantages:

  • Automatic restart: systemd will restart the browser if it crashes
  • Consistent environment: The service runs with a predictable set of environment variables
  • Better logging: You can use journalctl to view logs and troubleshoot issues

Step 1: Create an Enhanced Kiosk Script

Create a new script that's designed to work with systemd:

1nano /home/pi/kiosk/kiosk-systemd.sh

Add the following:

1#!/bin/bash
2
3# Set display environment variable for Wayland
4export DISPLAY=:0
5
6# Wait for the display server to be ready
7while ! xdotool getactivewindow > /dev/null 2>&1; do
8    sleep 1
9done
10
11# Give the desktop a moment to stabilize
12sleep 5
13
14# Hide the mouse cursor
15unclutter -idle 0.5 -root &
16
17# Dismiss any crash dialogs
18xdotool search --sync --onlyvisible --class "chromium" windowactivate --sync key Return &
19
20# Launch Chromium in kiosk mode
21exec /usr/bin/chromium \
22    --kiosk \
23    --noerrdialogs \
24    --disable-infobars \
25    --disable-session-crashed-bubble \
26    --disable-component-update \
27    --check-for-update-interval=31536000 \
28    http://homeassistant.local:8123

This script is similar to the basic version but includes a few improvements:

  • Display detection loop: Instead of a fixed sleep, it waits until the display server is actually ready
  • exec command: Replaces the shell process with Chromium, which makes systemd's process tracking work correctly
  • Additional Chromium flags: --disable-session-crashed-bubble prevents the "restore session" prompt, and --disable-component-update stops background component updates

Make the script executable:

1chmod +x /home/pi/kiosk/kiosk-systemd.sh

Step 2: Create the systemd Service File

Create a user-level systemd service:

1mkdir -p ~/.config/systemd/user
2nano ~/.config/systemd/user/kiosk.service

Add the following configuration:

1[Unit]
2Description=Home Assistant Kiosk Display
3After=graphical-session.target
4
5[Service]
6Type=simple
7ExecStart=/home/pi/kiosk/kiosk-systemd.sh
8Restart=on-failure
9RestartSec=10
10Environment=DISPLAY=:0
11
12[Install]
13WantedBy=default.target

Here's what each section does:

  • [Unit]: Describes the service and its dependencies
    • After=graphical-session.target: Ensures the desktop is ready before starting
  • [Service]: Defines how the service runs
    • Type=simple: The service is considered started as soon as the script runs
    • ExecStart: The script to execute
    • Restart=on-failure: Automatically restart if Chromium crashes
    • RestartSec=10: Wait 10 seconds before restarting (prevents rapid restart loops)
    • Environment=DISPLAY=:0: Sets the display variable so Chromium knows where to render
  • [Install]: Controls when the service starts
    • WantedBy=default.target: Start when the user session begins

Step 3: Enable and Start the Service

If you created the basic autostart entry earlier, remove it to avoid running two instances:

1rm ~/.config/autostart/kiosk.desktop

Enable the systemd service so it starts automatically:

1systemctl --user daemon-reload
2systemctl --user enable kiosk.service
3systemctl --user start kiosk.service

You can check the status of the service with:

1systemctl --user status kiosk.service

And view logs with:

1journalctl --user -u kiosk.service -f

Escaping Kiosk Mode

At some point, you'll need to get out of kiosk mode to make changes or shut down the Pi safely. Here are a few options, from simplest to most flexible.

Keyboard Shortcuts

If you have a keyboard connected to the Pi:

  • Alt + F4: Close Chromium
  • Ctrl + W: Close the current browser window

Virtual Console

You can switch to a text console without exiting the graphical session:

  1. Press Ctrl + Alt + F2 to switch to a virtual terminal
  2. Log in with your username and password
  3. Run any commands you need, such as sudo poweroff to shut down

Press Ctrl + Alt + F1 to switch back to the graphical session.

SSH Access

This is the most convenient option for ongoing management. From another computer:

1ssh pi@<your-pi-ip-address>

Once connected, you can stop the kiosk service, make changes, or shut down:

1# Stop the kiosk (if using systemd)
2systemctl --user stop kiosk.service
3
4# Shut down the Pi
5sudo poweroff

If you haven't already set up SSH on your Pi, see my post on enabling SSH.

Preventing Screen Blanking

By default, Raspberry Pi OS will blank the screen after a period of inactivity. To prevent this on a kiosk display, you can disable screen blanking through the Raspberry Pi configuration tool:

1sudo raspi-config

Navigate to Display OptionsScreen Blanking and select No.

If you're running Raspberry Pi OS Bookworm with the Wayfire compositor (the default for Wayland), you can also configure screen blanking by editing the Wayfire config file:

1nano ~/.config/wayfire.ini

Look for the [idle] section and set the timeout values to disable blanking:

1[idle]
2dpms_timeout=0
3screensaver_timeout=0

Setting these to 0 disables the idle timeout entirely, keeping your display on indefinitely.

Final Thoughts

Once you have the kiosk running reliably, you'll probably want to refine a few things. Consider adding a way to remotely trigger a browser refresh if you update your dashboard, or setting up a scheduled reboot to clear any memory leaks that might accumulate over time.

For ongoing maintenance, SSH access is essential. With SSH enabled, you can update scripts, check logs, and reboot safely without needing physical access to the Pi. If you're building a kiosk that will run Node.js applications alongside the browser, you might also want to look at using PM2 to automatically start applications on boot.