| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| export DISPLAY=:1 |
| export HOME=/tmp/openclaw-home |
| export XDG_CONFIG_HOME="${HOME}/.config" |
| export XDG_CACHE_HOME="${HOME}/.cache" |
|
|
| CDP_PORT="${OPENCLAW_BROWSER_CDP_PORT:-${CLAWDBOT_BROWSER_CDP_PORT:-9222}}" |
| VNC_PORT="${OPENCLAW_BROWSER_VNC_PORT:-${CLAWDBOT_BROWSER_VNC_PORT:-5900}}" |
| NOVNC_PORT="${OPENCLAW_BROWSER_NOVNC_PORT:-${CLAWDBOT_BROWSER_NOVNC_PORT:-6080}}" |
| ENABLE_NOVNC="${OPENCLAW_BROWSER_ENABLE_NOVNC:-${CLAWDBOT_BROWSER_ENABLE_NOVNC:-1}}" |
| HEADLESS="${OPENCLAW_BROWSER_HEADLESS:-${CLAWDBOT_BROWSER_HEADLESS:-0}}" |
|
|
| mkdir -p "${HOME}" "${HOME}/.chrome" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" |
|
|
| Xvfb :1 -screen 0 1280x800x24 -ac -nolisten tcp & |
|
|
| if [[ "${HEADLESS}" == "1" ]]; then |
| CHROME_ARGS=( |
| "--headless=new" |
| "--disable-gpu" |
| ) |
| else |
| CHROME_ARGS=() |
| fi |
|
|
| if [[ "${CDP_PORT}" -ge 65535 ]]; then |
| CHROME_CDP_PORT="$((CDP_PORT - 1))" |
| else |
| CHROME_CDP_PORT="$((CDP_PORT + 1))" |
| fi |
|
|
| CHROME_ARGS+=( |
| "--remote-debugging-address=127.0.0.1" |
| "--remote-debugging-port=${CHROME_CDP_PORT}" |
| "--user-data-dir=${HOME}/.chrome" |
| "--no-first-run" |
| "--no-default-browser-check" |
| "--disable-dev-shm-usage" |
| "--disable-background-networking" |
| "--disable-features=TranslateUI" |
| "--disable-breakpad" |
| "--disable-crash-reporter" |
| "--metrics-recording-only" |
| "--no-sandbox" |
| ) |
|
|
| chromium "${CHROME_ARGS[@]}" about:blank & |
|
|
| for _ in $(seq 1 50); do |
| if curl -sS --max-time 1 "http://127.0.0.1:${CHROME_CDP_PORT}/json/version" >/dev/null; then |
| break |
| fi |
| sleep 0.1 |
| done |
|
|
| socat \ |
| TCP-LISTEN:"${CDP_PORT}",fork,reuseaddr,bind=0.0.0.0 \ |
| TCP:127.0.0.1:"${CHROME_CDP_PORT}" & |
|
|
| if [[ "${ENABLE_NOVNC}" == "1" && "${HEADLESS}" != "1" ]]; then |
| x11vnc -display :1 -rfbport "${VNC_PORT}" -shared -forever -nopw -localhost & |
| websockify --web /usr/share/novnc/ "${NOVNC_PORT}" "localhost:${VNC_PORT}" & |
| fi |
|
|
| wait -n |
|
|