attempt to add squash stuff. Tailscale works!
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 34s
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 34s
This commit is contained in:
180
squashdisplay/scripts/setup-host.sh
Executable file
180
squashdisplay/scripts/setup-host.sh
Executable file
@@ -0,0 +1,180 @@
|
||||
#!/bin/sh
|
||||
# Host setup script - runs inside privileged container to configure the host
|
||||
|
||||
set -e
|
||||
|
||||
echo "Starting Squash Display kiosk setup..."
|
||||
|
||||
# Function to run commands on the host
|
||||
host_exec() {
|
||||
nsenter -t 1 -m -u -i -n -p -- "$@"
|
||||
}
|
||||
|
||||
# Install required packages
|
||||
echo "Installing required packages..."
|
||||
host_exec apt-get update
|
||||
host_exec apt-get install -y chromium-browser xorg xinit x11-xserver-utils unclutter || \
|
||||
host_exec apt-get install -y chromium xorg xinit x11-xserver-utils unclutter
|
||||
|
||||
# Create kiosk user if it doesn't exist
|
||||
if ! host_exec id -u ${KIOSK_USER} >/dev/null 2>&1; then
|
||||
echo "Creating user ${KIOSK_USER}..."
|
||||
host_exec useradd -m -s /bin/bash ${KIOSK_USER}
|
||||
host_exec usermod -aG video,audio ${KIOSK_USER}
|
||||
fi
|
||||
|
||||
# Setup auto-login if enabled
|
||||
if [ "${ENABLE_AUTO_LOGIN}" = "true" ]; then
|
||||
echo "Configuring auto-login for ${KIOSK_USER}..."
|
||||
|
||||
# Create systemd override for getty@tty1
|
||||
host_exec mkdir -p /etc/systemd/system/getty@tty1.service.d
|
||||
cat <<EOF | host_exec tee /etc/systemd/system/getty@tty1.service.d/autologin.conf
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin ${KIOSK_USER} --noclear %I \$TERM
|
||||
EOF
|
||||
host_exec systemctl daemon-reload
|
||||
fi
|
||||
|
||||
# Copy kiosk script with proper environment variables
|
||||
echo "Setting up kiosk script..."
|
||||
cat <<'EOF' | host_exec tee /home/${KIOSK_USER}/kiosk.sh
|
||||
#!/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 ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT} --rate ${DISPLAY_REFRESH} 2>/dev/null || \
|
||||
xrandr --output HDMI-2 --mode ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT} --rate ${DISPLAY_REFRESH} 2>/dev/null || \
|
||||
xrandr --output default --mode ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT} --rate ${DISPLAY_REFRESH} 2>/dev/null || true
|
||||
|
||||
# Start Chromium in kiosk mode
|
||||
chromium-browser \
|
||||
--window-size=${DISPLAY_WIDTH},${DISPLAY_HEIGHT} \
|
||||
--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 \
|
||||
"${KIOSK_URL}"
|
||||
EOF
|
||||
|
||||
# Substitute environment variables
|
||||
host_exec sed -i "s|\${DISPLAY_WIDTH}|${DISPLAY_WIDTH}|g" /home/${KIOSK_USER}/kiosk.sh
|
||||
host_exec sed -i "s|\${DISPLAY_HEIGHT}|${DISPLAY_HEIGHT}|g" /home/${KIOSK_USER}/kiosk.sh
|
||||
host_exec sed -i "s|\${DISPLAY_REFRESH}|${DISPLAY_REFRESH}|g" /home/${KIOSK_USER}/kiosk.sh
|
||||
host_exec sed -i "s|\${KIOSK_URL}|${KIOSK_URL}|g" /home/${KIOSK_USER}/kiosk.sh
|
||||
|
||||
host_exec chmod +x /home/${KIOSK_USER}/kiosk.sh
|
||||
host_exec chown ${KIOSK_USER}:${KIOSK_USER} /home/${KIOSK_USER}/kiosk.sh
|
||||
|
||||
# Setup watchdog if enabled
|
||||
if [ "${ENABLE_WATCHDOG}" = "true" ]; then
|
||||
echo "Setting up watchdog script..."
|
||||
cat <<'EOF' | host_exec tee /home/${KIOSK_USER}/watchdog.sh
|
||||
#!/bin/bash
|
||||
while true; do
|
||||
if ! pgrep chromium > /dev/null; then
|
||||
echo "$(date): Chromium not running, restarting..." >> /home/${KIOSK_USER}/watchdog.log
|
||||
DISPLAY=:0 /home/${KIOSK_USER}/kiosk.sh &
|
||||
fi
|
||||
sleep 30
|
||||
done
|
||||
EOF
|
||||
host_exec sed -i "s|\${KIOSK_USER}|${KIOSK_USER}|g" /home/${KIOSK_USER}/watchdog.sh
|
||||
host_exec chmod +x /home/${KIOSK_USER}/watchdog.sh
|
||||
host_exec chown ${KIOSK_USER}:${KIOSK_USER} /home/${KIOSK_USER}/watchdog.sh
|
||||
fi
|
||||
|
||||
# Configure .bashrc for auto-start
|
||||
echo "Configuring auto-start..."
|
||||
if ! host_exec grep -q "Auto-start X server" /home/${KIOSK_USER}/.bashrc 2>/dev/null; then
|
||||
cat <<'EOF' | host_exec tee -a /home/${KIOSK_USER}/.bashrc
|
||||
|
||||
# Auto-start X server and kiosk on login
|
||||
if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
|
||||
exec startx ~/kiosk.sh
|
||||
fi
|
||||
|
||||
# Start watchdog in background
|
||||
if [ "${ENABLE_WATCHDOG}" = "true" ]; then
|
||||
~/watchdog.sh &
|
||||
fi
|
||||
EOF
|
||||
host_exec sed -i "s|\${ENABLE_WATCHDOG}|${ENABLE_WATCHDOG}|g" /home/${KIOSK_USER}/.bashrc
|
||||
fi
|
||||
|
||||
# Disable automatic updates
|
||||
echo "Disabling automatic updates..."
|
||||
host_exec systemctl disable apt-daily.service 2>/dev/null || true
|
||||
host_exec systemctl disable apt-daily.timer 2>/dev/null || true
|
||||
host_exec systemctl disable apt-daily-upgrade.timer 2>/dev/null || true
|
||||
host_exec systemctl disable apt-daily-upgrade.service 2>/dev/null || true
|
||||
|
||||
# Configure GPU memory split (Raspberry Pi specific)
|
||||
if host_exec test -f /boot/firmware/config.txt || host_exec test -f /boot/config.txt; then
|
||||
echo "Configuring GPU memory split..."
|
||||
CONFIG_FILE="/boot/firmware/config.txt"
|
||||
host_exec test -f /boot/config.txt && CONFIG_FILE="/boot/config.txt"
|
||||
|
||||
if ! host_exec grep -q "^gpu_mem=" ${CONFIG_FILE}; then
|
||||
echo "gpu_mem=${GPU_MEM}" | host_exec tee -a ${CONFIG_FILE}
|
||||
else
|
||||
host_exec sed -i "s/^gpu_mem=.*/gpu_mem=${GPU_MEM}/" ${CONFIG_FILE}
|
||||
fi
|
||||
fi
|
||||
|
||||
# Setup HDMI keep-alive service if enabled
|
||||
if [ "${ENABLE_HDMI_KEEP_ALIVE}" = "true" ]; then
|
||||
echo "Setting up HDMI keep-alive service..."
|
||||
cat <<'EOF' | host_exec tee /etc/systemd/system/hdmi-keep-alive.service
|
||||
[Unit]
|
||||
Description=Keep HDMI active
|
||||
After=graphical.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/bin/sh -c 'while true; do tvservice -p 2>/dev/null || true; sleep 60; done'
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
||||
EOF
|
||||
host_exec systemctl daemon-reload
|
||||
host_exec systemctl enable hdmi-keep-alive.service 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo "Squash Display kiosk setup complete!"
|
||||
echo ""
|
||||
echo "Configuration:"
|
||||
echo " URL: ${KIOSK_URL}"
|
||||
echo " User: ${KIOSK_USER}"
|
||||
echo " Display: ${DISPLAY_WIDTH}x${DISPLAY_HEIGHT}@${DISPLAY_REFRESH}Hz"
|
||||
echo " Watchdog: ${ENABLE_WATCHDOG}"
|
||||
echo " Auto-login: ${ENABLE_AUTO_LOGIN}"
|
||||
echo ""
|
||||
echo "Please reboot the system for all changes to take effect."
|
Reference in New Issue
Block a user