emcp/scripts/start-emcp-browser.sh

77 lines
2.1 KiB
Bash
Raw Normal View History

2026-05-26 16:13:35 +08:00
#!/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 &