Ubuntu 上 TigerVNC 黑屏的排查与修复
一 常见成因概览
- 未安装或未正确启动图形桌面(如只装了服务器版或未装 ubuntu-desktop)。
- ~/.vnc/xstartup 配置不当,未启动桌面会话或使用了不兼容的会话类型(GNOME 3 在部分环境下易黑屏/灰屏)。
- 以 root 直接登录图形会话受限,或启动前处于 conda base 环境导致会话初始化异常。
- 端口与防火墙限制(默认 5900+N,如 :1 对应 5901),或仅监听 localhost 导致外部无法连接。
- VNC 版本过旧或客户端/服务端不匹配,存在兼容性与安全问题。
二 快速修复流程
- 安装图形桌面(若未安装)
- Ubuntu 20.04/22.04/24.04 建议安装完整桌面:
- sudo apt update && sudo apt install -y ubuntu-desktop
- 服务器资源较紧张时,可改用轻量桌面 Xfce:
- sudo apt install -y xfce4 xfce4-goodies
- 配置 ~/.vnc/xstartup
- 备份并编辑:cp ~/.vnc/xstartup ~/.vnc/xstartup.bak && nano ~/.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
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” &
gnome-session &
- Xfce(兼容性更好)
- #!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
- 赋权:chmod +x ~/.vnc/xstartup
- 设置 VNC 密码
- vncpasswd(view-only 选 no)
- 重启 VNC(注意显示号与端口映射)
- vncserver -kill :1
- vncserver :1 -localhost no
- 放行防火墙
- UFW:sudo ufw allow 5901/tcp && sudo ufw reload
- firewalld:sudo firewall-cmd --add-port=5901/tcp --permanent && sudo firewall-cmd --reload
- 客户端连接
- 地址:服务器IP:5901(:1 对应 5901)
- 客户端优先选用 TigerVNC Viewer,兼容性更好。
三 针对性场景与解决方案
- 灰屏或仅背景无面板
- 常见于 GNOME 3 会话,改用兼容方案:
- GNOME Flashback(Metacity):
- #!/bin/sh
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP=“GNOME-Flashback:GNOME”
export XDG_MENU_PREFIX=“gnome-flashback-”
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check &
- 或改用 Xfce(见上一节 xstartup 示例)。
- 仅 root 无法进入图形界面
- Ubuntu 默认对 root 图形登录有限制,建议新建普通用户用于 VNC 登录。
- 启动前处于 conda base 导致会话异常
- 先退出 base:conda deactivate,再启动 vncserver(如 vncserver :1 -geometry 1920x1080)。
- 连接超时或只能本机连
- 启动时加上 -localhost no,并确保放行 5901/tcp;必要时用 SSH 隧道:
- ssh -L 5901:localhost:5901 user@server。
四 验证与日志排错
- 查看进程与端口
- ps -ef | grep vnc;ss -tulnp | grep 5901;vncserver -list
- 查看日志定位问题
- tail -n 200 ~/.vnc/*.log(关注报错关键词:Failed to start session、dbus、gnome-session、XDG 等)
- 版本与兼容性
- 建议 TigerVNC ≥ 1.12,优先使用系统仓库版本并定期更新;必要时客户端与服务端均使用 TigerVNC Viewer 提升兼容性。