温馨提示×

CentOS上TigerVNC的日志查看与故障排查

小樊
34
2025-12-25 08:28:25
栏目: 智能运维

CentOS上TigerVNC日志查看与故障排查

一 日志位置与快速查看

  • 使用 systemd 查看服务日志(适用于以服务方式管理的情况,显示号为**:1时服务单元通常为vncserver@:1.service**)
    • 查看全部日志:journalctl -u vncserver@:1.service
    • 实时跟踪:journalctl -u vncserver@:1.service -f
    • 按时间筛选:journalctl -u vncserver@:1.service --since “2025-12-25 09:00:00” --until “2025-12-25 10:00:00”
    • 关键字过滤:journalctl -u vncserver@:1.service | grep -i “error|fail|exception”
  • 查看实例日志文件(TigerVNC 会在用户家目录的 .vnc 下生成)
    • 日志路径通常为:~/.vnc/主机名:显示号.log,例如 /root/.vnc/centos8:1.log
    • 常用命令:
      • 实时查看:tail -f ~/.vnc/centos8:1.log
      • 检索错误:grep -i “error” ~/.vnc/centos8:1.log
  • 系统级与安全日志(用于权限、认证、网络等线索)
    • /var/log/messages、/var/log/secure
    • 示例:grep -i “vnc\|x11” /var/log/secure

二 端口与连通性检查

  • 端口规则:VNC 桌面号与端口为5900 + 显示号,例如 :1 → 5901:2 → 5902;部分部署还会开启 HTTP 预览端口 5801(对应 :1)。
  • 监听与占用:
    • ss -lntp | grep 5901 或 netstat -tulpen | grep 5901
    • 若端口被占用,改用其他显示号(如 :2)或释放占用进程
  • 防火墙(firewalld):
    • 放行端口:firewall-cmd --permanent --add-port=5901/tcp && firewall-cmd --reload
    • 或放行服务:firewall-cmd --permanent --add-service=vnc-server && firewall-cmd --reload
  • 连通性测试(客户端或跳板机执行):
    • nc -vz 服务器IP 5901 或 telnet 服务器IP 5901
  • 服务状态与端口对照检查:
    • systemctl status vncserver@:1.service
    • ss -lntp | grep Xvnc 或 ps -ef | grep Xvnc

三 常见故障与修复要点

  • 灰屏、黑屏、鼠标黑叉
    • 检查 ~/.vnc/xstartup 是否启动桌面会话,示例(GNOME):
      • #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources vncconfig -iconic & gnome-session &
    • 确保已安装桌面环境(如 GNOME 或 XFCE),并赋予 xstartup 可执行权限:chmod +x ~/.vnc/xstartup
    • 重启会话:vncserver -kill :1 && vncserver :1
  • 启动失败或显示 “Error: cannot open Display: :1”
    • 多见于 xstartup 执行错误或残留锁文件,先清理再启:
      • vncserver -kill :1
      • rm -f ~/.vnc/.pid ~/.vnc/.log
      • 再启动:vncserver :1
    • 检查 systemd 服务 Type、PIDFile、ExecStart/ExecStartPre 是否与用户和显示号一致(Type=forking、PIDFile=~/.vnc/%H:1.pid)
  • 首次连接被拒绝或提示无密码
    • 先为本用户设置 VNC 密码:vncpasswd(会在 ~/.vnc/passwd 生成条目)
  • 字符乱码或语言环境异常
    • 检查并设置语言:cat /etc/sysconfig/i18n,将 LANG=zh_CN.UTF-8(或 en_US.UTF-8),然后重启会话或系统
  • 端口未放行导致“连接超时”
    • 按上文放行 5901/tcp(或对应端口),并确认云厂商安全组策略同样放行

四 服务配置与最佳实践

  • systemd 单元关键项(/etc/systemd/system/vncserver@:1.service 示例)
    • [Service]
      • Type=forking
      • User=youruser
      • Group=yourgroup
      • WorkingDirectory=/home/youruser
      • PIDFile=/home/youruser/.vnc/%H:1.pid
      • ExecStartPre=-/usr/bin/vncserver -kill :%i >/dev/null 2>&1
      • ExecStart=/usr/bin/vncserver :%i -geometry 1280x800 -depth 24
      • ExecStop=/usr/bin/vncserver -kill :%i
    • 修改后执行:systemctl daemon-reload && systemctl enable --now vncserver@:1.service
  • 首次使用流程
    • 切换目标用户:su - youruser
    • 设置密码:vncpasswd
    • 启动会话:vncserver :1(或交由 systemd 管理)
  • 运行维护
    • 查看会话:vncserver -list
    • 结束会话:vncserver -kill :1
    • 不建议以 root 直接运行 VNC,优先使用普通用户并通过 sudo 授权必要操作
  • 浏览器访问(可选)
    • 部署 noVNC:git clone https://github.com/kanaka/noVNC.git && cd noVNC && ./utils/launch.sh --vnc localhost:5901
    • 访问:http://服务器IP:6080/vnc.html

0