請參考: Linux開源免費的遠端桌面列表
本文Ivon介紹如何設定Wayland專用的VNC伺服器,從電腦連線到遠端Linux桌面。
如果Linux桌面環境顯示協定使用Wayland,傳統的VNC伺服器就行不通了,因其依賴X11環境,此時要改用「WayVNC」這個新技術。
WayVNC是針對Wayland協定實作的VNC伺服器,支援使用wlroots寫成的Wayland合成器,例如Sway、Wayfire、river、Hyprland、Phosh、SXMO。
WayVNC不支援GNOME、KDE Plasma、XFCE、LXQT等桌面環境。
有什麼裝置會使用wlroots的合成器當桌面環境呢?這裡有個值得一提的例子,樹莓派的Raspbrry Pi OS在2023年升級到Bookworm後,便改採Wayland合成器「Wayfire」作為預設桌面環境。所以想延續VNC的使用模式的話,除了用raspi-config
指令改回X11環境之外,就得用WayVNC了。
1. 環境#
- 電腦:Ubuntu 22.04
- 樹莓派5:Raspberry Pi OS 12 Bookworm,桌面環境Wayfire。沒有連接到實體螢幕。
2. 安裝WayVNC#
WayVNC由any1開發,原始碼和說明文件位於 Github,多個Linux發行版都有收套件。
- 用SSH登入樹莓派,從套件庫安裝WayVNC:
sudo apt install wayvnc
Raspberry Pi OS 12可以執行sudo raspi-config
,在Interface Options → VNC選項開啟內建的WayVNC服務。
這裡我採用手動設定的方式。
- 為了方便日後啟動,我將WayVNC服務寫成一個指令稿
cd ~
touch startvnc.sh
- 編輯指令稿
vim startvnc.sh
- 首先,如果樹莓派沒有連線到到實體螢幕,那就是以headless模式執行(注意:樹莓派上的WayFire其實是有啟動的,只不過是沒有接上螢幕輸出畫面而已)。執行WayVNC前要先設定環境變數
export WLR_BACKENDS=headless
export WLR_LIBINPUT_NO_DEVICES=1
export WAYLAND_DISPLAY=wayland-1
- Raspberry Pi OS的Wayfire就算沒有螢幕也會在開機後自動執行,故沒有必要在指令稿啟動Wayfire。
不過若是安裝其他桌面環境的話,得確保預設的顯示管理器為LightDM,這樣Wayfire才會自動啟動。(自動登入桌面環境的具體選項定義在/etc/lightdm/lightdm.conf
)
sudo systemctl enable lightdm
- 接著是啟動WayVNC的指令。
0.0.0.0
代表將允許任意IP連線進來,5901為通訊埠。
wayvnc 0.0.0.0 5901 &
# 如果要看錯誤訊息,加上`-v`選項。
儲存指令稿。
如果有裝防火牆,開放通訊埠
sudo ufw allow 5901
sudo ufw reload
3. 啟用傳輸加密#
如果你只是在自家區域網路測試,用不著開加密。
VNC預設是明碼傳輸的,可以被任意攔截,且WayVNC不能只透過密碼驗證,還得自行建立憑證。
你可以使用VeNCrypt或RSA-AES加密,甚至是透過SSH Forwarding建立加密通道。
- 這裡使用RSA-AES,使用以下指令生成金鑰,並儲存到
~/.config/wayvnc/
mkdir ~/.config/wayvnc/config
ssh-keygen -m pem -f ~/.config/wayvnc/rsa_key.pem -t rsa -N ""
- 編輯WayVNC的設定檔
vim ~/.config/wayvnc/config
- 設定帳號名稱和連線密碼
use_relative_paths=true
address=0.0.0.0
enable_auth=true
username=user
password=password
rsa_private_key_file=rsa_key.pem
4. 從電腦端連線到WayVNC#
- 安裝一個VNC客戶端,因為Remmina不支援RSA,所以我選擇TigerVNC Viewer。
sudo apt install tigervnc-viewer
- 執行遠端裝置上的指令稿,啟動WayVNC
chmod +x startvnc.sh
bash ./startvnc.sh
開啟TigerVNC Viewer,協定選取VNC,輸入
遠端裝置的IP:5901
即可連線。終止WayVNC的指令:
sudo killall wayvnc