Skip to content

Instantly share code, notes, and snippets.

@GregaVrbancic
Created July 17, 2020 09:54
Show Gist options
  • Star 18 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save GregaVrbancic/71f8e9891f4f70032a9e5882a88839ce to your computer and use it in GitHub Desktop.
Save GregaVrbancic/71f8e9891f4f70032a9e5882a88839ce to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# This script is for Arch Linux to configure XRDP for enhanced session mode
#
# The configuration is adapted from the Ubuntu 16.04 script.
#
# Script adapted from https://github.com/microsoft/linux-vm-tools
#
if [ "$(id -u)" -ne 0 ]; then
echo 'This script must be run with root privileges' >&2
exit 1
fi
# Use Qi to check for exact package name
if ! pacman -Qi xrdp > /dev/null ; then
echo 'xrdp not installed. Installing now...' >&2
sudo pacman -Syu --needed --noconfirm base base-devel git
sudo yay -Syu xrdp-git --noconfirm
fi
# Use Qs to allow xorgxrdp-devel-git
if ! pacman -Qs xorgxrdp > /dev/null ; then
echo 'xorgxrdp not installed. Installing now...' >&2
sudo pacman -Syu --needed --noconfirm base base-devel git
yay -Syu xorgxrdp-git --noconfirm
fi
###############################################################################
# Configure XRDP
#
systemctl enable xrdp
systemctl enable xrdp-sesman
# Configure the installed XRDP ini files.
# use rdp security.
sed -i_orig -e 's/security_layer=negotiate/security_layer=rdp/g' /etc/xrdp/xrdp.ini
# remove encryption validation.
sed -i_orig -e 's/crypt_level=high/crypt_level=none/g' /etc/xrdp/xrdp.ini
# disable bitmap compression since its local its much faster
sed -i_orig -e 's/bitmap_compression=true/bitmap_compression=false/g' /etc/xrdp/xrdp.ini
#
# sed -n -e 's/max_bpp=32/max_bpp=24/g' /etc/xrdp/xrdp.ini
# use the default lightdm x display
# sed -i_orig -e 's/X11DisplayOffset=10/X11DisplayOffset=0/g' /etc/xrdp/sesman.ini
# rename the redirected drives to 'shared-drives'
sed -i_orig -e 's/FuseMountName=thinclient_drives/FuseMountName=shared-drives/g' /etc/xrdp/sesman.ini
# Change the allowed_users
echo "allowed_users=anybody" > /etc/X11/Xwrapper.config
#Ensure hv_sock gets loaded
if [ ! -e /etc/modules-load.d/hv_sock.conf ]; then
echo "hv_sock" > /etc/modules-load.d/hv_sock.conf
fi
# Configure the policy xrdp session
cat > /etc/polkit-1/rules.d/02-allow-colord.rules <<EOF
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.color-manager.create-device" ||
action.id == "org.freedesktop.color-manager.modify-profile" ||
action.id == "org.freedesktop.color-manager.delete-device" ||
action.id == "org.freedesktop.color-manager.create-profile" ||
action.id == "org.freedesktop.color-manager.modify-profile" ||
action.id == "org.freedesktop.color-manager.delete-profile") &&
subject.isInGroup("users"))
{
return polkit.Result.YES;
}
});
EOF
# Adapt the xrdp pam config
cat > /etc/pam.d/xrdp-sesman <<EOF
#%PAM-1.0
auth include system-remote-login
account include system-remote-login
password include system-remote-login
session include system-remote-login
EOF
###############################################################################
# .xinitrc has to be modified manually.
#
echo "You will have to configure .xinitrc to start your windows manager, see https://wiki.archlinux.org/index.php/Xinit"
echo "Basic configuration:"
echo "$ cp /etc/X11/xinit/xinitrc ~/.xinitrc"
echo "~/.xinitrc (comment or delete the default cmd twm, xclock and xterm and add your DE start cmd)"
echo "#twm &"
echo "#xclock -geometry 50x50-1+1 &"
echo "#xterm -geometry 80x50+494+51 &"
echo "#xterm -geometry 80x20+494-0 &"
echo "#exec xterm -geometry 80x66+0+0 -name login"
echo "exec dbus-run-session -- startkde (or startxfce4 or..)"
echo "Reboot your machine to begin using XRDP."
@nodgear
Copy link

nodgear commented Jun 15, 2022

Yay won't run as super user, doing sudo yay -Syu <package> is bound to failure.

@rajhlinux
Copy link

rajhlinux commented Jul 8, 2022

how exactly do I use this script for Arch Linux, I just simply run the script anywhere on terminal, do I need to add any variables to the script?

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment