xRDP – Next Version of xrdp-installer script – Preview Version

  The script hereafter is outdated and has been replaced by a newer version.  Please Check the Download page for latest version

Hello World, 

Lately, we have been working on a new version of the xrdp-installer script.  Indeed, we have seen a lot of requests from readers to adapt the script to support more Linux specific flavors.  So far, the latest version of the xrdp-installer script (ver. 1.2.3) is tested and validated against one specific Ubuntu flavor  only (the standard Ubuntu with Gnome Desktop).   Since we have developed a Debian version of the script, we have decided to give it a try and adapt the script in order to include more Linux editions and more Desktop interfaces.  

So, in this post, we will present the changes we have introduced and we will publish the preview version of the script.  The script should be still considered as work in progress (i.e. preview) and you should not run it on your production systems.  Use it at your own risk !!!

So, let’s go ! 

Overview

The xrdp-installer-preview-2021.sh script ease the installation and post-configuration actions of xRDP on top of Ubuntu Operating System.  However, this preview script  introduce many changes that might help installing and configuring xrdp against more Linux distribution and more Desktop Interfaces.   

This script is still under development and more extensive testing is needed in order to release it as the next version of the xrdp-installer script 

What’s new in this release (Preview Version ) ?

The script structure and code has been changed quite a lot in this release and introduces some noticeable changes that you should be aware of.   The following changes have been introduced

Removed Ubuntu 20.10 as supported OS !

Since Ubuntu 20.10  will reach end of life in July 2021, we have decided to update the script and to remove support for Ubuntu 20.10.  By design, the script will not execute on Ubuntu 20.10 Edition.   If you still want to run the script against Ubuntu 20.10, you can update the script and add the support for this specific version

Added Pop!_OS as supported OS (Experimental)

Since we have been requested to publish some posts around Pop!_OS, we have included support for Pop!_OS operating system (20.04,21.04).  The script will not run against Pop!_OS 20.10. The script will probably work against this edition but we want to provide a consistent experience.  If Ubuntu 20.10 is reaching end of life, we would assume that Pop!_OS 20.10 will also reach end of support soon.  If you still want to run the script against Pop!_OS 20.10, you can update the script and add the support for this specific version.

Added Debian as supported OS (Experimental)

Recently, we have released a debian-xrdp-installer-1.0 script version that perform the installation and configuration of xrdp software against Debian Operating system.  It seems logical for us to try to merge this Debian specific script into a more generic script.  This is why the script preview version is also including support for Debian Operating system.  

Detecting Desktop Interface in use  (Experimental) 

This version of the script will try to detect the Desktop Interface runing (Gnome,KDE,LXDE,…) and adapt the post configuration actions accordingly.  Since this is still work in progress status, we have not tested all the possible combinations. You can always perform some tests and provide feedback to us. Based on this, we will see if it would be possible to adapt and support more Desktop interface. 

Fixing sound xrdp sink not starting (Not Included Yet/Experimental) 

xRDP can redirect sound if you compile the necessary modules.  Since Ubuntu 19.10, there was a recurring issue where the xrdp sink modules were not loaded automatically in the remote session and a user had to run a command manually (i.e. pulseaudio -k or pulseaudio – -start).  This version of the script will try to tackle this issue.   The preview script does not include this feature yet and might not be included in the final version….

Allow local and remote connection for users (Not Included Yet/Experimental) 

By design, xRDP will allow a specific user to connect either locally or remotely but not both at the same time.  More explicitly, if a user (let’s call him Jim) is logged on locally on the Ubuntu machine where xRDP software is installed, the same user (Jim) will not be able to acquire a desktop session while performing the xRDP Session.  Jim will see only a black screen or will be disconnected after a few seconds.   This is the default behavior !  

We have presented some workarounds to enable concurrent connections.  This script might includes some of these workarounds technics in order to allow local and remote connections.  Since there are some limitations and possible issues with the Wayland Display Server, this feature might not be included in the final version of the script or it will be offered but still in experimental mode.  Users will need to run this option at their own risks !!! 

Minor Bug Fixing, Code structure changes, Cleaning up code 

We have found some small bugs or minor issues that have been fixed or improved in this release. This preview version includes the necessary code to detect the desktop interface in used while running the script. This means that in theory the script could be run against a Kubuntu machine and the xrdp post configuration actions would be performed accordingly.  To detect “supported” OS, the script is now using a function which has been moved at the top of the script.   Finally, since each operating system and/or Desktop interface might have specific settings, there is a new function created that would check if some additional prerequisites are needed before moving forward…  As you can see, there are some changes that have been introduced in this preview version…

Download the Script 

The script can be download at this location  :    xrdp-installer-preview-2021.zip 

How to Use the Script

A downloadable version of the script is available at the bottom of the post

The xrdp-installer-preview-2021 script will work in a similar way as the previous versions. The following section will explain how to download, extract, set executable mode and perform the installation using the script.  The script provides some switches that can be used to customize the installation process.

So, let’s see how this would be working…. 

Disclaimer

The script is provided AS IS.  Use it at your own risk !!!   This script is a preview version (i.e. beta version!!!).  

Prerequisites and assumptions  

The following conditions should be met in order to have the best results while using the script

  • We assume that your machine is connected to internet while performing the installation.  This is needed as additional packages and software needs to be downloaded and installed on your Ubuntu machine
  • The script runs against a supported Operating system (Ubuntu 18.04.x, 20.04, 21.04, Pop!_OS, Debian)
  • The script can detect different Desktop Interface and will try to adapt the xrdp software accordingly (experimental)
  • Sound functionality is present on the computers if you sound feature is available as well

Script version & Supported Ubuntu Version

The xrdp-installer-preview-2021.sh script will support the following Ubuntu operating system version 

  • Ubuntu 18.04.x; 20.04,21.04
  • Pop!_OS 20.04.x,21.04
  • Debian ( recommended Debian 10) 

Step 1 – Download the script 

To download the script, you have multiple options.   You can from a Terminal issue the following command 

wget https://www.c-nergy.be/downloads/xRDP/xrdp-installer-preview-2021.zip

You can also simply use your browser and click on the link to download the script :  

  •  xrdp-installer-preview-2021.zip

Step 2 – unzip the file 

After downloading the zip package containing the file, you will need to unzip it first. To unzip the package, you can use the Terminal console and issue the following command 

unzip xrdp-installer-preview-2021.zip 

You can also use the GUI and the Nautilus file manager to select the downloaded package, right-click on it and select the option Extract Here

Step 2 – Set Execute Right on the script

Download the xrdp-installer-preview-2021.sh script to your system, extract content and mark it as executable . To do this, perform the following action in a terminal console

chmod +x  ~/Downloads/xrdp-installer-preview-2021.sh

Note : Adjust the path where the xrdp-Installer-preview-2021.sh script to reflect your environment

Step 2 – Run as normal user 

The script needs to be run as a normal user.  The script will start running and will prompt you for password when sudo actions are initiated.  If you run the script as root or using sudo command, the Download folder does not exist for the root user and the script fails to run as expected.   To overcome this situation, the script also check which user is executing the script. If the script is run under sudo or root accounts, a warning message will be displayed and the script will not execute

