#!/bin/bash LOG_FILE="/userdata/emcp/data/browser-autostart.log" mkdir -p /userdata/emcp/data exec >>"$LOG_FILE" 2>&1 echo "==== $(date '+%F %T') start-emcp-browser ====" echo "USER=$(whoami)" echo "DISPLAY=${DISPLAY:-}" echo "XDG_SESSION_TYPE=${XDG_SESSION_TYPE:-}" echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS:-}" URL="${EMCP_BROWSER_URL:-http://127.0.0.1:5173/}" BACKEND_HEALTH_URL="${EMCP_BACKEND_HEALTH_URL:-http://127.0.0.1:8000/}" FRONTEND_HEALTH_URL="${EMCP_FRONTEND_HEALTH_URL:-$URL}" BROWSER_PROFILE_DIR="${EMCP_BROWSER_PROFILE_DIR:-/userdata/emcp/data/browser-profile}" WAIT_TIMEOUT_SECONDS="${EMCP_BROWSER_WAIT_TIMEOUT:-60}" WAIT_INTERVAL_SECONDS="${EMCP_BROWSER_WAIT_INTERVAL:-2}" mkdir -p "$BROWSER_PROFILE_DIR" # 设备仅使用 chromium。找不到 chromium 时直接退出,不再尝试其他浏览器。 # 避免使用 --kiosk,降低嵌入式设备启动后卡死风险。 # 独立 profile 可避免浏览器复用旧窗口,导致 fullscreen 参数失效。 # 禁用系统密钥环集成,避免自动登录桌面后启动浏览器时弹出密码解锁提示。 if ! command -v chromium >/dev/null 2>&1; then exit 1 fi wait_for_url() { local target_url="$1" local elapsed=0 while [ "$elapsed" -lt "$WAIT_TIMEOUT_SECONDS" ]; do if python3 - "$target_url" <<'PY' import sys import urllib.request url = sys.argv[1] try: with urllib.request.urlopen(url, timeout=3) as response: sys.exit(0 if response.status < 500 else 1) except Exception: sys.exit(1) PY then return 0 fi sleep "$WAIT_INTERVAL_SECONDS" elapsed=$((elapsed + WAIT_INTERVAL_SECONDS)) done return 1 } if ! wait_for_url "$BACKEND_HEALTH_URL"; then exit 1 fi if ! wait_for_url "$FRONTEND_HEALTH_URL"; then exit 1 fi chromium \ --new-window \ --start-fullscreen \ --start-maximized \ --no-first-run \ --no-default-browser-check \ --password-store=basic \ --use-mock-keychain \ --disable-session-crashed-bubble \ --disable-infobars \ --disk-cache-size=10485760 \ --user-data-dir="$BROWSER_PROFILE_DIR/chromium" \ "$URL" >/dev/null 2>&1 &