本篇 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 server1
sudo apt-get install x11vnc
設定 VNC 密碼
設定 x11vnc 的連線密碼,使用 x11vnc -storepasswd
指令來設定之後未來 vnc 的連線密碼,並指定要將密碼存放在 /etc/x11vnc.pass
路徑下,1
2
3
4
5$ sudo x11vnc -storepasswd /etc/x11vnc.pass
Enter VNC password:
Verify password:
Write password to /etc/x11vnc.pass? [y]/n y
Password written to: /etc/x11vnc.pass
手動啟動 x11vnc server
手動啟動 x11vnc server,Ubuntu 16.04 可以使用下列指令,1
2
3
4
5
6
7
8sudo x11vnc \
-display :0 \
-auth /var/run/lightdm/root/:0 \
-forever -bg \
-noxdamage -noxrecord -noxfixes \
-rfbauth /etc/x11vnc.pass \
-rfbport 5900 \
-o /var/log/x11vnc.log
Ubuntu 18.04 可以使用下列指令,跟上面 Ubuntu 16.04 的差別在 -auth
參數,1
2
3
4
5
6
7
8sudo x11vnc \
-display :0 \
-auth /run/user/1000/gdm/Xauthority \
-forever -bg \
-noxdamage -noxrecord -noxfixes \
-rfbauth /etc/x11vnc.pass \
-rfbport 5900 \
-o /var/log/x11vnc.log
因為使用 -bg
參數會放到背景執行,所以要關閉 x11vnc server 可以使用 kill / killall 指令,1
sudo killall x11vnc
或者 x11vnc 來關閉 x11vnc server1
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[Unit]
Description=x11vnc
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc \
-display :0 \
-auth /var/run/lightdm/root/:0 \
-forever -loop -noxdamage -repeat \
-rfbauth /etc/x11vnc.pass \
-rfbport 5900 \
-o /var/log/x11vnc.log \
-shared
ExecStop=/usr/bin/x11vnc -R stop
[Install]
WantedBy=multi-user.target
移動 x11vnc.service 到 /etc/systemd/system/
路徑下,並修改存取權限1
2
3sudo mv ~/x11vnc.service /etc/systemd/system/
sudo chmod 644 /etc/systemd/system/x11vnc.service
sudo chown root:root /etc/systemd/system/x11vnc.service
重新載入設定值與啟動 x11vnc server 服務1
2
3sudo systemctl daemon-reload
sudo systemctl enable x11vnc.service # 啟用 x11vnc 服務
sudo systemctl start x11vnc.service # 啟動 x11vnc 服務
確認 x11vnc server 狀態
確認 x11vnc server 有在執行1
$ systemctl status x11vnc
或者用 ps 指令確認 x11vnc server 有在執行1
$ ps aux | grep x11vnc
用 netstat 指令確認 x11vnc server 的監聽埠 59001
2
3$ netstat -l | grep 5900
tcp 0 0 *:5900 *:* LISTEN
tcp6 0 0 [::]:5900 [::]:* LISTEN
Ubuntu VNC 客戶端程式
Ubuntu 可以使用內建的 Remmina Remote Desktop Client
來進行 VNC 連線,一些必要的設定與選項如下,1
2
3
4
5
6
7Name: xxx
Protocol: VNC-Virtual Network Computing
Server: ip:
User name:
Password: your password
Color depth: High color(16bit)
Quality: Good
若是區域網路內的連線,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 用指令開啟螢幕分享