本篇 ShengYu 紀錄在 Ubuntu 16.04 / Ubuntu 18.04 下安裝 x11vnc VNC Server,x11vnc 是一個遠端桌面伺服器,它允許使用者通過 VNC 協議來遠端訪問和控制正在運行的 X Window System(通常稱為 X11)桌面環境,也就是 x11vnc 會傳輸整個 X Window 的畫面,跟其他 vnc server 不太一樣,所以在使用時建議要設定密碼已達到最低程度的保護,
以下為 Ubuntu 安裝 VNC server 的內容,大概分為這幾部份,
- Ubuntu 安裝 x11vnc VNC Server
- 設定 VNC 密碼
- 手動啟動 x11vnc server
- x11vnc 參數說明
- 自動啟動 x11vnc server (開機自動啟動)
- 確認 x11vnc server 狀態
- Ubuntu VNC 客戶端程式
- Windows VNC 客戶端程式
- macOS VNC 客戶端程式
- SSH 通訊埠轉發
Ubuntu 安裝 x11vnc VNC Server
使用 apt 指令來安裝 x11vnc server
1 | sudo apt-get install x11vnc |
設定 VNC 密碼
設定 x11vnc 的連線密碼,使用 x11vnc -storepasswd
指令來設定之後未來 vnc 的連線密碼,並指定要將密碼存放在 /etc/x11vnc.pass
路徑下,
1 | $ sudo x11vnc -storepasswd /etc/x11vnc.pass |
手動啟動 x11vnc server
手動啟動 x11vnc server,Ubuntu 16.04 可以使用下列指令,
1 | sudo x11vnc \ |
Ubuntu 18.04 可以使用下列指令,跟上面 Ubuntu 16.04 的差別在 -auth
參數,
1 | sudo x11vnc \ |
因為使用 -bg
參數會放到背景執行,所以要關閉 x11vnc server 可以使用 kill / killall 指令,
1 | sudo killall x11vnc |
或者 x11vnc 來關閉 x11vnc server
1 | x11vnc -R stop |
x11vnc 參數說明
以下為常用的一些 x11vnc 參數與說明,-display :0
:顯示和本地端的 DISPLAY :0, 即客戶端看到的畫面和本地端看的畫面一樣-usepw
:使用密碼-nopw
:不使用密碼-rfbauth
:指定之前設定好的 vnc 連線密碼檔-bg
:背景執行-forever
:繼續監聽更多 vnc 連線,沒有這個參數的話會在第一個客戶端離線後,就退出程式-rfbport
:指定 vnc 的連接埠-o
:輸出日誌-auth guess
讓 vnc 自行猜測進行連線-auth /var/lib/gdm/:0.Xauth
使用 GDM 的 X-Session 進行連線-auth /var/run/lightdm/root/:0
使用 lightdm 的 X-Session 進行連線-viewonly
:所有客戶端只能看,沒有控制權,即不能控制滑鼠與鍵盤(預設關閉)-shared
:VNC display is shared, i.e. more than one viewer can
connect at the same time (default off).-geometry WxH
:顯示的大小,例如:-geometry 1024x768
自動啟動 x11vnc server (開機自動啟動)
Ubuntu 要開機自動啟動 x11vnc server 的話,就要寫一個 service 的設定檔,方法如下,
編輯 x11vnc.service,內容如下,這份設定適用於 Ubuntu 16.04,
Ubuntu 18.04 就把 -auth
改成 /run/user/1000/gdm/Xauthority
即可,
ExecStop 這行可有可無,
1 | [Unit] |
移動 x11vnc.service 到 /etc/systemd/system/
路徑下,並修改存取權限
1 | sudo mv ~/x11vnc.service /etc/systemd/system/ |
重新載入設定值與啟動 x11vnc server 服務
1 | sudo systemctl daemon-reload |
確認 x11vnc server 狀態
確認 x11vnc server 有在執行
1 | $ systemctl status x11vnc |
或者用 ps 指令確認 x11vnc server 有在執行
1 | $ ps aux | grep x11vnc |
用 netstat 指令確認 x11vnc server 的監聽埠 5900
1 | $ netstat -l | grep 5900 |
Ubuntu VNC 客戶端程式
Ubuntu 可以使用內建的 Remmina Remote Desktop Client
來進行 VNC 連線,一些必要的設定與選項如下,
1 | Name: xxx |
若是區域網路內的連線,Color depth 可以選到最高 True color(24bit)

Windows VNC 客戶端程式
在 Windows 可以選用 REAL VNC 這款免費的 VNC Viewer,

macOS VNC 客戶端程式
macOS 內建有 VNC 客戶端程式,要使用 macOS 內建的 VNC 客戶端程式的方式法是 Finder > 前往 > 連接伺服器
,之後輸入 vnc://<ip>
,例如 vnc://192.168.1.5
再按連線即可。
SSH 通訊埠轉發
要安全地使用 x11vnc 的話,可以搭配 ssh 來達成安全性,
概念是將 x11vnc 改成綁定本機端 loopback 網路介面,這樣外部的連線就無法連上,
x11vnc 要綁定本機端 loopback 網路介面的方法是加上 -localhost
的參數,
1 | x11vnc -localhost ... -rfbport 5900 ... |
客戶端要使用 VNC 前,先用 ssh 通訊埠轉發,同時要確定客戶端沒有 5900 的服務正在開啟中,例如客戶端也有一個 VNC Server 的服務剛好也是使用 5900 的話就需要先關閉或改用其他 port,以下 ssh 指令使用後會登入遠端電腦並轉發這些通訊埠,一旦 ssh 連線終止轉發通訊埠也會終止,所以 ssh 登入後就保持連線直到使用完畢再終止連線即可,
1 | ssh <x11vnc-server-host> -L 5900:localhsot:5900 |
然後客戶端再用 VNC 連接自己本機端的 port 5900 vnc://localhost:5900
即可。
如果 VNC 嘗試連線失敗時 ssh terminal 出現 channel 3: open failed: administratively prohibited: open failed
的錯誤訊息的話,可將 localhsot 改用 127.0.0.1 試試。
1 | ssh <x11vnc-server-host> -L 5900:127.0.0.1:5900 |
其它參考
x11vnc(1) - Linux man page
https://linux.die.net/man/1/x11vnc
Bahut: VNC server for Cinnamon with systemd
http://bahut.alma.ch/2018/10/vnc-server-for-cinnamon-with-systemd.html
其它相關文章推薦
macOS Screen Sharing 用指令開啟螢幕分享