xRDP – Install xRDP the easy way (Scripted Installation – Version 0.5.2)

Hello World, 

 !! Script version fixing  issue in Ubuntu 18.04.2 !!

 

Based on our previous post, you should be aware of an issue affecting Ubuntu 18.04.2 when trying to install xrdp package.  So far, the issue is only affecting Ubuntu 18.04.2, Ubuntu 18.10 and later seems not to be affected by the issue. 

Because Ubuntu 18.04 is a long term support release, we have decided to release a new version of our famous installation script (Std-Xrdp-Install.xx.sh). The latest version of the script is set to 0.5.2 and basically includes the logic to “fix” or “patch” the issue detected in Ubuntu 18.04.2. 

Note :  Please always check this page, to get the latest version of the script 

The Standard Installation Script – Version 0.5.2

Overview

The standard installation script basically simplify and automate the installation of xRDP package on top of Ubuntu 18.04 and later.  However, a recent issue has been detected on Ubuntu 18.04.2. which break the installation of xRDP package.   Version 0.5.2 of the script includes a simple logic process that will detect if you are running Ubuntu 18.04.2 and will install the necessary packages that are needed to have a succesful xRdp software.

Prerequisites

We assume that you have internet connection on the Ubuntu machine.  The internet connection is needed to download the necessary packages that will be installed on your system. To run this script, we would also assume that you are running Ubuntu 18.04 or later version. 

The script version 0.5.2

Important Note :

If you copy/paste the script, you might encounter some issues because font formatting might be not maintained during the copy/paste operation. Please ensure that format is  accurate before launching the script. A downloadable version of the script is available at the bottom of the post

Disclaimer : As usual, use this at your own risk !!

#!/bin/bash
#####################################################################################################
# Script_Name : Std-Xrdp-install-0.5.2.sh
# Description : Perform an automated standard installation of xrdp
# on ubuntu 18.04 and later
# Date : March 2019
# written by : Griffon
# Web Site :http://www.c-nergy.be - http://www.c-nergy.be/blog
# Version : 0.5.2
# History : 0.5.2 - Patch for Ubuntu 18.04.2 
#         : 0.5.1- Add support to Ubuntu 18.10 
#         : 0.5  - Add logic to enable sound redirection 
#                - re-write code logic to include functions
#                - Removed support for Ubuntu 17.10 as reached end of support
#         : 0.4  - Add logic to fix GDM lock screen + minor change
#         : 0.3  - Adding logic to fix theme and extensions for any users login through xrdp
#           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....
####################################################################################################

#---------------------------------------------------#
#  Detecting if Parameters passed to script .... 
#---------------------------------------------------#

while getopts g:s: option 
do 
 case "${option}" 
 in 
 g) fixGDM=${OPTARG};; 
 s) fixSound=${OPTARG};; 
 esac 
done 

#---------------------------------------------------#
# Script Version information Displayed              #
#---------------------------------------------------#

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

#--------------------------------------------------------------------------#
# -----------------------Function Section - DO NOT MODIFY -----------------#
#--------------------------------------------------------------------------#

#---------------------------------------------------#
# Function 0  - Patch Ubuntu 18.04.2
#---------------------------------------------------#

install_xservercore() 
{
echo
/bin/echo -e "\e[1;33m   !----------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;33m   !   Installing xserver-xorg-core Packages...Proceeding...  !\e[0m"
/bin/echo -e "\e[1;33m   !----------------------------------------------------------!\e[0m"
echo
sudo apt-get install xserver-xorg-core -y
echo
/bin/echo -e "\e[1;33m   !----------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;33m   !   Installing xserver-xorg-input-all pkg...Proceeding...  !\e[0m"
/bin/echo -e "\e[1;33m   !----------------------------------------------------------!\e[0m"
echo
sudo apt-get -y install xserver-xorg-input-all 
}


#---------------------------------------------------#
# Function 1  - Install xRDP Software.... 
#---------------------------------------------------#

install_xrdp() 
{
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 -y 
}

