如果?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 :1
7. 測試 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 你的密碼