Turns a Debian-based system into a Chromium kiosk. The URL is stored in /etc/kiosk/kiosk.conf and can be changed later without re-running setup.
- Installs LXDE, Chromium, LightDM, SSH, and related packages
- LightDM autologin into LXDE for the kiosk user
- Single config file:
/etc/kiosk/kiosk.conf - Change URL anytime:
sudo update-kiosk-url <url> - Chromium starts from LXDE autostart via
kiosk-chromium.sh - User
kiosk.serviceused for URL restarts when the session is active - Disables keyboard and mouse via udev rules after reboot
- Logging:
/var/log/kiosk-setup.logandjournalctl -t kiosk-chromium
This script disables keyboard and mouse access after reboot.
Use SSH as an admin user (with sudo) for maintenance — not thekioskaccount.
- Debian (or Debian-based)
- An admin user with sudo (or root) to run setup
- A kiosk user for the graphical session (no sudo)
- Internet access during setup
Create accounts before setup:
sudo adduser admin
sudo usermod -aG sudo admin
sudo adduser kiosk-
Clone the repository:
git clone git@gitlab.corp.vancouveronthenet.com:quality/kiosk-setup.git cd kiosk-setup -
Make the script executable:
chmod +x kiosk-setup.sh
-
Run as admin (not as
kiosk):sudo ./kiosk-setup.sh
-
Follow the prompts:
- Kiosk session username → enter
kiosk - Config → uses existing
/etc/kiosk/kiosk.conf, or generate a new URL
- Kiosk session username → enter
-
During
aptinstall, if asked for a display manager, select lightdm (not gdm3). -
Reboot when prompted (required for kiosk display and input lockdown):
sudo reboot
The kiosk URL lives in /etc/kiosk/kiosk.conf:
KIOSK_URL=https://example.com/kioskExample file in the repo: config/kiosk.conf.example
Change URL after setup (no git pull needed):
sudo update-kiosk-url https://example.com/kioskUse an admin account:
ssh admin@<device-ip>
sudo journalctl -t kiosk-chromium -f
hostname -IRepository:
kiosk-setup/
├── kiosk-setup.sh
├── config/
│ └── kiosk.conf.example
├── scripts/
│ ├── kiosk-chromium.sh
│ └── update-kiosk-url
├── .gitignore
└── README.mdInstalled on the host:
| Path | Purpose |
|---|---|
/etc/kiosk/kiosk.conf |
KIOSK_URL=... |
/usr/local/bin/kiosk-chromium.sh |
Reads config, launches Chromium |
/usr/local/bin/update-kiosk-url |
Updates config, restarts browser |
/etc/systemd/user/kiosk.service |
User unit for URL restarts |
/etc/udev/rules.d/99-disable-input.rules |
Keyboard/mouse lockdown after reboot |
~kiosk/.local/share/kiosk-chromium/ |
Dedicated Chromium profile (survives hostname changes) |
~kiosk/.config/lxsession/LXDE/autostart |
X session + Chromium autostart |
Black screen — Chromium did not start. Check autostart includes kiosk-chromium.sh, then:
sudo journalctl -b -t kiosk-chromium -n 50
pgrep -a chromium
sudo -u kiosk DISPLAY=:0 XAUTHORITY=/home/kiosk/.Xauthority /usr/local/bin/kiosk-chromium.shIf you see profile appears to be in use by another Chromium process, that is usually a stale lock after a hostname change or crash. Current kiosk-chromium.sh clears those automatically on boot; re-run setup to install it:
sudo ./kiosk-setup.sh
sudo rebootManual clear (older installs only):
sudo -u kiosk rm -f /home/kiosk/.config/chromium/Singleton* \
/home/kiosk/.local/share/kiosk-chromium/Singleton*
sudo -u kiosk DISPLAY=:0 XAUTHORITY=/home/kiosk/.Xauthority /usr/local/bin/kiosk-chromium.shKeyring popup — re-run setup to install the latest kiosk-chromium.sh (uses --password-store=basic).
GNOME bar or dock — wrong session. Re-run setup (forces LXDE autologin).