如何在Ubuntu 18.04與20.04上使用RDP遠端GNOME桌面

前言

大約在六年前的時候,我有使用過LXDE的遠端桌面來進行RDP的連線,相關的文章連結如下:

Windows 遠端桌面到Lubuntu

時至今日,Ubuntu所發行的版本也從那時候的穩定版14.04跳到16.04,以及現在目前的18.04還有最新的18.04了。

看起來,RDP遠端桌面協定版本也有比之前我在用的時候,進步很多,以及使用GNOME桌面進行遠端連線的改善等等。

本篇文章,是要講述如何在Ubuntu 18.04與20.04上,架設RDP的遠端桌面連線,以及使用GNOME桌面環境來進行遠端桌面操作的桌面環境。

前置條件

  • 已經有安裝好Ubuntu 18.04或是Ubuntu 20.04的機器,虛擬機器環境或是一般PC皆可。

建置步驟

為了省略安裝的步驟,因此安裝RDP以及GNOME桌面環境的相關指令皆已經轉換成Bash script,讀者可以複製下面的shell script並存成自己的shell script檔並將檔案權限調整成755。

來執行此shell script,來達到安裝與建置上述的環境之便利性。另外,此shell script是從某個網路上文章進行修改而成的,本來內容也有支援Ubuntu 17.10的版本,但是此為不穩定的版本,筆者也沒有測試過,因此讀者還是就Ubuntu 18.04與20.04為穩定長期支援版本作為測試即可。

相關的shell script內容如下:


################################################################
# Script_Name : Std-Xrdp-install-0.2.sh
# Description : Perform an automated standard installation of xrdp
# on ubuntu 17.10 and later
# Date : April 2018
# written by : Griffon
# Web Site :http://www.c-nergy.be - http://www.c-nergy.be/blog
# Version : 0.2
# History : 0.2 - Added Logic for Ubuntu 17.10 and 18.04 detection
# - Updated the polkit section
# - New formatting and structure
# 0.1 - Initial Script
# Disclaimer : Script provided AS IS. Use it at your own risk....
##################################################################

echo
/bin/echo -e "\e[1;36m#-------------------------------------------------------------#\e[0m"
/bin/echo -e "\e[1;36m# Standard XRDP Installation Script - Ver 0.2 #\e[0m"
/bin/echo -e "\e[1;36m# Written by Griffon - April 2018- www.c-nergy.be #\e[0m"
/bin/echo -e "\e[1;36m#-------------------------------------------------------------#\e[0m"
echo

#---------------------------------------------------#
# Step 0 - Try to Detect Ubuntu Version....
#---------------------------------------------------#

echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Detecting Ubuntu version # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

version=$(lsb_release -d | awk -F":" '/Description/ {print $2}')

if [[ "$version" = *"Ubuntu 17.10"* ]] || [[ "$version" = *"Ubuntu 18.04"* ]] || [[ "$version" = *"Ubuntu 20.04"* ]];
then
echo
/bin/echo -e "\e[1;32m.... Ubuntu Version :$version\e[0m"
/bin/echo -e "\e[1;32m.... Supported version detected....proceeding\e[0m"

else
/bin/echo -e "\e[1;31m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\e[0m"
/bin/echo -e "\e[1;31mYour system is not running Ubuntu 17.10 Edition.\e[0m"
/bin/echo -e "\e[1;31mThe script has been tested only on Ubuntu 17.10...\e[0m"
/bin/echo -e "\e[1;31mThe script is exiting...\e[0m"
/bin/echo -e "\e[1;31m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\e[0m"
echo
exit
fi

#---------------------------------------------------#
# Step 1 - Install xRDP Software....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Installing XRDP Packages...Proceeding... # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

sudo apt-get install xrdp xorg xserver-xorg-core xorgxrdp -y

#---------------------------------------------------#
# Step 2 - Install Gnome Tweak Tool....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Installing Gnome Tweak...Proceeding... # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

sudo apt-get install gnome-tweak-tool adwaita-icon-theme-full -y

#---------------------------------------------------#
# Step 3 - Allow console Access ....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Granting Console Access...Proceeding... # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

sudo sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.config

#---------------------------------------------------#
# Step 4 - create policies exceptions ....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Creating Polkit File...Proceeding... # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

sudo bash -c "cat >/etc/polkit-1/localauthority/50-local.d/45-allow.colord.pkla" <<EOF
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF

#---------------------------------------------------#
# Step 5 - Enable Extensions ....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
/bin/echo -e "\e[1;33m! Install Extensions Dock...Proceeding... # \e[0m"
/bin/echo -e "\e[1;33m#---------------------------------------------#\e[0m"
echo

