The script hereafter is outdated and has been replaced by a newer version. Please Check the Download page for latest version.
|
Hello World,
Recently, we have released the latest version of our famous xrdp installation script (i.e. xrdp-installer-1.0.sh). The latest version of the script is merging and consolidating the standard installation script and the custom installation script. The xrdp-installer-1.0.sh script is basically replacing any previous versions of the script that has been released so far. The script has been made available with the release of Ubuntu 19.10. We have received positive feedback on the script. However, some minor issues have been detected and we have decided to update already the script and release a new version of the script…
So, let’s go !
Overview
Initially, this script should have been released with the next LTS Ubuntu release (i.e. Ubuntu 20.04). However, we have decided to release it with Ubuntu 19.10 which offers us the opportunity to detect possible bugs and issues and fix them before the next LTS release. This seems to be the good strategy as we have indeed detected some minor issues that have been fixed in this version of the script (version 1.1).
Note : This version of the script is stable but need to still go through some more validation process…..
Script version & Supported Ubuntu Version
The script version will be set to 1.1. So, the xrdp-installer-1.1.sh script will support the following Ubuntu operating system version
- Ubuntu 16.04.x
- Ubuntu 18.04.x
- Ubuntu 19.04
- Ubuntu 19.10
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 16.04.x, Ubuntu 18.04.x,Ubuntu 19.04, Ubuntu 19.10)
- The Official Ubuntu distribution needs to be used (we do not support other Ubuntu flavors – so far !!)
- No additional Desktop interface is used ( xRDP session will be showing Ubuntu Gnome Desktop with the Dock menu or Unity if running Ubuntu 16.04)
- Sound functionality is present on the computers if you sound feature is available as well
The Script
The script has been modified slightly and try to improve the script usage. The following modifications have been included in the script
- the script is not using hard coded folder ~/Downloads anymore. We are using a variable to detect the Downloads folders on the system. This ensure that the script could theoretically run on non english configured systems. (Thanks to Olivier for the Suggestion :-))
- the script check if group membership ssl-cert contains or not the xrdp user. This action ensure that no warning message is thrown if the user is already member of the group
- checkinstall run with additional parameters (i.e. package version for xrdp). This is to avoid that possible ubuntu xrdp updates breaks the custom install performed ((Thanks to Olivier for the detecting the issue :-))
- additional check that detect if the script has been run more than once on the system.
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 : xrdp-installer-1.1.sh # Description : Perform xRDP installation on Ubuntu 16.04,18.04,19.04,19.10 and perform # additional post configuration to improve end user experience # Date : November 2019 # written by : Griffon # WebSite :http://www.c-nergy.be - http://www.c-nergy.be/blog # Version : 1.1 # History : 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 #################################################################################################### #--------------------------------------------------------------------------# # -----------------------Function Section - DO NOT MODIFY -----------------# #--------------------------------------------------------------------------# ############################################################################ # DEFAULT INSTALLATION MODE : STANDARD INSTALLATION ############################################################################ #---------------------------------------------------# # Function 1 - check xserver-xorg-core package.... #---------------------------------------------------# check_hwe() { echo /bin/echo -e "\e[1;33m |-| Detecting xserver-xorg-core package installed \e[0m" xorgver=$(dpkg-query -W -f ='${Status}\n' xserver-xorg-core | awk {'print $3'}) if [[ "$xorgver" = *not-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" else /bin/echo -e "\e[1;32m |-| xorg package version: xserver-xorg-core \e[0m" HWE="no" fi } #---------------------------------------------------# # Function 2 - 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 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 0 - Install Prereqs... #---------------------------------------------------# install_prereqs() { echo Release=$(lsb_release -sr) /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Installing PreReqs packages..Proceeding. ! \e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" echo 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 python-libxml2 nasm fuse pkg-config git intltool checkinstall echo 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 1 - Download XRDP Binaries... #---------------------------------------------------# get_binaries() { echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Download xRDP Binaries.......Proceeding. ! \e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" echo #cd ~/Downloads Dwnload=$(xdg-user-dir DOWNLOAD) cd $Dwnload ## -- Download the xrdp latest files echo /bin/echo -e "\e[1;32m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;32m ! Preparing download xrdp package !\e[0m" /bin/echo -e "\e[1;32m !---------------------------------------------!\e[0m" echo git clone https://github.com/neutrinolabs/xrdp.git echo /bin/echo -e "\e[1;32m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;32m ! Preparing download xorgxrdp package !\e[0m" /bin/echo -e "\e[1;32m !---------------------------------------------!\e[0m" echo git clone https://github.com/neutrinolabs/xorgxrdp.git } #---------------------------------------------------# # Function 2 - compiling xrdp... #---------------------------------------------------# compile_source() { echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Compile xRDP packages .......Proceeding. ! \e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" echo #cd ~/Downloads/xrdp cd $Dwnload/xrdp sudo ./bootstrap sudo ./configure --enable-fuse --enable-jpeg --enable-rfxcodec sudo make #-- check if no error during compilation if [ $? -eq 0 ] then /bin/echo -e "\e[1;33m |-| Make Operation Completed successfully \e[0m" else echo 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=0.9.11 --pkgrelease=1 --default #xorgxrdp package compilation echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Compile xorgxrdp packages....Proceeding. ! \e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" echo #cd ~/Downloads/xorgxrdp cd $Dwnload/xorgxrdp sudo ./bootstrap sudo ./configure sudo make # check if no error during compilation if [ $? -eq 0 ] then echo /bin/echo -e "\e[1;33m |-| Make Operation Completed successfully \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=0.2.11 --pkgrelease=1 --default } #---------------------------------------------------# # Function 3 - create services .... #---------------------------------------------------# enable_service() { echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Creating xRDP services.......Proceeding. ! \e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\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 ############################################################################ #---------------------------------------------------# # Function 0 - 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 1 - 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 2 - 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 #All Ubuntu 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 #Specific Versions if [[ "$version" = *"Ubuntu 19.04"* ]] || [[ "$version" = *"Ubuntu 19.10"* ]] ; 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 ResultAny=yes ResultInactive=yes ResultActive=yes EOF fi } #---------------------------------------------------# # Function 3 - 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" # 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 if [[ "$version" = *"Ubuntu 16.04"* ]]; then echo sudo sed -i "/# auth /a cat >~/.xsession << EOF\n#Unity Xrdp multi-users \n/usr/lib/gnome-session/gnome-session-binary --session=ubuntu &\n/usr/lib/x86_64-linux-gnu/unity/unity-panel-service &\n/usr/lib/unity-settings-daemon/unity-settings-daemon &\nfor indicator in /usr/lib/x86_64-linux-gnu/indicator-*;\ndo\nbasename='basename \\\\\${indicator}'\ndirname='dirname \\\\\${indicator}'\nservice=\\\\\${dirname}/\\\\\${basename}/\\\\\${basename}-service\n\\\\\${service} &\ndone\nunity\nEOF" /etc/xrdp/startwm.sh echo else echo sudo sed -i "4 a #Improved Look n Feel Method\ncat <<EOF > ~/.xsessionrc\nexport GNOME_SHELL_SESSION_MODE=ubuntu\nexport XDG_CURRENT_DESKTOP=ubuntu:GNOME\nexport XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg\nEOF\n" /etc/xrdp/startwm.sh echo fi } #---------------------------------------------------# # Function 4 - Enable Sound Redirection .... #---------------------------------------------------# 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 - 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 2 - Install Some PreReqs sudo apt-get install git libpulse-dev autoconf m4 intltool build-essential dpkg-dev libtool libsndfile-dev libcap-dev -y sudo apt build-dep pulseaudio -y # Step 3 - Download pulseaudio source in /tmp directory - Do not forget to enable source repositories 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 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) 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 5 - Custom xRDP Login Screen .... #---------------------------------------------------# custom_login() { echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Customizing xRDP login screen !\e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" echo #cd ~/Downloads cd $Dwnload wget http://www.c-nergy.be/downloads/griffon_logo_xrdp.bmp #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 if [[ "$adv" = "yes" ]] || [[ "$version" = *"Ubuntu 16.04"* ]]; then sudo cp griffon_logo_xrdp.bmp /usr/local/share/xrdp sudo sed -i 's/ls_logo_filename=/ls_logo_filename=\/usr\/local\/share\/xrdp\/griffon_logo_xrdp.bmp/g' /etc/xrdp/xrdp.ini else sudo cp griffon_logo_xrdp.bmp /usr/share/xrdp sudo sed -i 's/ls_logo_filename=/ls_logo_filename=\/usr\/share\/xrdp\/griffon_logo_xrdp.bmp/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=2c001e/' /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 6 - Fix SSL Minor Issue .... #---------------------------------------------------# fix_ssl() { echo /bin/echo -e "\e[1;33m !---------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Fixing SSL Cert Issue ... !\e[0m" /bin/echo -e "\e[1;33m !---------------------------------------------!\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 7 - Fixing env variables in XRDP .... #---------------------------------------------------# fix_env() { #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 8 - 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 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 sudo apt-get autoremove xorgxrdp -y sudo apt-get purge xorgxrdp -y } 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 - November 2019 !\e[0m" /bin/echo -e "\e[1;36m ! www.c-nergy.be -xrdp-installer-v1.1.sh - ver 1.1 !\e[0m" /bin/echo -e "\e[1;36m !----------------------------------------------------------------!\e[0m" echo } #---------------------------------------------------# # SECTION FOR OPTIMIZING CODE USAGE... # #---------------------------------------------------# install_common() { 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-1.1 Script !\e[0m" /bin/echo -e "\e[1;36m ! Support U16.04/18.04/19.04/19.10 !\e[0m" /bin/echo -e "\e[1;36m ! Written by Griffon - November 2019 - 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 ./xrdp-installer-1.1.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-1.0.sh -c -s custom install with sound redirection" echo " ./xrdp-installer-1.0.sh -l standard install with custom login screen" echo " ./xrdp-installer-1.0.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 running with admin priveleges. The script should be !\e[0m" /bin/echo -e "\e[1;31m ! run under a standard user account. sudo privileges will be !\e[0m" /bin/echo -e "\e[1;31m ! prompted during execution !\e[0m" /bin/echo -e "\e[1;31m !-------------------------------------------------------------!\e[0m" echo sh_credits exit fi #----------------------------------------------------------------------- #Step 2 - checking for additional Settings - xorg-xserver-core version #---------------------------------------------------------------------- check_hwe #---------------------------------------------------# #-- Step 1 - 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 16.04"* ]]; then /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" echo elif [[ "$version" = *"Ubuntu 18.04"* ]]; then /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" echo elif [[ "$version" = *"Ubuntu 19.04"* ]]; then /bin/echo -e "\e[1;32m |-| Ubuntu Version : $version\e[0m" echo elif [[ "$version" = *"Ubuntu 19.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 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 ! U16.04.x/18.04.x/19.04.x/19.10 !\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 #--------------------------------------------------------------------------------# #-- Step 3 - Check if Removal Option Selected #--------------------------------------------------------------------------------# if [ "$removal" = "yes" ]; then remove_xrdp echo sh_credits exit fi #---------------------------------------------------------# # Step 3 - Executing the installation & config tasks .... # #---------------------------------------------------------# #------------------------------------------------------------------- #- If Ubuntu 16.04 detected, we always perform a custom installation #------------------------------------------------------------------- #Check if script has run once... if [ -f /etc/xrdp/xrdp-installer-check.log ] then echo /bin/echo -e "\e[1;36m !----------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! INFO : xrdp-install script ran at least once on this computer. !\e[0m" /bin/echo -e "\e[1;36m !----------------------------------------------------------------!\e[0m" else if [[ "$version" = *"Ubuntu 16.04"* ]]; then echo /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! Custom Installation for Ubuntu 16.04.x !\e[0m" /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" echo install_custom install_common fi #--------------------------------------------------------------------------------------- #- If custom option detected, additional check for U16.04 so skipped #---------------------------------------------------------------------------------------- if [[ "$version" != *"Ubuntu 16.04"* ]]; then if [ "$adv" = "yes" ]; then echo /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! Custom Installation Option Selected..... !\e[0m" /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" echo install_custom install_tweak install_common else echo /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;36m ! Standard Installation Mode Selected - U18.04 and later !\e[0m" /bin/echo -e "\e[1;36m !-------------------------------------------------------------!\e[0m" echo install_xrdp install_tweak install_common fi #end if Adv option fi # end if version check not like U16.04 fi # End check if file exists #--------------------------------------------------------------------------------------- #- Check for Additional Options selected #---------------------------------------------------------------------------------------- if [ "$fixSound" = "yes" ]; then enable_sound fi if [ "$fixlogin" = "yes" ]; then echo custom_login fi #----------------------------------------------------------------------- # Create Check fil to see if script has run at least once... #---------------------------------------------------------------------- #Create the log file sudo touch /etc/xrdp/xrdp-installer-check.log #--------------------------------------------------------------------------------------- #- show Credits and finishing script #--------------------------------------------------------------------------------------- sh_credits
How to Use the Script
The xrdp-installer-1.1 script will work in a similar way as the previous versions. First, we will need to set the execute permission on the script. Then, you will need to choose between standard and custom installation. Finally, you would need to decide if additional options would be enabled or not… So, let’s see how this would be working….
Step 1 – Set Execute Right on the script
Download the xrdp-installer-1.1.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-1.1.sh
Note : Adjust the path where the xrdp-Installer-1.1.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-1.1.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-1.1.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-1.1.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….
Important Notes
If you are running the script on Ubuntu 16.04.x, the custom installation will always be performed even if you have not specified any parameters. This is because Ubuntu 16.04.x ships with a really old xrdp package (version 0.6) and does not provides all needed features. The custom installation provide drive redirection,clipboard and access to Unity Desktop
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-1.1.sh -s (this would enable the sound redirection) ./xrdp-installer-1.1.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-1.1.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 and help avoiding issues like we have encountered in Ubuntu 18.04.x (see here,here and here). 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-1.1.sh -c (this would perform a custom installation but will not enabled adv features like sound redirection or custom login screen)
Important Notes
If you are running the script on Ubuntu 16.04.x, the -c switch will be ignored and a custom installation process will be performed. This is because Ubuntu 16.04.x ships with a really old xrdp package (version 0.6) and does not provides all needed features. The custom installation provide drive redirection,clipboard and access to Unity Desktop
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-1.1.sh -c -s (this would perform a custom install and enable sound redirection) ./xrdp-installer-1.1.sh -c -l (this would perform a custom install and customize xrdp login screen) ./xrdp-installer-1.1.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 the script to perform the installation. To remove the xrdp package, you would simply execute the following command
./xrdp-installer-1.1.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. Remember that a user can either be logged on locally or logged on remotely on the machine when working with xRDP solution. If the user, performing the remote connection, is logged into the system locally the remote connection will start but will be terminated immediately. This is the way it works nowadays.
So, ensure that the user performing the test is not locally logged on, start your favorite remote desktop client and perform your connection. Based on your options, you will be presented either with the green xrdp login screen or with the custom login screen (purple background). 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
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. 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
For Detailed information, see post below
Limitations
One session per user limitation
Only one session is allowed per user. This means that if a user is logged on locally on the Ubuntu machine, the user will not be able to perform a remote session (the xRDP connection will initiate but will end up immediately). If a user is logged on remotely on the system, it will not be able to login locally (if the user tries to login locally, the login screen will loop and the login screen will be presented again to the user)
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-1.1.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-1.1.zip
Note : All the xrdp scripts can be found at https://www.c-nergy.be/products.html
Final Notes
This is it for this post !
Please if you have time or want to help us in creating the best xrdp installer script, download the script 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
See ya
@Chandrashekaran,
Performance are not really great when using xRDP against Ubuntu 16.04 + Unity. You could achieve better (acceptable performance) if you would xrdp to more recent Ubuntu releases (18.04, 19.10, or even Ubuntu 20.04) which will be released in a few days…. We never really worked with multiple monitor setup but this might be an interesting topic to investigate..
Thanks for your visit and your positive feedback
Till next time
See ya
Hello Griffon,
after testing your script on a few different 16.04. machines I found another small issue.
The HWE check doesn’t work reliably on some installations. When xserver-xorg-core status is “config-files” rather than “not-installed” it is falsely assumed than a non-hwe version is installed.
Due to dpkg returning 1 in both “package not found” situations and in case of internal errors, I would propose to make the check more explicit and do something along the lines of
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”)”
xorg_hwe_install_status=”$(dpkg-query -W -f =’${Status}\n’ “xserver-xorg-core-hwe-$Release”)”
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
}
@Andrej,
perfect timing 🙂 As Ubuntu 20.04 is about to be released, we have been working on the script and we
have updated slightly the script… we have indeed notice the issue just recently (as more people were encountering issues) but we didn’t had the chance to look at a possible workaround….
We will test your proposal and if we are ok with it, we will use it…We will credits you for the update in vers 1.2
Thank you for your help and the positive feedback provided
Till next time
See ya
Where i can find the script for Ubuntu 20.04?
@Gus,
Have a look at this link https://c-nergy.be/blog/?p=14888
or always visit this page to get the latest version of the script https://www.c-nergy.be/products.html
Till next time
See ya
Hello, thanks for the very useful script and articles regarding xrdp.
By the way, I prefer traditional GNOME Fallback desktop.
Following .xsession/.xsessionrcs support many desktops.
Multiple users can execute different desktops simultaneously.
Local user can select desktop from GDM menu.
Following steps are enough.
– Skip fix_theme() in xrdp-installer-1.2.sh (copy /etc/xrdp/startwm.sh.griffonl to /etc/xrdp/startwm.sh).
– Put following .xsession/.xsessionrc in user’s home directory.
GNOME Flashback works on 20.04, 18.04 and 16.04.
Ubuntu desktop works on 20.04 and 18.04.
Unity desktop works on 16.04, though there is an issue.
==================================================================
.xsession common to all
—————-
EXEC=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^Exec=/p | sed -e ‘s/Exec=//’`
if [ -n “${EXEC}” ] ; then
sleep 1
exec ${EXEC}
fi
—————-
==================================================================
.xsessionrc for GNOME Flashback(metacity)
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=gnome-flashback-metacity
export GDMSESSION=$DESKTOP_SESSION
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
fi
—————-
==================================================================
.xsessionrc for Ubuntu desktop
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=ubuntu
export GDMSESSION=$DESKTOP_SESSION
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_SESSION_TYPE=x11
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
fi
—————-
Following .xsessionrc can start Unity on 16.04.
However logout does not disconnect xrdp. The cause is not clear at this moment.
==================================================================
.xsessionrc for Unity desktop on 16.04
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=ubuntu
export GDMSESSION=$DESKTOP_SESSION
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_SESSION_TYPE=”x11″
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
export XDG_CONFIG_DIRS=”/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg”
export SESSIONTYPE=”gnome-session”
UPSTART=`ps -ef | grep “/sbin/upstart \-\-user” | grep “$USER”`
if [ -z “$UPSTART” ] ; then
/sbin/upstart –user &
sleep 2
fi
fi
—————-
I tried following .xsessionrc on 20.04. They work.
==================================================================
.xsessionrc for LXQt
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=lxqt
export GDMSESSION=$DESKTOP_SESSION
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_CURRENT_DESKTOP=LXQt
fi
—————-
==================================================================
.xsessionrc for MATE
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=mate
export GDMSESSION=$DESKTOP_SESSION
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
fi
—————-
==================================================================
.xsessionrc for vanilla GNOME desktop
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=gnome
export GDMSESSION=$DESKTOP_SESSION
export GNOME_SHELL_SESSION_MODE=gnome
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
fi
—————-
==================================================================
.xsessionrc GNOME Classic
—————-
if [ -z “$DESKTOP_SESSION” ] ; then
export DESKTOP_SESSION=gnome-classic
export GDMSESSION=$DESKTOP_SESSION
export GNOME_SHELL_SESSION_MODE=classic
export XDG_SESSION_DESKTOP=$DESKTOP_SESSION
export XDG_CURRENT_DESKTOP=`cat /usr/share/xsessions/${DESKTOP_SESSION}.desktop | sed -n -e /^DesktopNames=/p | sed -e ‘s/DesktopNames=//’ -e ‘s/;/:/g’`
fi
—————-
Thanks for your guide!! Its’s amazing…..but i have a small problems. for the moment i just took the part to get a gnome session similar to the local adding:
cat < ~/.xsessionrc
echo export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF
to the Startwm.sh
Sometimes this modification it is not applied, seems not to be able to create the .xessionsrc file under the users’s home. Basically in some case even if i modifying the starwm.sh seems don’t have any effect and i don’t know why?
Can you help me? Thanks in advance!
A
Hello Giovanni,
We have used the script and test it and so far we have not encountered the issue. The .xsessionrc is created all the time.
We will need to take a closer look into this as we never had such issue….
will try to perform some additional tests using your specific scenario
Till next time
See ya
a one-liner that might benefit others:
sudo apt install wget unzip
wget -nc -O – http://www.c-nergy.be/downloads/xrdp-installer-1.1.zip | gunzip – | sh
—
sorry that I’ve wrongly posted it in another blog
Just wanted to say thanks for automating this setup. I missed a setting somewhere and was stuck on the post-authentication blank screen. This fixed it and saved me a lot of time.
@William,
Thank you for the feedback and for visiting our blog…Happy to see that the script is helping people…. Please note we have more recent version of the script… Have a look at the https://www.c-nergy.be/products.html for the latest version of the script…. 🙂
Till next time
See ya
Thanks for doing this. However, I used the script for Ubuntu 20.04.4 after I had installed xrdp with apt and experienced two mayor problems:
– Dock is not shown on the left side (it seems to be excluded from the transmission)
– Logging in after logging out gets you stuck after the password.
Running your script did not change this. Both problems still persists.
@Ben,
Thank you for visiting our blog and sharing your findings… First of all, the script version 1.1 is outdated and should not be run against Ubuntu 20.04 version. You should have tried the latest version of the script version 1.3
If you have used the script after installing manually xrdp software, this might not have executed full set of instructions… (but it should have been working)
Dock not showing up means that your ~/.xsessionrc is not populate accordingly. So, if you have used the script, you should have the file /etc/xrdp/startwm.sh populated with the following information (in the beginning of the file)
#!/usr/bin/env bash ~/.xsessionrc
#
# This script is an example. You might need to edit this script
# depending on your distro if it doesn't work for you.
#Improved Look n Feel Method
cat <
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF
If this is missing or does not reflect what’s shown above, this might explain why the dock bar is not showing in your xRDP Session. So, edit the file /etc/xrdp/Startwm.sh with admin rights and populate it with the info provided above, restart the xrdp service and try again.
For the login/logout issue, not sure what you mean…. If you see the xrdp login box, digit username/password, what do you get… a dialog box message stating that the password is not correct or do you simply see a black screen after login process
If dialog box, can you check that the keyboard layout is the one you thinking it is. To be sure, type the password in the user name dialog box so you can see if there is a keyboard issue or not
if it’s a black screen (do not think so); you should ensure that only one session for your user account exists..So either you are logged on locally or remotely but not both at the same time
Hope this help
Till next time
See ya