Step 3 – Switches and parameters 

The xrdp-installer-preview-2021.sh script can be executed as is (with no parameters or switches). This will perform a standard (and basic) installation of xRDP.  No sound or custom xrdp login script will be made available.  However, remote desktop, drive redirection and clipboard redirection would be available with this installation mode.  

The xrdp-installer-preview-2021.sh script accept also some additional parameters that will help customize the xrdp installation and enable additional features.  The script provides the following parameters 

--help or -h          => will display a basic help menu
--sound or -s         => will enable sound redirection 
--loginscreen or -l   => will customize the xRDP login screen 
--remove or -r        => will remove the xrdp package 
--custom or -c        => will perform a custom installation (i.e. compiled from sources)

Step 4 – Perform xRDP installation using the script 

The following sections will provide some examples and scenario on how you can use the script….. 

Standard Installation – No Parameter

As mentioned above, you can decide to use the default xrdp package available in the Ubuntu repository and perform a basic installation which will provide you remote desktop capability and will also customize the remote sesssion.  The script will ensure that the same look n’ feel will be maintained when the user logs on locally or remotely. 

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 

 ./xrdp-installer-preview-2021.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….

Standard Installation with Parameters

The script can be used to perform a standard installation and still passes some parameters to get the most of the xRDP packages and their features.  For all the Ubuntu versions, we could use the following combination of parameters 

./xrdp-installer-preview-2021.sh -s      (this would enable the sound redirection) 
./xrdp-installer-preview-2021.sh -l      (this would customize the xrdp login screen -see here)

Obviously, you can combine the switches (any order) to have more features enabled  

./xrdp-installer-preview-2021.sh -s -l      (this would enable the sound redirection and customize the xrdp login screen)

Important Notes

The script can be run multiple times on the same machine.  If you have run initially the script with no parameters but you decide afterward to enable additional features, the script can be re-executed and the additional features will be enabled.  

Custom Installation – Default Installation 

Custom installation script is really flexible. Custom installation means that the script will compile the xrdp package from the source binaries. The custom installation script always uses the latest xrdp package version available 

To perform a custom installation, you will need at minimum to pass one parameter.  The following command line shows you how to perform a custom installation  

./xrdp-installer-preview-2021.sh -c     (this would perform a custom installation but will not enabled adv features like sound redirection or custom login screen)

Custom Installation – Additional Options  

If a user wants to enable additional features, you will pass some additional parameters as shown in the following examples 

./xrdp-installer-preview-2021.sh -c -s     (this would perform a custom install and enable sound redirection)
./xrdp-installer-preview-2021.sh -c -l     (this would perform a custom install and customize xrdp login screen)
./xrdp-installer-preview-2021.sh -c -l -s  (this would perform a custom install, enable sound and customize login screen)

Important Notes

The script can be run multiple times on the same machine.  If you have run initially the script with no parameters but you decide afterward to enable additional features, the script can be re-executed and the additional features will be enabled.  

Remove Installation option

This version of the script also ship with the option to remove xRDP package.  The removal option should be only used  if you have uses this version of this script to perform the installation.  To remove the xrdp package, you would simply execute the following command  

./xrdp-installer-preview-2021.sh -r     (to remove the xrdp packages)

Step 5 – Test your configuration 

After the script has run and after the reboot/shutdown and start process, it’s time to test and see if you can indeed perform a smooth remote connection to your Ubuntu machine.  Start your favorite rdp client and simply enter your credentials and start testing your installation.  If everything is ok, you will see a similar Desktop interface where Gnome Desktop is used and the Dock is visible. 

Known issues and limitations 

Known Issues 

Drive Redirection  

To redirect your drives to your xrdp remote session, you have to ensure that the only option selected in the local resources tab are the Clipboard option and the drive option. Check the screenshot below and ensure that you have the same settings.

Click on picture for better resolution

Click on picture for better resolution

When these settings have been set accordingly, you should see the thin client folder populated with redirected drives coming from your Windows machine.

Sound redirection Issue

If the Sound redirection option has been selected, rebooting the Ubuntu system is not enough and the sound redirection might not work.  if the sound redirection option has been selected, you will have to shutdown your Ubuntu machine and then start it again in order to ensure that the sound redirection feature would work as expected. 

Sound redirection is not working as expected on Ubuntu 19.10 and later  The modules are created and copied to the correct location. However, the xrdp sink modules are never loaded in the remote session or randomly loaded in the remote session.   To fix this, you simply need to execute the following command within your remote session and the sound will start working 

pulseaudio -k

Keyboard layout & Mate Desktop Interface    

This might affect also other Desktop interfaces (like xfce,lubuntu, cinnamon…). Gnome and Kde does not seems to be affected by this issue…..

If you are using English keyboard, you will not be affected by this problem.  However, if you are like me and you are using a non-English keyboard, you will notice that when connected remotely to your Mate desktop session through xRDP software, the keyboard layout default is set to English Keyboard. This can be quite annoying. To fix that, you will need to add within the remote desktop session the keyboard layout you want to use.  In a next release of the script, we will fix this issue directly within the script. 

So, as you can see hereafter on the screenshot, we are using the Belgian Keyboard when connected locally on the machine 

Click on Picture for better Resolution

When performing the remote desktop connection, we check again the login screen and we can see that the English keyboard is listed.  We have removed it and add the belgian keyboard to solve this issue….However, it seems that when you reconnect, you keyboard layout will not stick and you will have to perform the change each time…. 

Click on Picture for better Resolution

Limitations

Switch between standard and Custom install

This version of the script can be run multiple times on the same machine.  However, because of this new behavior, you cannot perform a standard installation and then decide to perform the custom installation.  Once you have selected your installation mode, you will have to stick to it.  This is kind of checked by the script.  

So, if you have performed a standard installation but afterwards you might want to use the custom installation option, the script will ignore the request.  If you want to move from standard install mode to custom mode (or vice versa), the correct process is 

  • remove xrdp (using the xrdp-installer-preview-2021.sh -r option) 
  • perform a new installation using your selected installation mode (standard or custom install mode) 

Download the Script 

The script can be download at this location  :    xrdp-installer-preview-2021.zip 

Final Notes

This is it for this post !   As you can see, this script tries to covers more OS versions and desktop interfaces.  Obviously, since we trying to include support for more flavors and desktop interfaces, additional issues and problems will raise.   If our future tests and validation process are satisfactory, this preview script could become the next (major) version of the xrdp-installer script. 

Please if you have time or want to help us in creating the best xrdp installer script, download the script, test it and provide constructive feedback.  If you find a bug or an issue with the script, let us know as well so we can try to fix it. 

Till next time

Annex – The Script Source code 

