遠端桌面協定(RDP, Remote Desktop Protocol)顧名思義是專門拿來做遠端桌面連線的協定。相比於同樣用於遠端桌面的VNC(Virtual Network Computing),RDP使用起來更為方便、簡潔、順暢。



在繼續本篇文章之前,您必須了解到,自行透過RDP來實現遠端桌面功能的方式並無法像TeamViewer或是AnyDesk等商業的遠端桌面軟體那樣,有第三方伺服器來協助不在同一個區域網錄下的兩裝置連線。換句話說,如果您只是想要在同一個區域網路下進行遠端桌面連線,RDP是一個很好的選擇;但如果您想要在網際網路進行遠端桌面連線,TeamViewer或是AnyDesk等軟體才是好的選擇。透過網際網路使用RDP進行遠端桌面連線也不是不行,但您必須自行確保被連線的裝置是可以經由網際網路連入,且擁有足夠的安全性。

啟動RDP伺服器,讓電腦能被其它裝置連入

Linux GNOME 42+

Linux的GNOME桌面環境在42版之後自帶了RDP遠端桌面連線的功能,在設定(Settings)中的分享(Sharing),可以看到遠端桌面(Remote Desktop)項目。

rdp

開啟遠端桌面和遠端遙控,並設定使用者名稱和密碼(可與Linux使用者不同)。

rdp

如此一來就可以允許RDP客戶端的連入,瀏覽並操控當前使用者的畫面。要注意的是,如果當前使用者進入螢幕鎖定的狀態,RDP就無法連線。

Linux X11

如果您的Linux不是使用GNOME 42+桌面環境,可以先參考以下文章查看您的桌面環境是使用X11還是Wayland。

如果是X11,可以安裝xrdp套件來架設RDP伺服器。

基於Debian的Linux發行版可以用以下指令來安裝xrdp

sudo apt install xrdp

紅帽系的Linux發行版可以用以下指令來安裝xrdp

sudo dnf install xrdp

以下指令可以查看xrdp服務有無被成功執行(有無監聽TCP的3389連接埠)。

sudo ss -tlnp | grep 3389

ss指令可以顯示出Socket相關的資訊。-l參數可以只顯示正在監聽中的連線。若使用ss指令時都沒給任何參數的話,會忽略掉監聽中的連線。-t參數可以只顯示TCP連線。-n參數可以讓連接埠數字直接被輸出,而不是用一個名稱代替。-p參數可以顯示佔用連線的行程。

rdp

若沒有,可以執行以下指令來立刻啟用,並在之後的開機都自動啟用:

sudo systemctl enable xrdp --now

接著要將RDP要使用的桌面環境的session寫進~/.xsession檔案中。例如要使用Cinnamon桌面環境的話,可以執行以下指令:

echo env -u SESSION_MANAGER -u DBUS_SESSION_BUS_ADDRESS cinnamon-session > ~/.xsession

Windows

以Windows 10來說,在設定系統可以找到遠端桌面分頁。

rdp

開啟遠端桌面

rdp

rdp

設定遠端桌面連線時可以登入的使用者帳戶。

rdp

rdp

rdp

使用RDP客戶端

Linux

Remmina是Linux上強大的遠端桌面客戶端軟體,除了支援RDP之外,也支援VNC。

基於Debian的Linux發行版可以用以下指令來安裝remmina

sudo apt install remmina

紅帽系的Linux發行版可以用以下指令來安裝remmina

sudo dnf install remmina

Remmina的用法很簡單,只要填入IP,輸入登入的帳號密碼,就可以連線。

rdp

rdp

rdp

rdp

rdp

不過用這樣的方式來連線,會以最小頻寬為訴求,犧牲掉很多功能。但如果是用建立連線設定檔的方式,除了可以儲存連線設定外,還有一些進階設定可以調整,可以將畫面品質(Quality)調到最大(調到最大連線到Windows才會顯示桌布)。也可以將聲音輸出模式(Audio Output Mode)調到本地(Local),來接收遠端裝置發出的聲音;或者是調到遠端(Remote),來讓遠端裝置本身發出聲音。

rdp

Windows

Windows內建的遠端桌面連線即是RDP客戶端。它的用法很簡單,只要填入IP和要登入的使用者名稱,以及密碼,就可以連線。

rdp

rdp

rdp

rdp

rdp

rdp

rdp

RDP + SSH Tunnel

若要將RDP暴露在網際網路上,最好是把3389連接埠對外用防火牆擋起來,只透過SSH Tunnel來連線。有關於SSH Tunnel的說明可以參考這篇文章: