本篇 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 8 sudo 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 8 sudo 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 指令,
或者 x11vnc 來關閉 x11vnc server
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 這行可有可無,x11vnc.service 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 3 sudo 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 3 sudo 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 有在執行
用 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 7 Name: 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 pagehttps://linux.die.net/man/1/x11vnc Bahut: VNC server for Cinnamon with systemdhttp://bahut.alma.ch/2018/10/vnc-server-for-cinnamon-with-systemd.html
其它相關文章推薦 macOS Screen Sharing 用指令開啟螢幕分享