From d4733ee96b3f4da0b1b1937003289bb34beca21e Mon Sep 17 00:00:00 2001 From: Corey Smith Date: Sun, 20 Jul 2025 19:29:39 -0700 Subject: [PATCH] Initial setup script --- kiosk.sh | 120 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 43 deletions(-) diff --git a/kiosk.sh b/kiosk.sh index 6ab4f7e..1b0e1bc 100644 --- a/kiosk.sh +++ b/kiosk.sh @@ -1,60 +1,94 @@ #!/bin/sh +set -e -if [ -z "$1" ]; then - echo "Enter kiosk URL (e.g., https://dashboard.company.com):" - read -r KIOSK_URL -else - KIOSK_URL="$1" -fi +echo "Setting up Kiosk..." -echo "Setting up Alpine Linux Kiosk..." -echo "Kiosk URL: $KIOSK_URL" +cat > /etc/apk/repositories << 'EOF' +http://mirror.fcix.net/alpine/v3.22/main +http://mirror.fcix.net/alpine/v3.22/community +EOF -if ! grep -q "community" /etc/apk/repositories; then - echo "http://dl-cdn.alpinelinux.org/alpine/v3.22/community" >> /etc/apk/repositories - apk update -fi +apk update && apk upgrade -echo "Installing kiosk packages..." -apk add chromium xorg-server xinit openbox font-noto xf86-input-libinput mesa-dri-gallium +# Install packages +apk add \ + mesa-dri-gallium mesa-egl mesa-gl mesa-gles \ + xorg-server xf86-video-fbdev xf86-input-libinput \ + dbus setxkbmap kbd xrandr xset xinit chromium -echo "Creating .xinitrc for kiosk mode" -cat > /root/.xinitrc << EOF +# Configure boot with custom config.txt and cmdline.txt (usercfg.txt is used becuase config.txt get's overwritten on updates) +cat > /boot/usercfg.txt << 'EOF' +camera_auto_detect=0 +disable_overscan=1 +dtoverlay=vc4-kms-v3d +gpu_mem=128 +hdmi_force_hotplug=1 +hdmi_group=2 +hdmi_mode=82 +config_hdmi_boost=4 +boot_delay=0 +disable_splash=1 +EOF + +echo "root=UUID=$(findmnt -no UUID /) modules=sd-mod,usb-storage,ext4 rootfstype=ext4 console=tty3 loglevel=0 vt.global_cursor_default=0" > /boot/cmdline.txt + +# Remove unnecessary services +for service in acpid chronyd crond modules seedrng; do + rc-update del $service 2>/dev/null || true +done + +# Create kiosk user +adduser -D -h /srv/kiosk -s /bin/ash kiosk + +# Setup kiosk profile +cat > /srv/kiosk/.profile << 'EOF' #!/bin/sh +if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then + exec startx >/dev/null 2>&1 +fi +EOF -xset -dpms -xset s off -xset s noblank +# Setup xinitrc +cat > /srv/kiosk/.xinitrc << 'EOF' +#!/bin/sh +export DISPLAY=:0 +(sleep 2 && xset -dpms s off s noblank) & -mkdir -p /root/.config/chromium/Default -sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /root/.config/chromium/Default/Preferences 2>/dev/null || true -sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /root/.config/chromium/Default/Preferences 2>/dev/null || true +while ! ping -c 1 -W 1 google.com > /dev/null 2>&1; do + sleep 2 +done while true; do - /usr/bin/chromium-browser $KIOSK_URL --window-size=1920,1080 --window-position=0,0 --start-fullscreen --kiosk --incognito --noerrdialogs --disable-translate --no-first-run --fast --fast-start --disable-infobars --disable-features=TranslateUI --enable-features=OverlayScrollbars --disk-cache-dir=/dev/null --overscroll-history-navigation=0 --disable-pinch --no-sandbox --disable-dev-shm-usage --disable-sync --disable-signin-frame-redirect - echo "Browser crashed, restarting in 5 seconds..." + chromium \ + --kiosk \ + --no-sandbox \ + --disable-dev-shm-usage \ + --force-device-scale-factor=1 \ + --window-size=3840,2160 \ + --disable-features=TranslateUI \ + --disable-component-update \ + --no-first-run \ + --num-raster-threads=4 \ + --use-gl=egl \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-breakpad \ + --disable-sync \ + --disable-translate \ + --metrics-recording-only \ + --disable-default-apps \ + --mute-audio \ + --no-default-browser-check \ + ${KIOSK_URL:-https://benewahauto.com} sleep 5 done EOF -chmod +x /root/.xinitrc +chown -R kiosk:kiosk /srv/kiosk +chmod +x /srv/kiosk/.profile /srv/kiosk/.xinitrc -echo "Setting up auto-start X11 on boot" -cat > /root/.profile << 'EOF' -if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then - exec startx -fi -EOF - -if ! grep -q "getty -n -l /bin/sh" /etc/inittab; then - sed -i 's/^tty1:/#&/' /etc/inittab - echo 'tty1::respawn:/sbin/getty -n -l /bin/sh 38400 tty1' >> /etc/inittab -fi - -echo "kiosk" > /etc/hostname - -echo "" -echo "Kiosk setup complete!" -echo "URL configured: $KIOSK_URL" -echo "Reboot to start kiosk mode: reboot" +# Configure autologin +sed -i 's/^tty1::respawn:.*$/tty1::respawn:\/bin\/login -f kiosk/' /etc/inittab +echo "Setup complete! Rebooting..." +reboot