Vnc

VNC 伺服器只監聽來自 localhost 的連接

  • December 28, 2019

我已經為我的 Raspberry Pi 2 B+ 在 Raspbian(2.017 年 9 月版)上 安裝了TightVNCServer :

luis@Frambuesio:~$  vncserver -name Frambuesio -geometry 1280x1024 -depth 16

New 'Frambuesio' desktop at :1 on machine Frambuesio

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/luis/.vnc/Frambuesio:1.log

Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/luis/.vnc/passwd :1 to connect to the VNC server.

luis@Frambuesio:~$ netstat -ano | grep "5901"
tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp6       0      0 ::1:5901                :::*                    LISTEN      off (0.00/0/0)

但是我的 VNC 查看器(來自遠端 Windows 機器上的 RealVNC)在嘗試連接時收到消息“連接被拒絕”,並且埠似乎沒有在監聽:

luis@Hipatio:~$ sudo nmap Frambuesio- -p 5900,5901,5902
[sudo] password for luis:

Starting Nmap 7.01 ( https://nmap.org ) at 2017-10-18 16:58 CEST
Nmap scan report for Frambuesio- (192.168.11.142)
Host is up (0.00050s latency).
PORT     STATE  SERVICE
5900/tcp closed vnc
5901/tcp closed vnc-1
5902/tcp closed vnc-2
MAC Address: B8:27:EB:7D:7C:B0 (Raspberry Pi Foundation)

Nmap done: 1 IP address (1 host up) scanned in 0.67 seconds

如果我在另一個 Raspberry Pi 上嘗試從Ubuntu 16.04.3 一切正常(注意不同的netstat結果):

luis@Zarzaparrillo:~$ vncserver -name Zarzaparrillo -geometry 1280x1024 -depth 16

New 'Zarzaparrillo' desktop is Zarzaparrillo:1

Starting applications specified in /home/luis/.vnc/xstartup
Log file is /home/luis/.vnc/Zarzaparrillo:1.log

luis@Zarzaparrillo:~$ netstat -ano | grep 5901
tcp6       0      0 :::5901                 :::*                    LISTEN      off (0.00/0/0)

VNC4Server的結果相同。

我已經閱讀了官方的 Raspberry 論文,包括安裝realvnc-vnc-server包。但是 RealVNC 程序安裝了大量額外的軟體包並且不是開源的,即使它是免費的用於教育目的。我更喜歡 GNU 對我的 VNC 更開放的策略,只要它可以在企業生產環境中使用。

我現在的解決方法是使用X11vnc在另一個埠上提供顯示:

luis@Frambuesio:~$  vncserver -name Frambuesio -geometry 1280x1024 -depth 16

[... on another terminal: ]
luis@Frambuesio:~$ sudo x11vnc -display :1 -passwd anypassword -auth guess -forever

…現在 X11vnc 程序使 display :1 可用。注意,只要 TCP 埠 5901 被佔用,X11VNC 就使用 5900 TCP(又名:0 port):

The VNC desktop is:      Frambuesio:0
PORT=5900

注意netstat輸出,現在處於工作狀態:

luis@Frambuesio:~$ netstat -ano | grep 5900
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp6       0      0 :::5900                 :::*                    LISTEN      off (0.00/0/0)
luis@Frambuesio:~$ netstat -ano | grep 5901
tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp6       0      0 ::1:5901                :::*                    LISTEN      off (0.00/0/0)

為什麼我的 VNC 伺服器出現故障,我該如何解決?

該問題似乎只是 VNCServer 上的預設參數,帶有不正確的(針對您的情況)選項。

從命令行vncserver幫助:

[-localhost yes|no]    Only accept VNC connections from localhost

這應該可以解決您的問題:

vncserver -localhost no

解釋原始問題中的最後一個範例,注意“從5900 TCP的任何位置0.0.0.0:5900監聽連接”的含義:

luis@Frambuesio:~$ netstat -ano | grep 5900
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp6       0      0 :::5900                 :::*                    LISTEN      off (0.00/0/0)

同時,請注意“在 5901 TCP 處偵聽來自 localhost127.0.0.1:5901的連接”的含義

luis@Frambuesio:~$ netstat -ano | grep 5901
tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN      off (0.00/0/0)
tcp6       0      0 ::1:5901                :::*                    LISTEN      off (0.00/0/0)

引用自:https://unix.stackexchange.com/questions/398905