#!/bin/bash
#####################################################################################################
# Script_Name : xrdp-installer-Preview.sh
# Description : Perform xRDP installation on Ubuntu 18.04,20.4,20.10,21.04 and perform
#               additional post configuration to improve end user experience
# Date : June 2021
# written by : Griffon
# WebSite :http://www.c-nergy.be - http://www.c-nergy.be/blog
# Version : Preview  
# History : Preview  - Removing support for Ubuntu 20.10 (End of Support soon)
#                 - Added Support Debian (Need more testing !!!)
#                 - Added support for Pop!_0S (Need more testing !!!)
#                 - Code Changes to detect Desktop Interface in use  
#                 - Reworked code for xrdp removal option 
#                 - Improved Std vs Custom installation detection process
#                 - Added support for Different Desktop Interfaces (More testing needed)
#                 - General Code structure re-worked to add more OS version and Desktop interface support  
#                 - Fixed Minor Bug(s)  
#         : 1.2.3 - Adding support for Ubuntu 21.04 
#                 - Removing Support for Ubuntu 16.04.x (End Standard Support)
#                 - Delete xrdp and xorgxrdp folder when remove option selected
#                 - Review remove function to detect hwe package U18.04
#                 - Review, Optimize, Cleanup Code 
#         : 1.2.2 - Changing Ubuntu repository from be.archive.ubuntu.com to archive.ubuntu.com
#                 - Bug Fixing - /etc/xrdp/xrdp-installer-check.log not deleted when remove option   
#                   selected in the script - Force Deletion (Thanks to Hiero for this input)     
#                 - Bug Fixing - Grab automatically xrdp/xorgxrdp package version to avoid     
#                   issues when upgrade operation performed (Thanks to Hiero for this input)     
#         : 1.2.1 - Adding Support to Ubuntu 20.10 + Removed support for Ubuntu 19.10
#           1.2   - Adding Support to Ubuntu 20.04 + Removed support for Ubuntu 19.04
#                 - Stricter Check for HWE Package (thanks to Andrej Gantvorg)
#                 - Changed code in checking where to copy image for login screen customization 
#                 - Fixed Bug checking SSL group membership 
#                 - Updating background color xrdp login screen 
#                 - Updating pkgversion to x.13 for checkinstall process
#         : 1.1   - Tackling multiple run of the script 
#                 - Improved checkinstall method/check ssl group memberhsip
#                 - Replaced ~/Downloads by a variable                 
#         : 1.0   - Added remove option + Final optimization                
#         : 0.9   - updated compile section to use checkinstall
#         : 0.8   - Updated the fix_theme function to add support for Ubuntu 16.04 
#         : 0.7   - Updated prereqs function to add support for Ubuntu 16.04
#         : 0.6   - Adding logic to detect Ubuntu version for U16.04 
#         : 0.5   - Adding env variable Fix 
#         : 0.4   - Adding SSL Fix 
#         : 0.3   - Adding custom login screen option  
#         : 0.2   - Adding new code for passing parameters  
#         : 0.1   - Initial Script (merging custom & Std)       
# Disclaimer : Script provided AS IS. Use it at your own risk....
#              You can use this script and distribute it as long as credits are kept 
#              in place and unchanged   
####################################################################################################
#---------------------------------------------------#
# Variables and Constants                           #
#---------------------------------------------------#

#--Automating Script versioning 
ScriptVer="preview-2021"

#--Detecting  OS Version 
version=$(lsb_release -sd)
codename=$(lsb_release -sc)
Release=$(lsb_release -sr)

#--Detecting variable related to Desktop interface and Directory path  
DesktopVer="$XDG_CURRENT_DESKTOP" 
SessionVer="$GNOME_SHELL_SESSION_MODE"
ConfDir="$XDG_DATA_DIRS"

#Define Dwnload variable to point to ~/Downloads folder of user running the script
Dwnload=$(xdg-user-dir DOWNLOAD)

#Initialzing other variables
modetype="unknown"

#--------------------------------------------------------------------------#
# -----------------------Function Section - DO NOT MODIFY -----------------#
#--------------------------------------------------------------------------#
#---------------------------------------------------#
# Function 0  - check for supported OS version  ....#
#---------------------------------------------------#

check_os()
{
echo
/bin/echo -e "\e[1;33m   |-| Detecting OS version        \e[0m"
case $version in
  *"Ubuntu 18.04"*)
   /bin/echo -e "\e[1;32m       |-| OS Version : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
    ;;

   *"Ubuntu 20.04"*)
   /bin/echo -e "\e[1;32m       |-| OS Version : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
    ;;

   *"Ubuntu 21.04"*)
   /bin/echo -e "\e[1;32m       |-| OS Version : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
    ;;

   *"Pop!_OS 20.04"*)
   /bin/echo -e "\e[1;32m       |-| OS Version : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
    ;;

  *"Pop!_OS 21.04"*)
   /bin/echo -e "\e[1;32m       |-| OS Version : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
    ;;

  *"Debian"*)
   /bin/echo -e "\e[1;32m       |-| OS Version  : $version\e[0m"
   /bin/echo -e "\e[1;32m       |-| Desktop Version : $DesktopVer\e[0m"
   ;;

  *)
    /bin/echo -e "\e[1;31m  !--------------------------------------------------------------!\e[0m"
    /bin/echo -e "\e[1;31m  ! Your system is not running a supported version !             !\e[0m"
    /bin/echo -e "\e[1;31m  ! The script has been tested only on the following versions    !\e[0m"
    /bin/echo -e "\e[1;31m  ! 18.04.x/20.04.x/21.04/Debian 10/Pop!_OS                      !\e[0m"
    /bin/echo -e "\e[1;31m  ! The script is exiting...                                     !\e[0m"             
    /bin/echo -e "\e[1;31m  !--------------------------------------------------------------!\e[0m"
    echo
    exit
    ;;
esac
echo
}

#---------------------------------------------------#
# Function 1  - check xserver-xorg-core package....
#---------------------------------------------------#

check_hwe()
{
Release=$(lsb_release -sr)
echo
/bin/echo -e "\e[1;33m |-| Detecting xserver-xorg-core package installed \e[0m"
xorg_no_hwe_install_status=$(dpkg-query -W -f ='${Status}\n' xserver-xorg-core 2>/dev/null)
xorg_hwe_install_status=$(dpkg-query -W -f ='${Status}\n' xserver-xorg-core-hwe-$Release 2>/dev/null) 

if [[ "$xorg_hwe_install_status" =~ \ installed$ ]]
then
# – hwe version is installed on the system
/bin/echo -e "\e[1;32m  |-| xorg package version: xserver-xorg-core-hwe \e[0m"
HWE="yes"
elif [[ "$xorg_no_hwe_install_status" =~ \ installed$ ]]
then
/bin/echo -e "\e[1;32m  |-| xorg package version: xserver-xorg-core \e[0m"
HWE="no"
else
/bin/echo -e "\e[1;31m  |-| Error checking xserver-xorg-core flavour \e[0m"
exit 1
fi
}

#---------------------------------------------------#
# Function 2  - Version specific actions needed....
#---------------------------------------------------#

