Files
public_scripts/xrdp-installer-1.4.sh
2022-08-09 22:47:51 +03:00

1131 lines
40 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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" <<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 12 - 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
# Custom code for Budgie Desktop
if [[ "$DesktopVer" == *"Budgie"* ]]
then
sudo sed -i "4 a #Improved Look n Feel Method\ncat <<EOF > ~/.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 <<EOF > ~/.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