#---------------------------------------------------#
# Function 2 - Install Gnome Tweak Tool.... 
#---------------------------------------------------#

install_tweak() 
{
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 -y
}

#--------------------------------------------------------------------#
# Fucntion 3 - Allow console Access ....(seems optional in u18.04)
#--------------------------------------------------------------------#

allow_console() 
{
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
}

#---------------------------------------------------#
# Function 4 - create policies exceptions .... 
#---------------------------------------------------#

create_polkit()
{
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
}

#---------------------------------------------------#
# Function 5 - Fixing Theme and Extensions .... 
#---------------------------------------------------#

fix_theme()
{
echo
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;33m   !   Fix Theme and extensions...Proceeding...  !\e[0m"
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
echo

#Check if script has already run.... 
if grep -xq "#fixGDM-by-Griffon" /etc/xrdp/startwm.sh; then
 echo "Skip theme fixing as script has run at least once..."
else
#Set xRDP session Theme to Ambiance and Icon to Humanity if Ubuntu 18.04.x
if  [[ "$version" = *"Ubuntu 18.04"* ]];
then
sudo sed -i.bak "4 a #fixGDM-by-Griffon\ngnome-shell-extension-tool -e ubuntu-appindicators@ubuntu.com\ngnome-shell-extension-tool -e ubuntu-dock@ubuntu.com\n\nif [ -f ~/.xrdp-fix-theme.txt ]; then\necho 'no action required'\nelse\ngsettings set org.gnome.desktop.interface gtk-theme 'Ambiance'\ngsettings set org.gnome.desktop.interface icon-theme 'Humanity'\necho 'check file for xrdp theme fix' >~/.xrdp-fix-theme.txt\nfi\n" /etc/xrdp/startwm.sh
elif [[ "$version" = *"Ubuntu 18.10"* ]];
then
sudo sed -i.bak "4 a #fixGDM-by-Griffon\ngnome-shell-extension-tool -e ubuntu-appindicators@ubuntu.com\ngnome-shell-extension-tool -e ubuntu-dock@ubuntu.com\n\nif [ -f ~/.xrdp-fix-theme.txt ]; then\necho 'no action required'\nelse\ngsettings set org.gnome.desktop.interface gtk-theme 'Yaru'\ngsettings set org.gnome.desktop.interface icon-theme 'Yaru'\necho 'check file for xrdp theme fix' >~/.xrdp-fix-theme.txt\nfi\n" /etc/xrdp/startwm.sh
else 
echo "Error Occured somewhere...Exiting..."
exit
fi

fi
echo
}

#---------------------------------------------------#
# Function 6- Fixing GDM - As an Option .... 
#---------------------------------------------------#
fix_gdm()
{
echo
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;33m   !   Fix for GDM Lock Screen color...          !\e[0m"
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
echo
# Step 1 - Install prereqs for compilation later on
sudo apt-get -y install libglib2.0-dev-bin
sudo apt-get -y install libxml2-utils

# extract gresource info (from url...)
workdir=${HOME}/shell-theme
if [ ! -d ${workdir}/theme ]; then
  mkdir -p ${workdir}/theme
  mkdir -p ${workdir}/theme/icons

fi
gst=/usr/share/gnome-shell/gnome-shell-theme.gresource
 
for r in `gresource list $gst`; do
        gresource extract $gst $r >$workdir/${r#\/org\/gnome\/shell/}
done

/bin/echo -e "\e[1;33m    |-| Creating XML File...   \e[0m"
# create the xml file 
bash -c "cat >${workdir}/theme/gnome-shell-theme.gresource.xml" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/org/gnome/shell/theme">
    <file>calendar-arrow-left.svg</file>
    <file>calendar-arrow-right.svg</file>
    <file>calendar-today.svg</file>
    <file>checkbox-focused.svg</file>
    <file>checkbox-off-focused.svg</file>
    <file>checkbox-off.svg</file>
    <file>checkbox.svg</file>
    <file>close-window.svg</file>
    <file>corner-ripple-ltr.png</file>
    <file>corner-ripple-rtl.png</file>
    <file>dash-placeholder.svg</file>
    <file>gnome-shell.css</file>
    <file>gnome-shell-high-contrast.css</file>
    <file>no-events.svg</file>
    <file>no-notifications.svg</file>
    <file>noise-texture.png</file>
    <file>page-indicator-active.svg</file>
    <file>page-indicator-inactive.svg</file>
    <file>page-indicator-checked.svg</file>
    <file>page-indicator-hover.svg</file>
    <file>process-working.svg</file>
    <file>toggle-off-us.svg</file>
    <file>toggle-off-intl.svg</file>
    <file>toggle-on-hc.svg</file>
    <file>toggle-on-us.svg</file>
    <file>toggle-on-intl.svg</file>
  </gresource>
</gresources>
EOF
cd ${workdir}/theme
/bin/echo -e "\e[1;33m    |-| Modify Css...   \e[0m"
sed -i -e 's/background: #2e3436/background: #2c00e1/g' ~/shell-theme/theme/gnome-shell.css 

##Delete the file noise-texture.png (grey one)
rm ${workdir}/theme/noise-texture.png

/bin/echo -e "\e[1;33m    |-| Download Purple image file...   \e[0m"
#Download the noise-texture.png with purple background 
wget http://www.c-nergy.be/downloads/noise-texture.png

/bin/echo -e "\e[1;33m    |-| Compile Resource File...   \e[0m"
#Compile file and copy to correct location....
cd ${workdir}/theme
glib-compile-resources gnome-shell-theme.gresource.xml 

/bin/echo -e "\e[1;33m    |-| Copy file to target location...   \e[0m"

# make a backup of the file and copy the file....
sudo cp /usr/share/gnome-shell/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme.gresource.bak
sudo cp ${workdir}/theme/gnome-shell-theme.gresource /usr/share/gnome-shell/gnome-shell-theme.gresource
echo

}

#---------------------------------------------------------#
# Function 7 - Enable Sound Redirection - As an option..  #
#---------------------------------------------------------#
enable_sound()
{
echo
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;33m   !   Enabling Sound Redirection...             !\e[0m"
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m"
echo

# Step 1 - Install xrdp-pulseaudio-installer package
sudo apt-get install xrdp-pulseaudio-installer  -y

# Step 2 - Enable Source Code Repository
sudo apt-add-repository -s 'deb http://be.archive.ubuntu.com/ubuntu/ '$codename' main restricted'
sudo apt-add-repository -s 'deb http://be.archive.ubuntu.com/ubuntu/ '$codename' restricted universe main multiverse'
sudo apt-add-repository -s 'deb http://be.archive.ubuntu.com/ubuntu/ '$codename'-updates restricted universe main multiverse'
sudo apt-add-repository -s 'deb http://be.archive.ubuntu.com/ubuntu/ '$codename'-backports main restricted universe multiverse'
sudo apt-add-repository -s 'deb http://be.archive.ubuntu.com/ubuntu/ '$codename'-security main restricted universe main multiverse'
sudo apt-get update

# Step 3 - Download pulseaudio source in /tmp directory
cd /tmp
sudo apt source pulseaudio 

# Step 4 - Compile
pulsever=$(pulseaudio --version | awk '{print $2}')

cd /tmp/pulseaudio-$pulsever
sudo ./configure

# Step 5 - Create xrdp sound modules

cd /usr/src/xrdp-pulseaudio-installer
sudo make PULSE_DIR="/tmp/pulseaudio-$pulsever"

# Step 6 - copy files to correct location 

sudo install -t "/var/lib/xrdp-pulseaudio-installer" -D -m 644 *.so
echo

}
#--------------------------------------------------------------------------#
# -----------------------END Function Section             -----------------#
#--------------------------------------------------------------------------#

#--------------------------------------------------------------------------#
#------------                 MAIN SCRIPT SECTION       -------------------#  
#--------------------------------------------------------------------------#

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

version=$(lsb_release -sd) 
codename=$(lsb_release -sc) 

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

if  [[ "$version" = *"Ubuntu 18.04"* ]];
then
/bin/echo -e "\e[1;32m       |-| Ubuntu Version : $version\e[0m"
echo
elif [[ "$version" = *"Ubuntu 18.10"* ]];
then
/bin/echo -e "\e[1;32m       |-| Ubuntu Version : $version\e[0m"
echo
else
/bin/echo -e "\e[1;31m  !------------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;31m  ! Your system is not running Ubuntu 18.04 Edition and later  !\e[0m"
/bin/echo -e "\e[1;31m  ! The script has been tested only on Ubuntu 18.04 and later  !\e[0m"
/bin/echo -e "\e[1;31m  ! The script is exiting...                                   !\e[0m"              
/bin/echo -e "\e[1;31m  !------------------------------------------------------------!\e[0m"
echo
exit
fi

/bin/echo -e "\e[1;33m   |-| Detecting Parameters        \e[0m"

#Detect if argument passed
if [ "$fixSound" = "yes" ]; 
then 
/bin/echo -e "\e[1;32m       |-| Sound Redirection Option...: [YES]\e[0m"
else
/bin/echo -e "\e[1;32m       |-| Sound Redirection Option...: [NO]\e[0m"
fi

if [ "$fixGDM" = "yes" ]; 
then 
/bin/echo -e "\e[1;32m       |-| gdm fix Option.............: [YES]\e[0m"
else
/bin/echo -e "\e[1;32m       |-| gdm fix Option.............: [NO]\e[0m"
fi
echo


#---------------------------------------------------------#
# Step 2 - Executing the installation & config tasks .... #
#---------------------------------------------------------#

echo
/bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;36m   !   Installation Process starting....                         !\e[0m"
/bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
echo
/bin/echo -e "\e[1;33m   |-| Proceed with installation.....       \e[0m"
echo 

if  [[ "$version" = *"Ubuntu 18.04.2"* ]];
then
/bin/echo -e "\e[1;32m       |-| Ubuntu Version : $version\e[0m"
echo
/bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;36m   !  Applying Installation Patch for Ubuntu 18.04.2 Only        !\e[0m"
/bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
echo
echo
install_xservercore
install_xrdp
install_tweak
allow_console
create_polkit
fix_theme
else
install_xrdp
install_tweak
allow_console
create_polkit
fix_theme
fi

if [ "$fixGDM" = "yes" ]; 
then 
fix_gdm
fi

if [ "$fixSound" = "yes" ]; 
then 
enable_sound
fi


#---------------------------------------------------#
# Step 9 - 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.A Reboot Might be required...         !\e[0m"
/bin/echo -e "\e[1;36m   ! Written by Griffon - March 2019 - Ver 0.5.2 - Std-Xrdp-Install-0.5.2.sh   !\e[0m"
/bin/echo -e "\e[1;36m   !---------------------------------------------------------------------------!\e[0m"
echo

 

How to Use the Script

The script usage has not changed since the previous version.  So, instead of repeating the same information, we will summarize the necessary actions and options that are available with this version of the script.

Step 1 – Set Execute Right on the script

Download the Std-Xrdp-install-0.5.2.sh script to your system.  You need to mark the script as executable . To do this, perform the following action in a terminal console

chmod +x  ~/Downloads/Std-Xrdp-Install-0.5.2.sh

Note : Adjust the path where the Std-Xrdp-Install-0.5.2.sh script to reflect your environment

Step 2 – How to execute the script ? 

Like the previous version of the script, you can decide to execute the script with no parameters to perform a “standard installation” or pass some parameters to get more features implemented in your xrdp installation.  Before running it, ensure that internet connection is available (so you can download the necessary packages needed for the installation) 

Standard way

To perform a standard installation, you execute the script with no parameters.  Open a Terminal console, browse to the location where the script has been downloaded and issue the following command 

 ./Std-Xrdp-Install-0.5.2.sh

When the xrdp installation package will start, you be requested to enter your password. Provide the password and proceed with the installation. Wait for completion of the script.  The machine will not reboot automatically when done so you can review the actions performed by the script….

Std-Install-10

Click on Picture for Better Resolution

This installation mode will provide no fix for the GDM visual issue (see here) or  no sound redirection (see here).   At this stage, you will be able to perform a remote desktop connection and work against your Ubuntu machine. However, if at a later stage, you want to implement the additional features (GDM fix and Sound redirection), you could re-run the script and pass the parameters to enable the options selected.   The script will re-run and pass the new parameters and your system should be working with the additional features enabled. 

Advanced way

To enable additional features within your remote desktop session,  it’s possible to pass some parameters (in any orders) to the script.  The script support up to two parameters.  When running the script, a user can decide to enable fix for the GDM lock screen or enable sound redirection or enable both options.   The following paragraph explain which parameters can be used….

To implement the lock screen fix for GDM within the xrdp session, use this syntax

./Std-Xrdp-Install-0.5.2.sh -g yes

To implement the sound redirection fix  within the xrdp session, use this syntax

./Std-Xrdp-Install-0.5.2.sh -s yes

To implement both  the sound redirection fix  and gdm lock screen fix within the xrdp session, use this syntax

./Std-Xrdp-Install-0.5.2.sh -s yes -g yes 

When script execution is completed, the machine will not reboot so you can review the installation and detect possible elements that’s preventing the script execution.  At completion, it’s recommended to reboot the machine so the changes made to the system can be applied accordingly. 

Step 3 – Test your configuration 

After the script has run and after the reboot, first login locally on the machine and ensure that you can use keyboard and mouse. Then, logoff from the system and try to perform a remote connection.  If everything is ok, you should be able to access your desktop through remote desktop protocol 

Download the Script 

Please download the script :  Std-Xrdp-Install-0.5.2.zip

Final Notes 

This is it for this post !  

As usual, we will kindly ask you to try, test and play around with this version and provide feedback and possibly bugs you might have detected.  

The script has not changed and only integrate a patch that basically fixing an issue detected with Ubuntu 18.04.2.  The script version 0.5.2 has been updated and can be used against Ubuntu 18.04 and Ubuntu 18.10.  Please note that the custom script needs also to be updated in order to integrate a minor fix for Ubuntu 18.04.2.  The custom script will perform the xrdp installation without any issues but the keyboard and mouse input might get lost afterwards.  This is why we want to update the custom script as well.   The next post will be providing the updated custom script version.  Finally, as Ubuntu 19.04 is on its way, a new version of the script will need to be prepared as well. 

As you can see, we are quite busy with xRDP and Ubuntu operating system and plenty of other technologies…It’s becoming too much  🙂 

Till next time 

See ya

References & History 

If you are interested in digging into the history and evolution of the Std-Xrdp-Install script, have a look at the following posts

 

2 thoughts on “xRDP – Install xRDP the easy way (Scripted Installation – Version 0.5.2)

  1. Hi!

    This version didn’t work either.

    It removed a lot of packages, including “ubuntu-desktop” and “xorg”…

    Now, at the login screen after trying to connect to RDP from a macOS, there are no fonts.

    This “xorgxrdp” dependency issue is clearly an Ubuntu bug that should never happen in an LTS release! Snap FTW?!

    Anyway, I think that it might be better to rebuild xrdp / xorgxrdp packages, even back porting it from Disco, to try to link it against new deps…

    I didn’t give up on XRDP, yet! I wan this thing. lol

  2. @Thiago,

    Just to be complete…. and provide info for other users
    I have tested this version with the quick and dirty fix… It will work and you should be able to perform the remote connection to your Ubuntu machine. However, you are right, this version will remove a lot of packages and older packages will be used instead. Even if the display shows removing the ubuntu desktop, actually, nothing happens…. This is not the best way to handle this and we will integrate your packages in our installation script (to be delivered soon 🙂

    Till next time
    See ya

Leave a Reply