Initial commit: Electron + React touchscreen kiosk dashboard for Home Assistant
This commit is contained in:
136
scripts/deploy-linux.sh
Executable file
136
scripts/deploy-linux.sh
Executable file
@@ -0,0 +1,136 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Imperial Command Center - Linux Deployment Script
|
||||
# This script builds and deploys the kiosk application
|
||||
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
APP_NAME="imperial-command-center"
|
||||
INSTALL_DIR="/opt/${APP_NAME}"
|
||||
SERVICE_NAME="${APP_NAME}"
|
||||
KIOSK_USER="kiosk"
|
||||
|
||||
echo "========================================="
|
||||
echo "Imperial Command Center - Linux Deployer"
|
||||
echo "========================================="
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root (sudo)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build the application
|
||||
echo ""
|
||||
echo "[1/6] Building application..."
|
||||
npm run build:linux
|
||||
|
||||
# Find the AppImage
|
||||
APPIMAGE=$(find release -name "*.AppImage" -type f | head -n 1)
|
||||
if [ -z "$APPIMAGE" ]; then
|
||||
echo "Error: AppImage not found in release directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found AppImage: $APPIMAGE"
|
||||
|
||||
# Create installation directory
|
||||
echo ""
|
||||
echo "[2/6] Installing to ${INSTALL_DIR}..."
|
||||
mkdir -p "${INSTALL_DIR}"
|
||||
cp "$APPIMAGE" "${INSTALL_DIR}/${APP_NAME}.AppImage"
|
||||
chmod +x "${INSTALL_DIR}/${APP_NAME}.AppImage"
|
||||
|
||||
# Copy environment file if it exists
|
||||
if [ -f ".env" ]; then
|
||||
cp .env "${INSTALL_DIR}/.env"
|
||||
echo "Copied .env file"
|
||||
fi
|
||||
|
||||
# Create kiosk user if it doesn't exist
|
||||
echo ""
|
||||
echo "[3/6] Setting up kiosk user..."
|
||||
if ! id "${KIOSK_USER}" &>/dev/null; then
|
||||
useradd -m -s /bin/bash "${KIOSK_USER}"
|
||||
echo "Created user: ${KIOSK_USER}"
|
||||
else
|
||||
echo "User ${KIOSK_USER} already exists"
|
||||
fi
|
||||
|
||||
# Set permissions
|
||||
chown -R "${KIOSK_USER}:${KIOSK_USER}" "${INSTALL_DIR}"
|
||||
|
||||
# Create systemd service
|
||||
echo ""
|
||||
echo "[4/6] Creating systemd service..."
|
||||
cat > "/etc/systemd/system/${SERVICE_NAME}.service" << EOF
|
||||
[Unit]
|
||||
Description=Imperial Command Center Kiosk
|
||||
After=graphical.target network.target
|
||||
Wants=graphical.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=${KIOSK_USER}
|
||||
Environment=DISPLAY=:0
|
||||
Environment=XAUTHORITY=/home/${KIOSK_USER}/.Xauthority
|
||||
WorkingDirectory=${INSTALL_DIR}
|
||||
ExecStart=${INSTALL_DIR}/${APP_NAME}.AppImage --no-sandbox
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
||||
EOF
|
||||
|
||||
# Create X session script for autologin
|
||||
echo ""
|
||||
echo "[5/6] Configuring kiosk session..."
|
||||
mkdir -p /home/${KIOSK_USER}/.config/autostart
|
||||
|
||||
cat > "/home/${KIOSK_USER}/.xinitrc" << EOF
|
||||
#!/bin/bash
|
||||
# Disable screen blanking
|
||||
xset s off
|
||||
xset -dpms
|
||||
xset s noblank
|
||||
|
||||
# Hide cursor after 5 seconds of inactivity
|
||||
unclutter -idle 5 &
|
||||
|
||||
# Start the application
|
||||
exec ${INSTALL_DIR}/${APP_NAME}.AppImage --no-sandbox
|
||||
EOF
|
||||
|
||||
chmod +x "/home/${KIOSK_USER}/.xinitrc"
|
||||
chown "${KIOSK_USER}:${KIOSK_USER}" "/home/${KIOSK_USER}/.xinitrc"
|
||||
|
||||
# Enable and start the service
|
||||
echo ""
|
||||
echo "[6/6] Enabling service..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable "${SERVICE_NAME}.service"
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo "Deployment complete!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "The application has been installed to: ${INSTALL_DIR}"
|
||||
echo ""
|
||||
echo "To start the application manually:"
|
||||
echo " sudo systemctl start ${SERVICE_NAME}"
|
||||
echo ""
|
||||
echo "To view logs:"
|
||||
echo " sudo journalctl -u ${SERVICE_NAME} -f"
|
||||
echo ""
|
||||
echo "To configure autologin for kiosk mode, edit:"
|
||||
echo " /etc/lightdm/lightdm.conf (for LightDM)"
|
||||
echo " or /etc/gdm3/custom.conf (for GDM)"
|
||||
echo ""
|
||||
echo "Add these lines for LightDM autologin:"
|
||||
echo " [Seat:*]"
|
||||
echo " autologin-user=${KIOSK_USER}"
|
||||
echo " autologin-session=openbox"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user