Via tailscale:
ssh squash@skdisplay0
Start with Raspberry Pi OS Lite (no desktop) for better performance:
sudo apt update && sudo apt upgrade -y
sudo apt install -y chromium-browser xorg xinit x11-xserver-utils unclutter
Edit the getty service to auto-login:
sudo systemctl edit getty@tty1
Add this content (assumes user is squash):
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin squash --noclear %I $TERM
Create the main kiosk script:
nano ~/kiosk.sh
Add this content (replace YOUR_URL with your webpage):
#!/bin/bash
# Disable screen blanking and power management
xset s noblank
xset s off
xset -dpms
# Hide cursor after 1 second of inactivity
unclutter -idle 1 &
# force display resolution
xrandr --output HDMI-1 --mode 1920x1080 --rate 60
# Start Chromium in kiosk mode
chromium-browser \
--window-size=1920,1080 \
--window-position=0,0 \
--noerrdialogs \
--disable-infobars \
--disable-features=TranslateUI \
--disable-extensions \
--disable-plugins \
--disable-web-security \
--disable-features=VizDisplayCompositor \
--start-fullscreen \
--kiosk \
--incognito \
--no-first-run \
--fast \
--fast-start \
--disable-default-apps \
--disable-translate \
--disable-background-timer-throttling \
--disable-renderer-backgrounding \
--disable-backgrounding-occluded-windows \
--disable-component-extensions-with-background-pages \
--autoplay-policy=no-user-gesture-required \
"https://squash.kiwi/court/otog"
Make it executable:
chmod +x ~/kiosk.sh
Edit the .bashrc file:
nano ~/.bashrc
Add this at the end:
# Auto-start X server and kiosk on login
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
exec startx ~/kiosk.sh
fi
Disable automatic updates:
sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily-upgrade.service
See GPU memory:
vcgencmd get_mem arm && vcgencmd get_mem gpu
Allocate more memory to GPU for better browser performance:
sudo nano /boot/firmware/config.txt
Add this line:
gpu_mem=256
Create a systemd service to prevent HDMI from sleeping:
sudo nano /etc/systemd/system/hdmi-keep-alive.service
Add:
[Unit]
Description=Keep HDMI active
After=graphical.target
[Service]
Type=simple
ExecStart=/usr/bin/tvservice -p
ExecStartPost=/bin/sleep 1
ExecStartPost=/usr/bin/fbset -depth 8
ExecStartPost=/usr/bin/fbset -depth 16
Restart=always
RestartSec=10
[Install]
WantedBy=graphical.target
Enable the service:
sudo systemctl enable hdmi-keep-alive.service
Create a watchdog script to restart Chromium if it crashes:
nano ~/watchdog.sh
Add:
#!/bin/bash
while true; do
if ! pgrep chromium > /dev/null; then
echo "Chromium not running, restarting..."
DISPLAY=:0 ~/kiosk.sh &
fi
sleep 30
done
Make it executable and add to startup:
chmod +x ~/watchdog.sh
Add to .bashrc after the startx line:
# Start watchdog in background
~/watchdog.sh &
~/kiosk.sh and replace YOUR_URL_HERE with your webpagesudo rebootps aux | grep X~/.config/chromium/xset qchromium-browser YOUR_URL