#!/bin/bash ##################################################################################################### # Script_Name : xrdp-installer-1.4.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 : April 2022 # written by : Griffon # WebSite :http://www.c-nergy.be - http://www.c-nergy.be/blog # Version : 1.4 # History : 1.4 - Re-write sound section (since meson is used) # - Added Pop!Os 21.10 as Detected system (Best Effort !!!) # - Detect when install from ssh session - (Experimental) # - Adding Support Ubuntu 22.04 # - Removing Support for Ubuntu 21.04 (End Standard Support) # - Improved Debian detection and warning about std vs custom install # : 1.3 - Adding support for Ubuntu 21.10 (STR) # - Code modification sound redirection using meson technology (ubuntu 21.10 only so far) # - Adding support for Debian (10 and 11) (Best Effort) # - Added Rules to Detect Budgie-Desktop and postConfig settings # - Added support for Pop!_0S (Best Effort !!!) # - 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="1.4" #--Detecting OS Version version=$(lsb_release -sd) codename=$(lsb_release -sc) Release=$(lsb_release -sr) #--Detecting OS Version version="Ubuntu 22.04.1 LTS" codename="jammy" Release="22.04" #Define Dwnload variable to point to ~/Downloads folder of user running the script Dwnload=$(xdg-user-dir DOWNLOAD) #Initialzing other variables modetype="unknown" #---------------------------------------------------------# # Initial checks and Validation Process .... # #---------------------------------------------------------# #-- 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 #--Detecting variable related to Desktop interface and Directory path (Experimental) if [[ *"$XDG_SESSION_TYPE"* = *"tty"* ]] then ##-- Detect if installation done via ssh connections /bin/echo -e "\e[1;32m |-| Detected Installation via ssh.... \e[0m" echo # Need new code to display DE Option available /bin/echo -e "\e[1;33m !--------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;33m ! Your are using the xrdp-installer script via ssh connection !\e[0m" /bin/echo -e "\e[1;33m ! You might need to create your ~/.xsessionrc file manually !\e[0m" /bin/echo -e "\e[1;33m ! !\e[0m" /bin/echo -e "\e[1;33m ! The script will proceed....but might not work !! !\e[0m" /bin/echo -e "\e[1;33m !--------------------------------------------------------------!\e[0m" echo cnt=$(ls /usr/share/xsessions | wc -l) echo $cnt if [ "$cnt" -gt "1" ] then PS3='Please specify which DE you are using...: ' desk=($(ls /usr/share/xsessions | cut -d "." -f 1)) select menu in "${desk[@]}"; do echo -e "\nyou picked $menu ($REPLY)" break; done else desk=($(ls /usr/share/xsessions | cut -d "." -f 1)) menu=$desk echo "Desktop seems to be based on....: " $menu fi case $menu in "ubuntu") DesktopVer="ubuntu:GNOME" SessionVer="ubuntu" #might needed not to loose FireFox Snap version ConfDir="/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "gnome") DesktopVer="" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "budgie-desktop") DesktopVer="Budgie:GNOME" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "plasma") DesktopVer="KDE" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "pop") DesktopVer="pop:GNOME" SessionVer="pop" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "mate") DesktopVer="MATE" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "cinnamon2d") DesktopVer="X-Cinnamon" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "cinnamon2") DesktopVer="X-Cinnamon" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "xfce") DesktopVer="XFCE" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "lxqt") DesktopVer="LXQt" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; "LXDE") DesktopVer="LXDE" SessionVer="" /bin/echo -e "\e[1;32m |-| Session : $SessionVer\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 ! Unable to detect a supported OS Version & Desktop interface !\e[0m" /bin/echo -e "\e[1;31m ! The script has been tested only on specific versions !\e[0m" /bin/echo -e "\e[1;31m ! !\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 else ##-- Installation is performed via an existing Desktop Interface...Trying to detect it.... DesktopVer="$XDG_CURRENT_DESKTOP" SessionVer="$GNOME_SHELL_SESSION_MODE" ConfDir="$XDG_DATA_DIRS" fi #--------------------------------------------------------------------------# # -----------------------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.10"*) /bin/echo -e "\e[1;32m |-| OS Version : $version\e[0m" /bin/echo -e "\e[1;32m |-| Desktop Version : $DesktopVer\e[0m" ;; *"Ubuntu 22.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" ;; *"Pop!_OS 21.10"*) /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" if [[ $Release = "11" ]] && [[ -z "$adv" ]] then #Check if Custom Install already performed...if yes, enable sound if [[ $modetype = "custom" ]] && [[ $fixSound = "yes" ]] then /bin/echo -e "\e[1;32m |-| Install Mode (Debian) : Custom...Proceeding\e[0m" /bin/echo -e "\e[1;32m |-| Enabling Sound (Debian) : .........Proceeding\e[0m" else /bin/echo -e "\e[1;31m !--------------------------------------------------------------!\e[0m" /bin/echo -e "\e[1;31m ! You are running Debian 11 ! Please note that standard Mode !\e[0m" /bin/echo -e "\e[1;31m ! will not allow you to perform remote connection against !\e[0m" /bin/echo -e "\e[1;31m ! Gnome Desktop. This is a known Debian/xRDP issue !\e[0m" /bin/echo -e "\e[1;31m ! Use custom install mode !\e[0m" /bin/echo -e "\e[1;31m ! !\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 else /bin/echo -e "\e[1;32m |-| Install Mode (Debian) : Check Done...Proceeding\e[0m" fi ;; *) /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 ! Ubuntu 18.04.x/20.04.x/22.04/21.10/Debian 10/11 !\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" #Debian Specific - add in source backport package to download necessary packages - Debian Specific if [[ *"$version"* = *"Debian"* ]] then sudo sed -i 's/deb cdrom:/#deb cdrom:/' /etc/apt/sources.list sudo apt-get update 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 --# ## POP!OS Color #363533 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 #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 #cd ~/Downloads 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 ~/Downloads/xrdp 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 ~/Downloads/xorgxrdp 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" </etc/polkit-1/localauthority/50-local.d/45-allow.colord.pkla" </etc/polkit-1/localauthority/50-local.d/46-allow-update-repo.pkla" </etc/polkit-1/localauthority/50-local.d/47-allow-networkd.pkla" < ~/.xsessionrc\nbudgie-desktop\nexport GNOME_SHELL_SESSION_MODE=$SessionVer\nexport XDG_CURRENT_DESKTOP=$DesktopVer\nexport XDG_DATA_DIRS=$ConfDir\nEOF\n" /etc/xrdp/startwm.sh else sudo sed -i "4 a #Improved Look n Feel Method\ncat < ~/.xsessionrc\nexport GNOME_SHELL_SESSION_MODE=$SessionVer\nexport XDG_CURRENT_DESKTOP=$DesktopVer\nexport XDG_DATA_DIRS=$ConfDir\nEOF\n" /etc/xrdp/startwm.sh fi 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 /bin/echo -e "\e[1;32m |-| Install dev tools used to compile sound modules.. \e[0m" echo 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 else # Step 1 - Enable Source Code Repository /bin/echo -e "\e[1;32m |-| Adding Source Code Repository.. \e[0m" echo 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 2 - 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 fi echo /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 apt source pulseaudio /bin/echo -e "\e[1;32m |-| Compile pulseaudio sources files.. \e[0m" # Step 4 - Compile PulseAudio based on OS version & PulseAudio Version cd /tmp/pulseaudio-$pulsever* PulsePath=$(pwd) cd "$PulsePath" if [ -x ./configure ]; then #if pulseaudio version <15.0, then autotools will be used (legacy) ./configure elif [ -f ./meson.build ]; then #if pulseaudio version >15.0, then meson tools will be used (new) sudo meson --prefix=$PulsePath build sudo ninja -C build install fi # step 5 - Create xrdp sound modules cd /tmp /bin/echo -e "\e[1;32m |-| Compiling and building xRDP Sound modules... \e[0m" git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git cd pulseaudio-module-xrdp ./bootstrap ./configure PULSE_DIR=$PulsePath make #this will install modules in /usr/lib/pulse* directory sudo make install } #---------------------------------------------------# # 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 - April 2022 !\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 - April 2022 - 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-$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 #sh_credits 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 #--------------------------------------------------------------------------------------- #- 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 already installed - 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