PrepOS()
{
echo 
/bin/echo -e "\e[1;33m   |-| Custom actions based on OS Version....       \e[0m" 
if [[ *"$version"* = *"Debian"*  ]]
then
 #Disable cdrom source.list to avoid prompt during install # DEBIAN SPECIFIC
 sudo sed -i 's/deb cdrom:/#deb cdrom:/' /etc/apt/sources.list
 sudo apt-get update
fi

##--Need to use Variables !!!!! 

if [[ *"$version"* = *"Debian"*  ]]
then
    CustomPix="griffon_logo_xrdpd.bmp"
    CustomColor="27354D"
else 
    CustomPix="griffon_logo_xrdp.bmp"
    CustomColor="4F194C"
fi

}

############################################################################
# INSTALLATION MODE : STANDARD
############################################################################
#---------------------------------------------------#
# Function 3  - Install xRDP Software....
#---------------------------------------------------#
install_xrdp()
{
echo 
/bin/echo -e "\e[1;33m   |-| Installing xRDP packages       \e[0m"
echo 
if [[ $HWE = "yes" ]] && [[ "$version" = *"Ubuntu 18.04"* ]];
then
    sudo apt-get install xrdp -y
    sudo apt-get install xorgxrdp-hwe-18.04
else
    sudo apt-get install xrdp -y
fi
}

############################################################################
# ADVANCED INSTALLATION MODE : CUSTOM INSTALLATION
############################################################################