if [[ "$version" != *"Ubuntu 20.04"* ]];
then
gnome-shell-extension-tool -e ubuntu-dock@ubuntu.com
gnome-shell-extension-tool -e ubuntu-appindicators@ubuntu.com
fi;
echo

#---------------------------------------------------#
# Step 6 - Credits ....
#---------------------------------------------------#
echo
/bin/echo -e "\e[1;36m#-----------------------------------------------------------------------#\e[0m"
/bin/echo -e "\e[1;36m# Installation Completed\e[0m"
/bin/echo -e "\e[1;36m# Please test your xRDP configuration....\e[0m"
/bin/echo -e "\e[1;36m# Written by Griffon - April 2018 - Ver 0.2 - Std-Xrdp-Install-0.2.sh\e[0m"
/bin/echo -e "\e[1;36m#-----------------------------------------------------------------------#\e[0m"
echo

若讀者不想複製上面這一長串的shell script的話,則可以使用下面的指令,將此shell script下載到要建立RDP桌面協定與GNOME桌面環境的目標主機上:

 wget https://gist.githubusercontent.com/peter279k/259f71b3a8cef3aa66e9af90e6800f2b/raw/c373ddee0d407dac850dc326c268e5df6d8c93f1/Std-Xrdp-install-0.2.sh 

遠端桌面連線測試

當執行完上述的shell script之後,接著將主機重新開機,並確定3389的port number沒有被IPTable或是防火牆擋住,並可以使用下面的指令來確定3389的port number已經有服務監聽在此port number 上了。


netstat -ntlp | grep 3389

若有服務已經監聽在上述的port number上的話,則執行上述的指令之後,則會出現下列的結果:


lee@lee-VirtualBox:~$ netstat -ntlp | grep 3389
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::3389 :::* LISTEN -

接著,可以使用Windows遠端桌面,輸入此虛擬機器的IP位址,預設如果沒有打上後面的port number的話,則會預設以3389這個port number來進行遠端桌面的連線,相關的連線資訊頁面範例如下:

接著,按下上述截圖的”連線”按鈕之後,接著就會看到下面的截圖:

這時候,就輸入登入的使用者帳號與密碼,接著按下OK的按鈕之後,就會使用GNOME桌面環境登入進去了,登入成功之後的結果如下圖所示:

下面這個截圖是登入Ubuntu 20.04的GNOME桌面環境的結果:

下面這個是登入Ubuntu 18.04的GNOME桌面環境的結果:

如此一來,就完成了使用RDP遠端桌面連線協定並安裝GNOME桌面環境進行遠端桌面操作的教學了。

若要調整Gnome桌面環境的介面,則可以再安裝下列的套件:


sudo apt-get install gnome-tweaks

若要讓xrdp使用者可以讀取憑證檔案,則可以使用下列的指令將xrdp使用者加入到ssl-certs群組中。


sudo adduser xrdp ssl-cert

補充資料

若一開始的Ubuntu 20.04與Ubuntu 18.04沒有安裝桌面環境並執行上述的Bash script的話,則執行之後還需要再執行下列的指令:


sudoapt-get update

sudo apt-get install gnome-shell-extensions

sudo apt-get install gnome-sessions

結論

筆者用過了很多可以遠端桌面的方式的協定,像是X2GO,RDP以及VNC等,每個遠端桌面連線的協定以及方式都各有優缺點,在筆者看來,RDP是支援複製貼上幾乎是最完整的,可以雙向的支援複製與貼上的動作之外,還可以支援UTF-8中文的雙向複製貼上,其他像是VNC還有X2GO等,都無法完美的支援中文的複製與貼上,往往無法使用,或者是容易貼上去之後會是亂碼。

其他的比較,像是遠端桌面操作的流暢度,筆者個人認為上述這三種都差不多,因為遠端桌面的操作流暢度,其最主要的原因還是跟遠端桌面連線的雙方之網路速度是否快速。取決於畫面的流暢度以及高或低延遲的結果。

參考資料

  • https://gist.github.com/peter279k/59587eac765d9c3c4573634bf298db9e
  • https://www.azureunali.com/linux-ubuntu-18-04-xrdp-remote-desktop-config-problem
  • http://c-nergy.be/blog/?p=11868
  • https://www.answertopia.com/ubuntu/ubuntu-remote-desktop-access-with-vnc
  • https://blog.devgenius.io/install-xrdp-server-on-ubuntu-7088583bc01
  • https://gist.githubusercontent.com/peter279k/259f71b3a8cef3aa66e9af90e6800f2b/raw/c373ddee0d407dac850dc326c268e5df6d8c
  • https://linuxconfig.org/how-to-install-gnome-on-ubuntu-18-04-bionic-beaver-linux