Linux上VNC连接黑屏

[复制链接]
发表于 2026-10-5 11:24:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

VNC 连上去一片黑、或者鼠标键盘没反应,服务明明还在跑——这种「假死」状态在重启过服务器的机器上特别常见。定位思路其实很固定:先看服务状态,再看日志日志里的错误码,最后按码找进程。

故障现象

  • 服务器重启之后 VNC 连不上。
  • 明明 ps 里能看到 VNC 相关进程,端口也监听着。
  • 客户端连上了但显示黑屏,或者报「连接被对端重置」。

排查五步

第一步:重启服务,看报不报错误

sudo systemctl restart vncserver@:1.service

如果这里就报失败,别往下走,问题在启动阶段。

第二步:看服务状态

systemctl status vncserver@:1.service

状态是 inactive(未启动)或者 failed,说明服务压根没起来。

第三步:翻日志日志找错误码

journalctl -u vncserver@:1.service

日志日志里出现 status=98 这样的字样——98 是 systemd 的「地址已被占用」错误码,对应 Address already in use,意思很直白:VNC 想监听的那个端口已经被别人占着了。

为什么会被占?因为 VNC 通常配了开机自启,系统重启过程中 systemd 并发拉起了多个会话实例,或者上一次的进程没被正确回收,端口一直挂着不放。

第四步:找出占端口的进程

sudo lsof -i:5901

VNC 的端口号换算规则:会话 :1 对应 5901,:2 对应 5902,依此类推。输出里能看到占着 5901 的进程 PID 和命令。

第五步:清掉进程再起服务

sudo kill 902149
sudo systemctl restart vncserver@:1.service
systemctl status vncserver@:1.service

状态回到 active (running),客户端重新连一次就正常了。

kill 默认发 SIGTERM, gracefully 让进程自己收尾;实在收不掉再上 kill -9。生产环境别一上来就 -9。

顺手解决根因:别让它再卡住

这次是进程卡住,那下次重启还会。两个加固动作:

  • 确认自启的是你想要的那个实例:systemctl list-unit-files | grep vncserver,以及 systemctl is-enabled vncserver@:1。开了多个会话自启,重启时就会互相抢端口。
  • 给自启服务加依赖约束:在 /etc/systemd/system/vncserver@:1.service.d/ 下放一个 override,让它在 network-online.target 之后才起,避免网络没就绪时抢端口:
sudo systemctl edit vncserver@:1.service
[Unit]
After=network-online.target
Wants=network-online.target

改完 sudo systemctl daemon-reload 生效。

其他常见黑屏原因对照

  • 桌面环境没装全:只装了 openvnc-server 但没有 xfce4 / xterm,X Display 起不来就是纯黑。用 tigervnc 的话检查 Xvnc 是否装了基础字体。
  • 分辨率或色深配置错:~/.vnc/config 里写太大的分辨率,老显卡驱动下会黑。调成 1280x1024 试试。
  • 用户家目录权限太开:~/.vnc/xstartup 必须可执行(chmod +x),而且 ~/.vnc 权限别搞成 777。
  • 防火墙挡了 5901:sudo ufw allow 5901/tcp。
  • SSH 隧道断了:走 SSH 隧道连 VNC 的场景,隧道断了表现也是黑屏,ssh -v 看一下隧道还在不在。

回到这次的故障:根因是 VNC 配了开机自启,重启时进程卡住没被回收,端口 5901 一直被占,新实例自然起不来,表现为连接黑屏。按「状态 → 日志 → 错误码 → 端口进程」这条链走一遍,基本都能秒定位。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表