#!/bin/bash # Browser VNC Daemon set -euo pipefail TARGET_URL="https://www.baidu.com" VNC_PWD=${1:-"123456"} VNC_PORT=${2:-5900} DISPLAY_NUM=${3:-99} DATA_DIR=${4:-"/tmp/chrome-profile-${DISPLAY_NUM}"} # 用户数据目录 PID_FILE="/tmp/chrome-browser-${DISPLAY_NUM}.pid" LOG_FILE="/tmp/chrome-browser-${DISPLAY_NUM}.log" GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m' log() { echo -e "${GREEN}[$(date '+%H:%M:%S')]${NC} $*"; } err() { echo -e "${RED}[$(date '+%H:%M:%S')]${NC} $*" >&2; } # 检查是否已在运行 if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then err "Instance :${DISPLAY_NUM} already running" exit 1 fi cleanup() { log "Cleaning up instance :${DISPLAY_NUM}..." pkill -P $$ 2>/dev/null || true pkill -f "Xvfb :${DISPLAY_NUM}" 2>/dev/null || true pkill -f "x11vnc.*${DISPLAY_NUM}" 2>/dev/null || true rm -f "$PID_FILE" 2>/dev/null || true } trap cleanup EXIT INT TERM echo $$ > "$PID_FILE" log "Starting Xvfb :${DISPLAY_NUM}" Xvfb :${DISPLAY_NUM} -screen 0 1280x1024x24 -nolisten tcp & sleep 2 export DISPLAY=:${DISPLAY_NUM} log "Starting Chromium (data dir: ${DATA_DIR})" mkdir -p "$DATA_DIR" CHROME_BIN=$(ls $HOME/.cache/ms-playwright/chromium-*/chrome-linux/chrome 2>/dev/null | head -1) if [ -z "$CHROME_BIN" ]; then CHROME_BIN=$(which chromium-browser 2>/dev/null || which google-chrome-stable 2>/dev/null || true) fi [ -z "$CHROME_BIN" ] && { err "Chromium not found"; exit 1; } "$CHROME_BIN" \ --no-sandbox \ --disable-gpu \ --disable-dev-shm-usage \ --user-data-dir="${DATA_DIR}" \ --window-size=1280,1024 \ "${TARGET_URL}" & CHROME_PID=$! log "Starting x11vnc on port ${VNC_PORT}..." x11vnc -display :${DISPLAY_NUM} -forever -shared -passwd ${VNC_PWD} -rfbport ${VNC_PORT} -bg & PUBLIC_HOST=$(curl -sf ifconfig.me 2>/dev/null || hostname -I | awk '{print $1}') log "==========================================" log "✅ Browser started (VNC only, no CDP)" log "🖥️ VNC: ${PUBLIC_HOST}:${VNC_PORT}" log "🔑 Password: ${VNC_PWD}" log "📁 Data: ${DATA_DIR}" log "🛑 Stop: ./browser-vnc.sh stop ${DISPLAY_NUM}" log "==========================================" wait $CHROME_PID 2>/dev/null || true