77 lines
2.1 KiB
Bash
77 lines
2.1 KiB
Bash
#!/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 &
|