如果 VNC Viewer 可以连接 macOS,但无法连接 Ubuntu,通常是由于 Ubuntu 上的 VNC 服务配置问题或网络限制导致的。以下是逐步排查和解决方案:
1. 确认 Ubuntu 上已安装并运行 VNC 服务
(1) 检查是否安装了 VNC 服务器
Ubuntu 常用的 VNC 服务器有:
-  TigerVNC(轻量级,推荐) 
-  RealVNC(商业版) 
-  x11vnc(临时共享) 
安装 TigerVNC:
sudo apt update
sudo apt install tigervnc-standalone-server tigervnc-common(2) 设置 VNC 密码
vncpasswd(输入密码,会保存在 ~/.vnc/passwd)
(3) 启动 VNC 服务器
vncserver :1 -geometry 1920x1080 -depth 24-  :1表示显示端口5901(:2对应5902,依此类推)。
-  -geometry设置分辨率,-depth设置颜色深度。
(4) 检查 VNC 是否运行
ss -tulnp | grep vnc正常应显示:tcp LISTEN 0 5 0.0.0.0:5901 0.0.0.0:* users:(("Xvnc",pid=1234,fd=7))
如果没有,可能是服务未启动或端口被占用。
2. 检查防火墙是否放行 VNC 端口
(1) Ubuntu 防火墙(UFW)
sudo ufw status如果防火墙开启,放行 VNC 端口(默认 5901):
sudo ufw allow 5901
sudo ufw reload(2) 检查云服务器安全组(如果是云主机)
-  AWS/Azure/GCP 需在控制台放行 5901端口(TCP)。
3. 确保 VNC 服务绑定到 0.0.0.0(允许远程连接)
 
默认情况下,VNC 可能只监听 127.0.0.1(仅本地访问),需修改配置:
vim ~/.vnc/config
添加:
localhost=no
然后重启 VNC:
vncserver -kill :1 vncserver :1
4. 检查 VNC 客户端连接方式
(1) 正确连接格式
在 VNC Viewer 输入:<Ubuntu的IP>:1
:1 对应 5901,:2 对应 5902,依此类推。
(2) 使用 SSH 隧道(更安全)
如果直接连接失败,可以尝试 SSH 端口转发:
ssh -L 5901:localhost:5901 username@ubuntu-ip
然后在 VNC Viewer 连接 localhost:1。
5. 常见错误及解决方案
| 错误现象 | 可能原因 | 解决方案 | 
|---|---|---|
| Connection refused | 服务未运行/端口未开放 | 检查 vncserver是否运行,防火墙是否放行 | 
| Authentication failed | 密码错误 | 重新运行 vncpasswd设置密码 | 
| Black screen | 未正确启动桌面环境 | 确保 Ubuntu 安装了 GNOME/XFCE 等桌面 | 
| Cannot currently show the desktop | 未配置桌面会话 | 修改 ~/.vnc/xstartup文件 | 
6. 配置桌面环境(解决黑屏问题)
如果连接后黑屏,可能是未正确启动桌面。编辑 ~/.vnc/xstartup:
写入(以 GNOME 为例):
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec /usr/bin/gnome-session然后赋予执行权限并重启 VNC:
chmod +x ~/.vnc/xstartup
vncserver -kill :1
vncserver :17. 测试 VNC 服务
在 Ubuntu 上运行:
vncserver -list
应显示:
TigerVNC server sessions:X DISPLAY # PROCESS ID :1 1234
然后在 VNC Viewer 输入 <Ubuntu-IP>:1,输入密码连接。
总结
-  安装 TigerVNC 并设置密码。 
-  放行防火墙( 5901端口)。
-  确保 VNC 监听 0.0.0.0(允许远程连接)。
-  配置桌面环境(避免黑屏)。 
-  使用 SSH 隧道(提升安全性)。 
如果仍然无法连接,检查日志:
cat ~/.vnc/*.log
或尝试其他 VNC 服务器(如 x11vnc):
sudo apt install x11vnc x11vnc -display :0 -forever -passwd 你的密码
