xianyufaka/debug-xvfb.sh
2026-04-15 22:56:44 +08:00

138 lines
3.2 KiB
Bash
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
# Xvfb 故障排查脚本
echo "========================================"
echo " Xvfb 故障排查工具"
echo "========================================"
echo ""
# 1. 检查 Xvfb 进程
echo "1. 检查 Xvfb 进程:"
if pgrep -x "Xvfb" > /dev/null; then
echo "✓ Xvfb 进程正在运行"
ps aux | grep Xvfb | grep -v grep
else
echo "✗ Xvfb 进程未运行"
fi
echo ""
# 2. 检查锁文件
echo "2. 检查锁文件:"
if ls /tmp/.X*-lock 2>/dev/null; then
echo "⚠ 发现锁文件:"
ls -lh /tmp/.X*-lock
echo ""
echo "建议清理命令:"
echo " rm -f /tmp/.X*-lock"
else
echo "✓ 没有锁文件"
fi
echo ""
# 3. 检查 Unix socket
echo "3. 检查 X11 Unix socket"
if ls /tmp/.X11-unix/X* 2>/dev/null; then
echo "⚠ 发现 socket 文件:"
ls -lh /tmp/.X11-unix/X*
echo ""
echo "建议清理命令:"
echo " rm -f /tmp/.X11-unix/X*"
else
echo "✓ 没有 socket 文件"
fi
echo ""
# 4. 检查 DISPLAY 环境变量
echo "4. 检查 DISPLAY 环境变量:"
if [ -n "$DISPLAY" ]; then
echo "✓ DISPLAY=$DISPLAY"
else
echo "✗ DISPLAY 未设置"
fi
echo ""
# 5. 检查 VNC 进程
echo "5. 检查 VNC 进程:"
if pgrep -x "x11vnc" > /dev/null; then
echo "✓ x11vnc 进程正在运行"
ps aux | grep x11vnc | grep -v grep
else
echo "✗ x11vnc 进程未运行"
fi
echo ""
# 6. 检查端口占用
echo "6. 检查端口占用:"
echo "VNC 端口 (5900):"
if netstat -tuln 2>/dev/null | grep :5900 > /dev/null || ss -tuln 2>/dev/null | grep :5900 > /dev/null; then
echo "✓ 端口 5900 正在监听"
else
echo "✗ 端口 5900 未监听"
fi
echo ""
# 7. 查看日志
echo "7. 查看最近的日志:"
if [ -f "/tmp/xvfb.log" ]; then
echo "--- Xvfb 日志 (/tmp/xvfb.log) ---"
tail -20 /tmp/xvfb.log
else
echo "✗ Xvfb 日志文件不存在"
fi
echo ""
if [ -f "/tmp/x11vnc.log" ]; then
echo "--- VNC 日志 (/tmp/x11vnc.log) ---"
tail -20 /tmp/x11vnc.log
else
echo "✗ VNC 日志文件不存在"
fi
echo ""
# 8. 测试显示连接
echo "8. 测试显示连接:"
if [ -n "$DISPLAY" ]; then
if command -v xdpyinfo > /dev/null 2>&1; then
if xdpyinfo > /dev/null 2>&1; then
echo "✓ 显示连接正常"
xdpyinfo | head -5
else
echo "✗ 显示连接失败"
fi
else
echo "⚠ xdpyinfo 未安装,无法测试"
fi
else
echo "✗ DISPLAY 未设置,无法测试"
fi
echo ""
# 9. 提供修复建议
echo "========================================"
echo " 修复建议"
echo "========================================"
echo ""
echo "如果 Xvfb 启动失败,请尝试:"
echo ""
echo "1. 清理旧进程和锁文件:"
echo " pkill -9 Xvfb"
echo " pkill -9 x11vnc"
echo " rm -f /tmp/.X*-lock"
echo " rm -f /tmp/.X11-unix/X*"
echo ""
echo "2. 手动启动 Xvfb"
echo " Xvfb :99 -screen 0 1920x1080x24 -ac +extension GLX +render -noreset &"
echo " export DISPLAY=:99"
echo ""
echo "3. 测试显示:"
echo " xdpyinfo"
echo ""
echo "4. 启动 VNC可选"
echo " x11vnc -display :99 -forever -shared -rfbport 5900 -nopw &"
echo ""
echo "5. 重启容器:"
echo " docker-compose restart"
echo ""
echo "========================================"