Here’s a clear, detailed, step-by-step explanation of Raspberry Pi Kiosk Mode — what it is, how it works, and how to set it up for different use cases (browser kiosk, local app kiosk, fullscreen dashboard, etc.). --ChatGPT
Kiosk Mode makes a Raspberry Pi boot straight into a single application (usually a full-screen web browser) with:
- No desktop
- No taskbar
- No window controls
- No mouse pointer (optional)
- Locked-down user access
This is commonly used for:
- Digital signage
- Dashboard displays (Grafana, Home Assistant, OctoPrint, etc.)
- Public terminals
- Wall-mounted monitors
- Touchscreen interfaces
There are three common ways to run kiosk mode:
Boots directly into a full-screen webpage.
sudo apt update
sudo apt install chromium-browser x11-xserver-utils uncluttermkdir -p ~/.config/lxsession/LXDE-pi
nano ~/.config/lxsession/LXDE-pi/autostart@xset s off
@xset -dpms
@xset s noblank
@unclutter -idle 0.1 -root # hides mouse cursor after 0.1s
@chromium-browser --noerrdialogs --disable-infobars --kiosk https://your-page-here.com
Replace URL with your dashboard or local HTML.
sudo rebootThis method avoids the entire LXDE desktop → faster, cleaner, more secure.
sudo apt install xserver-xorg x11-xserver-utils xinit openbox chromium-browsermkdir -p ~/.config/openbox
nano ~/.config/openbox/autostartAdd:
xset s off
xset -dpms
xset s noblank
chromium-browser --kiosk --noerrdialogs --disable-infobars http://your-url
sudo nano /etc/systemd/system/kiosk.servicePaste:
[Unit]
Description=Kiosk Mode
After=network-online.target
[Service]
User=pi
Environment=XAUTHORITY=/home/pi/.Xauthority
Environment=DISPLAY=:0
ExecStart=/usr/bin/startx /usr/bin/openbox-session
[Install]
WantedBy=multi-user.target
Enable it:
sudo systemctl enable kiosk.service
sudo rebootThis boots directly into the kiosk—no desktop UI ever loads.
You can launch Python Tkinter, PyQt, SDL, Electron, or any compiled GUI app.
Example systemd service to launch a Python UI:
sudo nano /etc/systemd/system/myapp.service[Unit]
After=graphical.target
[Service]
User=pi
Environment=DISPLAY=:0
ExecStart=/usr/bin/python3 /home/pi/myapp/main.py
Restart=always
[Install]
WantedBy=graphical.target
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--restore-last-sessionsudo apt install xscreensaver
sudo systemctl disable xscreensaverEdit:
sudo nano /boot/config.txtAdd:
display_lcd_rotate=1
# or
display_hdmi_rotate=1
Values: 0 = normal 1 = 90° 2 = 180° 3 = 270°
rm -rf ~/.config/chromium/Default/{Cache,Cookies}sudo systemctl mask [email protected]Add Chromium flags:
--test-type
--disable-pinch
--overscroll-history-navigation=0
--disable-notifications
| Problem | Fix |
|---|---|
| Black screen after boot | xset -dpms & remove screensaver |
| Chromium won’t start | Check autostart path; usernames differ |
| Mouse cursor still showing | Install & run unclutter |
| Webpage not loading | Add After=network-online.target in systemd service |
| Kiosk doesn’t run on boot | Make sure you enabled service: systemctl enable kiosk.service |
If you'd like, I can give you a paste-and-run script that automatically:
- Installs all packages
- Creates autostart
- Adds URL
- Optimizes performance
- Locks down system
- Reboots into kiosk
Just tell me:
- Browser kiosk or local app kiosk?
- The URL or app path you want to run.
I can also tailor it for:
- Pi 3 / 4 / 5
- 7-inch touchscreen
- Vertical monitor
- Read-only SD card mode