41 lines
1.8 KiB
Bash
Executable File
41 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# Points the kiosk Firefox window at the admin canvas URL. Installed to
|
|
# /usr/local/bin/admin-browser. Called by thinclient-agent (admin_canvas.py) when a
|
|
# "Show admin canvas" command arrives (docs/project-plan.md Phase 13).
|
|
#
|
|
# A near-copy of /usr/local/bin/digest-browser: same navigate-by-restart approach
|
|
# (Firefox's --kiosk window has no tab/address bar, and the page is stateless anyway),
|
|
# same reasoning for a --kiosk (not --new-window) launch. The one thing that matters is
|
|
# its own profile, separate from digest-browser's and web-browser's — a Firefox profile
|
|
# can only be open in one process, so sharing one would mean opening this window closed
|
|
# the digest canvas, and the pkill/pgrep patterns below are scoped to THIS profile only,
|
|
# so relaunching this window can never kill (or race against) digest-browser's — see the
|
|
# comment above digest-browser's own pkill line for the other half of that guarantee.
|
|
set -eu
|
|
|
|
PROFILE_DIR="${HOME:-/home/$(id -un)}/.mozilla/firefox/admin"
|
|
|
|
URL="${1:-${ADMIN_WEB_URL:-}}"
|
|
[ -n "$URL" ] || { echo "admin-browser: no URL given and ADMIN_WEB_URL is unset" >&2; exit 1; }
|
|
|
|
if command -v firefox-esr >/dev/null 2>&1; then
|
|
FIREFOX=firefox-esr
|
|
else
|
|
FIREFOX=firefox
|
|
fi
|
|
|
|
mkdir -p "$PROFILE_DIR/chrome"
|
|
cp /etc/thinclient-firefox/userChrome.css "$PROFILE_DIR/chrome/userChrome.css" 2>/dev/null || true
|
|
cp /etc/thinclient-firefox/user.js "$PROFILE_DIR/user.js" 2>/dev/null || true
|
|
|
|
pkill -u "$(id -u)" -f "$FIREFOX .*--profile $PROFILE_DIR" 2>/dev/null || true
|
|
|
|
# Wait for the old process to release its profile lock before relaunching.
|
|
i=0
|
|
while pgrep -u "$(id -u)" -f "$FIREFOX .*--profile $PROFILE_DIR" >/dev/null 2>&1 && [ "$i" -lt 20 ]; do
|
|
sleep 0.25
|
|
i=$((i + 1))
|
|
done
|
|
|
|
exec "$FIREFOX" --profile "$PROFILE_DIR" --new-instance --kiosk "$URL"
|