#---------------------------------------------------#
# Function 4 - Install Prereqs...
#---------------------------------------------------#
install_prereqs() {
echo 
/bin/echo -e "\e[1;33m   |-|Installing prerequisites packages       \e[0m" 
echo
#Debian Specific - add in source backport package to download necessary packages - Debian Specific
if [[ *"$version"* = *"Debian"*  ]]
then
sudo apt-get install -y software-properties-common
sudo apt-add-repository -s -y 'deb http://deb.debian.org/debian '$codename'-backports main'
sudo apt-get update 

#--Needed to be created manually or compilation fails 
sudo mkdir /usr/local/lib/xrdp/
fi

#--End Debian Specific --# 

#Install packages
sudo apt-get -y install git
sudo apt-get -y install libx11-dev libxfixes-dev libssl-dev libpam0g-dev libtool libjpeg-dev flex bison gettext autoconf libxml-parser-perl libfuse-dev xsltproc libxrandr-dev python3-libxml2 nasm fuse pkg-config git intltool checkinstall
echo

#-- check if no error during Installation of missing packages
if [ $? -eq 0 ]
then 
/bin/echo -e "\e[1;33m   |-| Preprequesites installation successfully       \e[0m"
else 
echo
echo
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;31m   !   Error while installing prereqs            !\e[0m"
/bin/echo -e "\e[1;31m   !   The Script is exiting....                 !\e[0m"
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
exit
fi

#-- check if hwe stack needed or not 
if [ $HWE = "yes" ];
then
    # - xorg-hwe-* to be installed
    /bin/echo -e "\e[1;32m       |-| xorg package version: xserver-xorg-core-hwe-$Release \e[0m"
    sudo apt-get install -y xserver-xorg-dev-hwe-$Release xserver-xorg-core-hwe-$Release    
else
    #-no-hwe
    /bin/echo -e "\e[1;32m       |-| xorg package version: xserver-xorg-core \e[0m"
    echo
    sudo apt-get install -y xserver-xorg-dev xserver-xorg-core
fi
}

#---------------------------------------------------#
# Function 5 - Download XRDP Binaries... 
#---------------------------------------------------#

get_binaries() { 
echo 
/bin/echo -e "\e[1;33m   |-| Downloading xRDP Binaries...Proceeding     \e[0m" 
echo
Dwnload=$(xdg-user-dir DOWNLOAD)
cd $Dwnload

#Check if xrdp folder already exists.  if yes; delete it and download again in order to get latest version
if [ -d "$Dwnload/xrdp" ] 
then
    sudo rm -rf xrdp
fi

#Check if xorgxrdp folder already exists.  if yes; delete it and download again in order to get latest version
if [ -d "$Dwnload/xorgxrdp" ] 
then
    sudo rm -rf xorgxrdp
fi

## -- Download the xrdp latest files
echo
/bin/echo -e "\e[1;32m       |-|  Downloading xRDP Binaries.....     \e[0m" 
echo
git clone https://github.com/neutrinolabs/xrdp.git
echo 
/bin/echo -e "\e[1;32m       |-|  Downloading xorgxrdp Binaries...     \e[0m" 
echo
git clone https://github.com/neutrinolabs/xorgxrdp.git
}

#---------------------------------------------------#
# Function 6 - compiling xrdp... 
#---------------------------------------------------#
compile_source() { 
echo 
/bin/echo -e "\e[1;33m   |-| Compiling xRDP Binaries...Proceeding     \e[0m" 
echo
cd $Dwnload/xrdp

#Get the release version automatically
pkgver=$(git describe  --abbrev=0 --tags  | cut -dv -f2)
sudo ./bootstrap
sudo ./configure --enable-fuse --enable-jpeg --enable-rfxcodec
sudo make

#-- check if no error during compilation 
if [ $? -eq 0 ]
then 
echo
/bin/echo -e "\e[1;32m       |-|  Make Operation Completed successfully....xRDP     \e[0m" 
echo
else 
echo
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;31m   !   Error while Executing make                !\e[0m"
/bin/echo -e "\e[1;31m   !   The Script is exiting....                 !\e[0m"
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
exit
fi

sudo checkinstall --pkgname=xrdp --pkgversion=$pkgver --pkgrelease=1 --default

#xorgxrdp package compilation
echo
/bin/echo -e "\e[1;32m       |-|  Make Operation Completed successfully....xorgxrdp     \e[0m" 
echo
cd $Dwnload/xorgxrdp

#Get the release version automatically
pkgver=$(git describe  --abbrev=0 --tags  | cut -dv -f2)
sudo ./bootstrap 
sudo ./configure 
sudo make

# check if no error during compilation 
if [ $? -eq 0 ]
then 
echo
/bin/echo -e "\e[1;33m   |-| Compilation Completed successfully...Proceeding    \e[0m"
echo
else 
echo
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
/bin/echo -e "\e[1;31m   !   Error while Executing make                !\e[0m"
/bin/echo -e "\e[1;31m   !   The Script is exiting....                 !\e[0m"
/bin/echo -e "\e[1;31m   !---------------------------------------------!\e[0m"
exit
fi

sudo checkinstall --pkgname=xorgxrdp --pkgversion=1:$pkgver --pkgrelease=1 --default

}

#---------------------------------------------------#
# Function 7 - create services .... 
#---------------------------------------------------# 

enable_service() {
echo
/bin/echo -e "\e[1;33m   |-| Creating and configuring xRDP services    \e[0m"
echo
sudo systemctl daemon-reload
sudo systemctl enable xrdp.service
sudo systemctl enable xrdp-sesman.service
sudo systemctl start xrdp

}

############################################################################
# COMMON FUNCTIONS - WHATEVER INSTALLATION MODE - Version Specific !!!
############################################################################

#--------------------------------------------------------------------------#
# Function 8 - Install Tweaks Utilty if Gnome desktop used (Optional) .... #
#--------------------------------------------------------------------------# 

install_tweak() 
{
echo
/bin/echo -e "\e[1;33m   |-| Checking if Tweaks needs to be installed....    \e[0m"
if [ "$DesktopVer" != "GNOME" ] 
then
/bin/echo -e "\e[1;32m       |-|  Gnome Tweaks not needed...Proceeding...     \e[0m" 
echo
else
/bin/echo -e "\e[1;32m       |-|  Installing Gnome Tweaks Utility...Proceeding... \e[0m" 
echo
    sudo apt-get install gnome-tweak-tool -y
fi
}

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

allow_console() 
{
echo
/bin/echo -e "\e[1;33m   |-| Configuring Allow Console Access...    \e[0m"
echo

# Checking if Xwrapper file exists
if [ -f /etc/X11/Xwrapper.config ]
then
    sudo sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.config
else
    sudo bash -c "cat >/etc/X11/Xwrapper.config" <<EOF
    allowed_users=anybody
EOF
fi
}

#---------------------------------------------------#
# Function 10 - create policies exceptions .... 
#---------------------------------------------------#

create_polkit()
{
echo
/bin/echo -e "\e[1;33m   |-| Creating Polkit exceptions rules...    \e[0m"
echo

#All Ubuntu versions,Debian Version, Pop OS version
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

#Not to apply to Ubuntu 18.04 version but to others....This caused an issue on Ubuntu 18.04 
if [[  "$version" !=  *"Ubuntu 18.04"* ]]; 
then
sudo bash -c "cat >/etc/polkit-1/localauthority/50-local.d/46-allow-update-repo.pkla" <<EOF
[Allow Package Management all Users]
Identity=unix-user:*
Action=org.freedesktop.packagekit.system-sources-refresh;org.freedesktop.packagekit.system-network-proxy-configure
ResultAny=yes
ResultInactive=yes
ResultActive=yes
EOF
fi

#-- KDE Desktop Specific  - can be detected only at run time of the script 
if [ "$DesktopVer" = "KDE" ];
then
sudo bash -c "cat >/etc/polkit-1/localauthority/50-local.d/47-allow-networkd.pkla" <<EOF
[Allow Network Control all Users]
Identity=unix-user:*
Action=org.freedesktop.NetworkManager.network-control
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF
fi
}

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

fix_theme()
{
echo
/bin/echo -e "\e[1;33m   |-| Fixing Themes and Extensions....    \e[0m"
echo

# Checking if script has run already 
if [ -f /etc/xrdp/startwm.sh.griffon ]
then
sudo rm /etc/xrdp/startwm.sh
sudo mv /etc/xrdp/startwm.sh.griffon /etc/xrdp/startwm.sh
fi 

#Backup the file before modifying it
sudo cp /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.griffon
echo
sudo sed -i "4 a #Improved Look n Feel Method\ncat <<EOF > ~/.xsessionrc\nexport GNOME_SHELL_SESSION_MODE=$SessionVer\nexport XDG_CURRENT_DESKTOP=$DesktopVer\nexport XDG_DATA_DIRS=$ConfDir\nEOF\n" /etc/xrdp/startwm.sh
echo
}

#---------------------------------------------------#
# Function 12 - Enable Sound Redirection .... 
#---------------------------------------------------#

enable_sound()
{
echo
/bin/echo -e "\e[1;33m   |-| Enabling Sound Redirection....    \e[0m"
echo
pulsever=$(pulseaudio --version | awk '{print $2}')
/bin/echo -e "\e[1;32m       |-| Install additional packages..     \e[0m" 

# Version Specific - adding source and correct pulseaudio version for Debian !!!  
if [[ *"$version"* = *"Debian"*  ]]
then

# Step 0 - Install Some PreReqs
sudo apt-get install libconfig-dev -y
sudo apt-get install git libpulse-dev autoconf m4 intltool build-essential dpkg-dev libtool libsndfile-dev libcap-dev -y libjson-c-dev
sudo apt build-dep pulseaudio -y
/bin/echo -e "\e[1;32m       |-| Download pulseaudio sources files..     \e[0m" 

# Step 1 -  Download pulseaudio source in /tmp directory - Debian source repo should be already enabled
cd /tmp
sudo apt source pulseaudio=$pulsever
else 
# Step 2 - Enable Source Code Repository
sudo apt-add-repository -s -y 'deb http://archive.ubuntu.com/ubuntu/ '$codename' main restricted'
sudo apt-add-repository -s -y 'deb http://archive.ubuntu.com/ubuntu/ '$codename' restricted universe main multiverse'
sudo apt-add-repository -s -y 'deb http://archive.ubuntu.com/ubuntu/ '$codename'-updates restricted universe main multiverse'
sudo apt-add-repository -s -y 'deb http://archive.ubuntu.com/ubuntu/ '$codename'-backports main restricted universe multiverse'
sudo apt-add-repository -s -y 'deb http://archive.ubuntu.com/ubuntu/ '$codename'-security main restricted universe main multiverse'
sudo apt-get update

# Step 3 - Install Some PreReqs
sudo apt-get install git libpulse-dev autoconf m4 intltool build-essential dpkg-dev libtool libsndfile-dev libcap-dev -y libjson-c-dev
sudo apt build-dep pulseaudio -y
/bin/echo -e "\e[1;32m       |-| Download pulseaudio sources files..     \e[0m" 

# Step 3 -  Download pulseaudio source in /tmp directory - Debian source repo should be already enabled
cd /tmp
sudo apt source pulseaudio
fi

/bin/echo -e "\e[1;32m       |-| compile pulseaudio sources files..     \e[0m" 

# Step 4 - Compile
cd /tmp/pulseaudio-$pulsever
sudo ./configure

# step 5 - Create xrdp sound modules
/bin/echo -e "\e[1;32m       |-| Compiling and building xRDP Sound modules...     \e[0m" 
sudo git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
sudo ./bootstrap 
sudo ./configure PULSE_DIR="/tmp/pulseaudio-$pulsever"
sudo make

#Step 6 copy files to correct location (as defined in /etc/xrdp/pulse/default.pa)
/bin/echo -e "\e[1;32m       |-| copy generated files in target folder....     \e[0m" 
cd /tmp/pulseaudio-$pulsever/pulseaudio-module-xrdp/src/.libs
sudo install -t "/var/lib/xrdp-pulseaudio-installer" -D -m 644 *.so
sudo install -t "/usr/lib/pulse-$pulsever/modules" -D -m 644 *.so
echo
}

#---------------------------------------------------#
# Function 13 - Custom xRDP Login Screen .... 
#---------------------------------------------------#

custom_login()

{
echo 
/bin/echo -e "\e[1;33m   |-| Customizing xRDP login screen       \e[0m" 
Dwnload=$(xdg-user-dir DOWNLOAD)
cd $Dwnload

#Check if script has run once...
if [ -f /etc/xrdp/xrdp.ini.griffon ]
then
sudo rm /etc/xrdp/xrdp.ini
sudo mv /etc/xrdp/xrdp.ini.griffon /etc/xrdp/xrdp.ini
fi 

#Backup file 
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.griffon

#chek if file exists if not - download it.... 
if [ -f "$CustomPix" ]
then
    /bin/echo -e "\e[1;32m       |-| necessary file already available...skipping   \e[0m"
else
    /bin/echo -e "\e[1;32m       |-| Downloading additional file...: logo_xrdp image   \e[0m"
    wget http://www.c-nergy.be/downloads/"$CustomPix"
fi

#Check where to copy the logo file
if [ -d "/usr/local/share/xrdp" ] 
then
    echo
    sudo cp $CustomPix /usr/local/share/xrdp
    sudo sed -i "s/ls_logo_filename=/ls_logo_filename=\/usr\/local\/share\/xrdp\/$CustomPix/g" /etc/xrdp/xrdp.ini
else
    sudo cp $CustomPix /usr/share/xrdp
    sudo sed -i "s/ls_logo_filename=/ls_logo_filename=\/usr\/share\/xrdp\/$CustomPix/g" /etc/xrdp/xrdp.ini
fi

sudo sed -i 's/blue=009cb5/blue=dedede/' /etc/xrdp/xrdp.ini
sudo sed -i 's/#white=ffffff/white=dedede/' /etc/xrdp/xrdp.ini
sudo sed -i 's/#ls_title=My Login Title/ls_title=Remote Desktop for Linux/' /etc/xrdp/xrdp.ini
sudo sed -i "s/ls_top_window_bg_color=009cb5/ls_top_window_bg_color=$CustomColor/" /etc/xrdp/xrdp.ini
sudo sed -i 's/ls_bg_color=dedede/ls_bg_color=ffffff/' /etc/xrdp/xrdp.ini
sudo sed -i 's/ls_logo_x_pos=55/ls_logo_x_pos=0/' /etc/xrdp/xrdp.ini
sudo sed -i 's/ls_logo_y_pos=50/ls_logo_y_pos=5/' /etc/xrdp/xrdp.ini
}

#---------------------------------------------------#
# Function 14 - Fix SSL Minor Issue .... 
#---------------------------------------------------#

fix_ssl() 
{ 
echo 
/bin/echo -e "\e[1;33m   |-| Fixing SSL Permissions settings...       \e[0m" 
echo 
if id -Gn xrdp | grep ssl-cert 
then 
/bin/echo -e "\e[1;32m   !--xrdp already member ssl-cert...Skipping ---!\e[0m" 
else
    sudo adduser xrdp ssl-cert 
fi
}

#---------------------------------------------------#
# Function 15 - Fixing env variables in XRDP .... 
#---------------------------------------------------#

fix_env()
{
echo 
/bin/echo -e "\e[1;33m   |-| Fixing xRDP env Variables...       \e[0m" 
echo 

#Add this line to /etc/pam.d/xrdp-sesman if not present
if grep -Fxq "session required pam_env.so readenv=1 user_readenv=0" /etc/pam.d/xrdp-sesman 
   then
            echo "Env settings already set"
   else
        sudo sed -i '1 a session required pam_env.so readenv=1 user_readenv=0' /etc/pam.d/xrdp-sesman
 fi
}

#---------------------------------------------------#
# Function 17 - Removing XRDP Packages .... 
#---------------------------------------------------#

remove_xrdp()
{
echo 
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m" 
/bin/echo -e "\e[1;33m   ! Removing xRDP Packages...                   !\e[0m" 
/bin/echo -e "\e[1;33m   !---------------------------------------------!\e[0m" 
echo 

#remove the xrdplog file created by the script 
sudo rm /etc/xrdp/xrdp-installer-check.log

#----remove xrdp package
sudo systemctl stop xrdp
sudo systemctl disable xrdp
sudo apt-get autoremove xrdp -y
sudo apt-get purge xrdp -y

#---remove xorgxrdp
sudo systemctl stop xorgxrdp
sudo systemctl disable xorgxrdp

if [[ $HWE = "yes" ]] && [[ "$version" = *"Ubuntu 18.04"* ]];
then
    sudo apt-get autoremove xorgxrdp-hwe-18.04 -y 
    sudo apt-get purge xorgxrdp-hwe-18.04 -y
else
    sudo apt-get autoremove xorgxrdp -y 
    sudo apt-get purge xorgxrdp -y
fi

#---Cleanup files 

#Remove xrdp folder
if [ -d "$Dwnload/xrdp" ] 
then
    sudo rm -rf xrdp
fi

#Remove xorgxrdp folder
if [ -d "$Dwnload/xorgxrdp" ] 
then
    sudo rm -rf xorgxrdp
fi

#Remove custom xrdp logo file
if [ -f "$Dwnload/$CustomPix" ] 
then
    sudo rm -f  "$Dwnload/$CustomPix"
fi
sudo systemctl daemon-reload
}

sh_credits()
{
echo
/bin/echo -e "\e[1;36m   !----------------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;36m   ! Installation Completed...Please test your xRDP configuration   !\e[0m" 
/bin/echo -e "\e[1;36m   ! If Sound option selected, shutdown your machine completely     !\e[0m"
/bin/echo -e "\e[1;36m   ! start it again to have sound working as expected               !\e[0m"
/bin/echo -e "\e[1;36m   !                                                                !\e[0m"
/bin/echo -e "\e[1;36m   ! Credits : Written by Griffon - June 2021                       !\e[0m"
/bin/echo -e "\e[1;36m   !           www.c-nergy.be -xrdp-installer-v$ScriptVer.sh               !\e[0m"
/bin/echo -e "\e[1;36m   !           ver $ScriptVer                                              !\e[0m"
/bin/echo -e "\e[1;36m   !----------------------------------------------------------------!\e[0m"
echo

}

#---------------------------------------------------#
# SECTION FOR OPTIMIZING CODE USAGE...              #
#---------------------------------------------------#

install_common()
{
install_tweak   
allow_console
create_polkit
fix_theme
fix_ssl
fix_env
}

install_custom()
{
install_prereqs
get_binaries
compile_source
enable_service
}

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

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

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

echo
/bin/echo -e "\e[1;36m   !-----------------------------------------------------------------!\e[0m"
/bin/echo -e "\e[1;36m   !   xrdp-installer-$ScriptVer Script                                     !\e[0m"
/bin/echo -e "\e[1;36m   !   Support Ubuntu and Debian Distribution                        !\e[0m"
/bin/echo -e "\e[1;36m   !   Written by Griffon - June 2021 - www.c-nergy.be               !\e[0m"
/bin/echo -e "\e[1;36m   !                                                                 !\e[0m"
/bin/echo -e "\e[1;36m   !   For Help and Syntax, type ./debian-xrdp-installer-$ScriptVer.sh -h   !\e[0m"
/bin/echo -e "\e[1;36m   !                                                                 !\e[0m"
/bin/echo -e "\e[1;36m   !-----------------------------------------------------------------!\e[0m"

echo
#----------------------------------------------------------#
# Step 0 -Detecting if Parameters passed to script ....    #
#----------------------------------------------------------#

for arg in "$@"
do
    #Help Menu Requested
    if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]
    then
                echo "Usage Syntax and Examples"
                echo
                echo " --custom or -c           custom xRDP install (compilation from sources)"
                echo " --loginscreen or -l      customize xRDP login screen"
                echo " --remove or -r           removing xRDP packages"
                echo " --sound or -s            enable sound redirection in xRDP"
                echo
                echo "example                                                      "
                echo     
                echo " ./xrdp-installer-$ScriptVer.sh -c -s  custom install with sound redirection"
                echo " ./xrdp-installer-$ScriptVer.sh -l     standard install with custom login screen"
                echo " ./xrdp-installer-$ScriptVer.sh        standard install no additional features"
                echo
                exit
    fi

    if [ "$arg" == "--sound" ] || [ "$arg" == "-s" ]
    then
        fixSound="yes"              
    fi 
    if [ "$arg" == "--loginscreen" ] || [ "$arg" == "-l" ]
    then
        fixlogin="yes"
    fi

    if [ "$arg" == "--custom" ] || [ "$arg" == "-c" ]
    then
        adv="yes"   
    fi

    if [ "$arg" == "--remove" ] || [ "$arg" == "-r" ]
    then
        removal="yes"       
    fi
done

#--------------------------------------------------------------------------------#
#-- Step 0 - Check that the script is run as normal user and not as root....
#-------------------------------------------------------------------------------#

if [[ $EUID -ne 0 ]]; then
    /bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
    /bin/echo -e "\e[1;36m   !  Standard user detected....Proceeding....                   !\e[0m"
    /bin/echo -e "\e[1;36m   !-------------------------------------------------------------!\e[0m"
else
    echo
    /bin/echo -e "\e[1;31m   !-------------------------------------------------------------!\e[0m"
    /bin/echo -e "\e[1;31m   !  Script launched with sudo command. Script will not run...  !\e[0m"
    /bin/echo -e "\e[1;31m   !  Run script a standard user account (no sudo). When needed  !\e[0m"
    /bin/echo -e "\e[1;31m   !  script will be prompted for password during execution      !\e[0m"
    /bin/echo -e "\e[1;31m   !                                                             !\e[0m"
    /bin/echo -e "\e[1;31m   !  Exiting Script - No Install Performed !!!                  !\e[0m"
    /bin/echo -e "\e[1;31m   !-------------------------------------------------------------!\e[0m"
    echo
    exit
fi

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

check_os

#--------------------------------------------------------#
#-- Step 2 - Try to detect if HWE Stack needed or not....#
#--------------------------------------------------------#

check_hwe

#--------------------------------------------------------------------------------#
#-- Step 3 - Check if Removal Option Selected
#--------------------------------------------------------------------------------#

if [ "$removal" = "yes" ];
then
    remove_xrdp
    echo
    sh_credits
    exit
fi

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

#-- Detect if multiple runs and install mode used..... 
echo
/bin/echo -e "\e[1;33m   |-| Checking if script has run at least once...        \e[0m"

if [ -f /etc/xrdp/xrdp-installer-check.log ]
then
    modetype=$(sed -n 1p /etc/xrdp/xrdp-installer-check.log)
    /bin/echo -e "\e[1;32m       |-| Script has already run. Detected mode...: $modetype\e[0m"
else 
    /bin/echo -e "\e[1;32m       |-| First run or xrdp-installer-check.log deleted. Detected mode : $modetype        \e[0m"
fi 

#---------------------------------------------------------------------------------------
#- Detect Standard vs custom install mode and additional options...
#----------------------------------------------------------------------------------------

    if [ "$adv" = "yes" ];
    then
        echo
        /bin/echo -e "\e[1;33m   |-| custom installation mode detected.        \e[0m"
    
        if [ $modetype = "custom" ];
        then 
            /bin/echo -e "\e[1;36m           |-| xrdp package already - custom mode....skipping xrdp install        \e[0m"
            PrepOS
        else 
            /bin/echo -e "\e[1;36m           |-| Proceed custom xrdp installation packages and customization tasks      \e[0m"
            PrepOS
            install_custom
            install_common
  
            #create the file used a detection method 
            sudo touch /etc/xrdp/xrdp-installer-check.log
            sudo bash -c 'echo "custom" >/etc/xrdp/xrdp-installer-check.log'
        fi      
    else
        echo
            /bin/echo -e "\e[1;33m   |-| Additional checks Std vs Custom Mode..       \e[0m"
        if [ $modetype = "standard" ];
        then 
            /bin/echo -e "\e[1;35m           |-| xrdp already installed - standard mode....skipping install  \e[0m"
            PrepOS
        elif [ $modetype = "custom" ]
        then 
            /bin/echo -e "\e[1;35m           |-| Checking for additional parameters"
        else
            /bin/echo -e "\e[1;32m       |-| Proceed standard xrdp installation packages and customization tasks      \e[0m"
            PrepOS
            install_xrdp
            install_common
            
            #create the file 
            sudo touch /etc/xrdp/xrdp-installer-check.log
            sudo bash -c 'echo "standard" >/etc/xrdp/xrdp-installer-check.log'
        fi
    fi  #end if Adv option

#---------------------------------------------------------------------------------------
#- Check for Additional Options selected 
#----------------------------------------------------------------------------------------

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

if [ "$fixlogin" = "yes" ]; 
then
    echo
    custom_login
fi

#---------------------------------------------------------------------------------------
#- show Credits and finishing script
#--------------------------------------------------------------------------------------- 

sh_credits
 

26 thoughts on “xRDP – Next Version of xrdp-installer script – Preview Version

  1. @Ben,

    Thank you for the feedback. Indeed, not a lot of comments… seems that this new version of the scripts works nicely 🙂
    Thank you for have spent some time in testing this version of the script against Kubuntu….

    Till next time
    See ya

  2. @Craig,

    thank you for visiting our blog and providing feedback… Thank you for your contribution in order to improve the xrdp-installer script
    we will release this version of the script as final version in October 2021

    till next time
    See ya

  3. Thank you so much for this script! Just did my Pop!OS 21.04 VM more accessible from Windows! Works like a charm!

  4. @Mike,

    Thank you for visiting and sharing your findings….Nice to see that the script seems to work on more and more distribution

    Till next time
    See ya

  5. Awesome, I was able to modify the OS detection in the script to allow Zorin OS 16 and performed the -c -s installation on Zorin OS 16 Core and it worked great! I can now use Apache Guacamole to remote into Zorin. Audio is working as well. I think some more people should test it out and maybe Zorin can be a supported OS.

    Thanks for a great script!

  6. @Rafael,
    Thank you for visiting our blog and providing feedback. Happy to see that more and more operating system could be potentially supported. 🙂
    Indeed, if more people are using the xrdp-installer script against zorin, we could integrate this operating system within the script…
    Actually, and this is what you have done, the OS Detection part within the script can be modified as required and you could add a OS that’s not yet listed there and give it a try…If you are lucky; this could be working

    Till next time
    See ya

  7. why i get error??

    ” |-| Detecting OS version
    |-| OS Version : Ubuntu 20.04.3 LTS
    |-| Desktop Version :

    |-| Detecting xserver-xorg-core package installed
    |-| Error checking xserver-xorg-core flavour

  8. @MadDockg,

    Thank you for visiting our blog and sharing your experience.. We are super happy to see that our posts help people
    Thank you

    Till next time
    See ya

  9. @Vlad,

    Thank you for sharing your findings…. We never encountered this kind of issue… However, looking at the script, it seems that the check_hwe function does not return one of the expected value (system with or without hwe package)… To investigate further, can you issue the following command

    dpkg-query -W -f ='${Status}\n' xserver-xorg-core 2>/dev/null

    What’s the output ? Please provide us the output of the command so we can investigate further..

    This command should shows something like install ok installed . If this is not what you see, it might explain why the script is generating the error…. But again, please provide us the output of the command so we can either adapt the script or document this issue

    Waiting for your feedback
    till next time
    See ya

  10. Hello guys!

    The script works great!
    I just have one problem.
    The copy-paste works only with text (it works on the terminal only with the right mouse button or SHIFT + INS).
    Files cannot be copied and pasted.
    What can I do to fix the problem?
    The redirection driver doesn’t work either.
    I use windows 10 and I connect to an ubuntu 21.04 virtual machine (installed on proxmox).

  11. @Jakka,

    Thank you for visiting our blog and providing some feedback…

    About the clipboard – Some times the features works great sometimes you need to reboot the ubuntu machine to have the functionality working again.

    The drive redirection should be working better and more reliable. We had it working almost 99 % of the time….
    Within your rdp client, please ensure that the Drive Redirection option is selected. When connected viad rdp, you should see something like thinclient_Drives in your nautilus view

    Hope this help
    till next time
    See ya

  12. @Griffon,
    thank you for the message.

    I have already tried what you are saying.
    I used the thinclient_Drives but doesn’t work at all.
    For this reason, I have a question.
    Please, could you let me know in which file there is the configuration to use the clipboard?

  13. @Jakka,

    You have some settings available on /etc/xrdp/sesman.ini and on /etc/xrdp/xrdp.ini…
    We are looking into the issue because we have noticed that also in our Ubuntu machine,the clipboard is not working anymore. However, the thin_client drives are working as expected
    Can you tell us which version of xrdp you are running (xrdp -v) ?
    Oh and by the way, there is also some logs that could be helpful for these specific features, have a look at ~/.local/share/xrdp/xrdp-chansrvxx.log and see what kind of errors you might have over there

    Waiting for your feedback
    Till next time
    See ya

  14. @Jakka,

    to provide you some feedback… we can confirm that there is indeed an issue with the clipboard functionality with xRDP and Ubuntu 20.04.x. we have been able to reproduce the error. If you copy/paste from Ubuntu to Windows, it’s working (using clipboard functionalities). However; anything you try to copy from windows to Ubuntu fails (except text indeed!!!!)… We will look at the issue but no guarantee we can fix it…. This seems to be a problem with the xrdp software… we have been using the version 0.9.12 of xrdp… we still need to test the latest version which would be 0.9.17

    stay tuned
    Till next time
    See ya

  15. Dear Griffon,

    Sorry if I only answer today but I’ve been busy.
    Today I tried again to see if it is possible to solve the problem.
    I had to uninstall and install XRDP several times because there was something wrong with each installation.
    These are the errors I encountered:
    – error in downloading the XRDP package
    – error in downloading the custom image for login
    – black screen
    – left sidebar (DOCK) smaller and gray icons or just smaller but with correct icons

    Furthermore, the installation made by chrome with PROXMOX turns out to be the one that is successful (at least until now).
    If I re-install XRDP from ssh there are the errors listed above.

    Now, after several tries, it appears to be working fine.
    The version that has been installed today is 0.9.17.
    In recent days it was not this and I do not remember the exact version.

    Also, I ran into a problem (with all recently used XRDP versions).
    The connection is closed by windows 10 for no real reason.
    There is no fixed waiting time for the error to occur.
    However, it often happens.
    I have been connected to ubuntu for an hour right now and it has happened 4 times already.
    The message shown says: “because of an error in data encryption this session will end”

    When this problem occurs, it is not possible to connect immediately, you have to wait a few minutes.
    Or you have to restart XRDP from ssh (I do it with PUTTY).

    The copy-paste problem persists.
    I noticed that the file I try to copy from windows 10 to ubuntu (21.04) is present in the folder “/home/_USERXYZ_/thinclient_drives/.clipboard/”.
    If I copy a new file, I find it in the folder “/home/_USERXYZ_/thinclient_drives/.clipboard/”.
    So, technically, the copy and paste of files work correctly from windows, from ubuntu instead you can not get the file.
    I have enabled debug mode to read the log file.

    These are the results of copying and pasting from windows 10 to ubuntu 21.04 (there is an error in submitting the comment because the text is too long):
    https://pastebin.com/LPLhGPNR

    Please let me know if I can change anything to fix the error.

    Waiting for your feedback

  16. @Jakka,

    sorry for the late answer but we are also quite busy lately with lots of projects and activities….We are looking into the issues as you are not the only one having the issues so far… the standard xrdp package in ubuntu 20.04 is 0.9.12 and seems indeed to cause some issues… By the way, xrdp -9.0.12 and debian is gnome is also have problems, rdp connection is not working as expected as well

    with version 0.9.17, things seems to be better and clibpoard, drive redirections seems to work as expected
    the problem with the download of the package is either your internet connection or problem with the Github….if you are running the script multiple time and this is working in some case and not on other cases, I would say problem would be the network or a configuration parameters of your network
    Will try to provide more info these coming days

    Till next time
    See ya

  17. @Griffon.

    Thank you for the answer.

    Please, could you tell me which DE has the best compatibility with XRDP?
    So I replace GNOME with the DE which has the most compatibility, maybe I solve some problems.

    See ya

  18. @Jakka,

    You would need to test multiple interfaces I would say…. So far we had good success and feedback using KDE DE, a lot of people are still using xfce also with xRDP because it’s lighter
    But do not give up on Gnome desktop yet,… we are working on this issue and we will see if we can provide a quick fix

    Till next time
    See ya

  19. Hey there and first of thanks for your great work!

    Is there any news regarding Gnome yet? I am having issues of getting Gnome to work with xrdp as well.

    Greetings
    Domml

  20. @Domml,

    Thank you for visiting our blog and providing feedback. We have seen that you have found the newer version of the script so we can ignore your request

    Till next time
    See ya

  21. @Jibun;

    Thank you for visiting our blog and providing feedback. Please note that this post is outdated and the script provided was
    – a Preview !!!
    – Targeting specifically Debian 10

    Since this post, we have published another post explaining the possible issue you might encounter if you are using standard install against Debian 11 (see xRDP – Detected issues with Debian 11 – Oh No ! Something has gone wrong….

    The latest version of the script (version 1.3) should be able to install xRDP (Custom Install !!!) against a Debian 11 OS.
    Be aware that a new version of the script will be released in April 2022 in order to support new version of Ubuntu 22.04

    Finally, as mentioned multiple times through this blog, please always use the latest version of the script since it would cover most detected issues and findings

    Till next time
    See ya

Leave a Reply