learn-spider/bin_bak/start-browser-vnc.sh

76 lines
2.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 浏览器 VNC 守护进程
set -euo pipefail
TARGET_URL="https://www.baidu.com"
VNC_PWD=${1:-"123456"} # VNC 密码
VNC_PORT=${2:-5900} # VNC 端口
DISPLAY_NUM=${3:-99} # 显示编号
DATA_DIR=${4:-"/tmp/chrome-profile-${DISPLAY_NUM}"} # 用户数据目录
PID_FILE="/tmp/chrome-browser-${DISPLAY_NUM}.pid" # 进程 ID 文件
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 "实例 :${DISPLAY_NUM} 已在运行中"
exit 1
fi
cleanup() {
log "正在清理实例 :${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
# 记录当前进程 ID
echo $$ > "$PID_FILE"
log "正在启动 Xvfb :${DISPLAY_NUM}"
Xvfb :${DISPLAY_NUM} -screen 0 1280x1024x24 -nolisten tcp &
sleep 2
export DISPLAY=:${DISPLAY_NUM}
log "正在启动 Chromium (数据目录: ${DATA_DIR})"
mkdir -p "$DATA_DIR"
# 查找 Chromium 可执行文件
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"; exit 1; }
# 启动 Chromium非 headless 模式,可见界面)
"$CHROME_BIN" \
--no-sandbox \
--disable-gpu \
--disable-dev-shm-usage \
--user-data-dir="${DATA_DIR}" \
--window-size=1280,1024 \
"${TARGET_URL}" &
CHROME_PID=$!
log "正在启动 x11vnc端口: ${VNC_PORT}..."
x11vnc -display :${DISPLAY_NUM} -forever -shared -passwd ${VNC_PWD} -rfbport ${VNC_PORT} -bg &
# 获取服务器公网 IP
PUBLIC_HOST=$(curl -sf ifconfig.me 2>/dev/null || hostname -I | awk '{print $1}')
log "=========================================="
log "✅ 浏览器已启动 (仅 VNC无 CDP)"
log "🖥️ VNC 地址: ${PUBLIC_HOST}:${VNC_PORT}"
log "🔑 VNC 密码: ${VNC_PWD}"
log "📁 数据目录: ${DATA_DIR}"
log "🛑 停止命令: ./browser-vnc.sh stop ${DISPLAY_NUM}"
log "=========================================="
# 等待 Chromium 进程结束
wait $CHROME_PID 2>/dev/null || true