Skip to content

Instantly share code, notes, and snippets.

@mimura1133
Last active January 29, 2023 21:24
Show Gist options
  • Star 21 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save mimura1133/25451be04929d65993e0fb658d0b6890 to your computer and use it in GitHub Desktop.
Save mimura1133/25451be04929d65993e0fb658d0b6890 to your computer and use it in GitHub Desktop.
Enhanced Session for Kali Linux.
#!/bin/bash
# Original : https://raw.githubusercontent.com/Microsoft/linux-vm-tools/master/arch/install-config.sh
###############################################################################
# Update our machine to the latest code if we need to.
#
if [ "$(id -u)" -ne 0 ]; then
echo 'This script must be run with root privileges' >&2
exit 1
fi
apt update && apt upgrade -y
if [ -f /var/run/reboot-required ]; then
echo "A reboot is required in order to proceed with the install." >&2
echo "Please reboot and re-run this script to finish the install." >&2
exit 1
fi
###############################################################################
# Install XRDP
#
apt install -y xrdp
###############################################################################
# Configure XRDP
#
systemctl enable xrdp
systemctl enable xrdp-sesman
# Configure the installed XRDP ini files.
# use vsock transport.
# sed -i_orig -e 's/use_vsock=false/use_vsock=true/g' /etc/xrdp/xrdp.ini
sed -i_orig -e 's/port=3389/port=vsock://-1:3389/g' /etc/xrdp/xrdp.ini # 2020.1 support.
# 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
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/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
###############################################################################
# .xinitrc has to be modified manually.
#
#echo "exec gnome-session" > ~/.xinitrc
echo "exec startxfce4" > ~/.xinitrc # thanks @rasschaert and @patrickceg.
echo "You will have to configure .xinitrc to start your windows manager, see https://wiki.archlinux.org/index.php/Xinit"
echo "Reboot your machine to begin using XRDP."
@jsorah
Copy link

jsorah commented Feb 24, 2019

In case anyone else stumbles upon this, don't forget to set your Hyper-V VM to actually use Enhanced Session Mode:

Set-VM -VMName <your_vm_name> -EnhancedSessionTransportType HvSocket

This worked perfectly on the 2019.1 release of Kali.

@Metal0gic
Copy link

can you be more specific with what we have to do to configure initxrc to start our windows manager? i read the article but its not clear what i have to do on my specific system, fresh kali install

@calvaradocl
Copy link

Thanks, works great with Kali 2019.1, you have to run the script 2 times (two reboots) and then use the command provided by @jsorah

@rasschaert
Copy link

XFCE is now the default desktop in Kali, starting in the 2019.4 update. Might I suggest echo "exec startxfce4" > ~/.xinitrc at the end of the script?

@patrickceg
Copy link

patrickceg commented Dec 19, 2019

XFCE is now the default desktop in Kali, starting in the 2019.4 update. Might I suggest echo "exec startxfce4" > ~/.xinitrc at the end of the script?

I can confirm that's really all you need to do to get it to work for Kali 2019.4: I uploaded a fork of this script with the one liner change (and for the original author, feel free to take the change as I'm not sure if you can pull request a Gist...)

EDIT: Actually I used xfce4-session (because the original used gnome-session) and it works for me. If I recall, the startxfce4 passes additional arguments (which make quite a difference in the default UI you start with in Xubuntu), but the Kali interface looks normal enough through the xfce4-session as the exec.

@mimura1133
Copy link
Author

Hi @rasschaert and @patrickceg, Thank you for your advice.
I modified the code to echo "exec startxfce4" > ~/.xinitrc from execute the gnome. 👍

@nathanVader
Copy link

nathanVader commented Jan 22, 2020

Hello,

I installed last Kali Linux Gnome (2019.4) on Hyper-V on Windows 10 ver. 1909... I run the script twice (activating "exec gnome-session" instead of "exec startxfce4", because I used Gnome ISO), and executed the command in PowerShell to use the Enhanced Session, but the Enhanced Session appears deactivated.

Can someone help me?

Thanks.

@nathanVader
Copy link

I found a solution editing xrdp.ini and changing the port value to this:
port=vsock://-1:3389

That makes it work in Kali with Xfce, but in Kali with Gnome fails to connect to RDP session:

image

@patrickceg
Copy link

patrickceg commented Jan 23, 2020

Thanks @nathanVader for the research: I updated my fork for the Xfce fix although I can't find anything for gnome unfortunately. I'm downloading a Kali Gnome, but I'm concerned my laptop (Core i5-5300U) won't even be able to handle it properly to debug. The newest Kali+Gnome was a disaster for me on VMWare player when I tried last month (half of the screens didn't render and maybe 5 frames per second if I was lucky).

EDIT: Wow... the Hyper-V gods really don't like me debugging this. The second I make a VM checkpoint, I corrupt the VM's disk, so it's difficult to switch out xfce for gnome to see what Gnome is complaining about. I did reproduce the gnome issue before my VM self-destructed, so I'll try again with a Kali Weekly image.

@mimura1133
Copy link
Author

I just updated the enhanced session script to support Kali linux 2020.1.
https://github.com/mimura1133/linux-vm-tools

Copy link

ghost commented Feb 24, 2020

still could not get enhanced session enabled on kali 2020.1 with default installation. the script does not error out but the enhanced session mode will not activate for some reason.
any clues? after the reboot the system still boots to lightdm instead of xrdp login screen as in ubuntu

and set-vm -VMname is an invalid parameter at least on windows 10 v1909 . and what i know is that enhanced session mode is enabled by default on windows 10 .

Copy link

ghost commented Feb 24, 2020

In case anyone else stumbles upon this, don't forget to set your Hyper-V VM to actually use Enhanced Session Mode:

Set-VM -VMName <your_vm_name> -EnhancedSessionTransportType HvSocket

This worked perfectly on the 2019.1 release of Kali.

i cant seem to get this command to work at all . .. invalid parameter name VMname .. Running Windows 10 v1909

@patrickceg
Copy link

patrickceg commented Feb 25, 2020

Set-VM -Name acamar-kali -EnhancedSessionTransportType HvSocket

Seems to work (my VM is called acamar-kali)

The newest documentation has Set-VM -Name ... Also "-EnhancedSessionTransportType" doesn't exist in the documentation, but it tab-completes on my machine.

https://docs.microsoft.com/en-us/powershell/module/hyper-v/set-vm?view=win10-ps

If you really can't get the name to work, try

Get-VM myvm

...if that returns nothing or has an error, your PowerShell module for Hyper-V is broken.
If the Get-VM works, you can use the pipe notation to run Set-VM:

Get-VM myvm | Set-VM -EnhancedSessionTransportType HvSocket

@timdenholm
Copy link

timdenholm commented Apr 17, 2020

Just thought I'd confirm that this works for me with a fresh install of Kali 2020.2 and XFCE (on Windows 10 1909, build 18363.778), though I couldn't get it to use XRDP until I tried shutting down my VM before enabling Enhanced Session Mode on the VM, after that it worked as expected.

Thanks @mimura1133

@Nathan-Gautrey
Copy link

Likewise just tried it on Kali 2020.02 (upgraded hyper-v image from 2019.4), only worked once Kali was fully shut down (rather than a reboot) after that worked like a charm.

Thanks @mimura1133

@under-hill
Copy link

FYI: for Kali 2020.3 I had to replace the sed slashes ('/') with percent signs ('%') as described here https://serverfault.com/questions/857477/sed-e-expression-unknown-option-to-s

Besides that, everything else worked great.

Thanks @mimura1133

@holidayz1
Copy link

Hi Team,
This worked fine for me earlier but I am having issue finding xrdp package in Kali Repo with Kali 2021.1 ( it 404ed ),
anyone hitting the same issue,

( though if i get the repo via deb.debian then it also doesn't works )
any advice would be really appreciated :)

@mimura1133
Copy link
Author

mimura1133 commented May 14, 2021

@holidayz1
Copy link

Thanks @mimura1133
yes, I believe tried https://github.com/mimura1133/linux-vm-tools/blob/master/kali/2020.x/install.sh , It didn't worked.
Though I tried linux-vm-tools/ubuntu/19.04/install.sh since i got xrdp from deb.debian and it worked like a charm

@mimura1133
Copy link
Author

Hi @holidayz1,
Unfortunately, I have not been able to reproduce the problem with clean installation.
However, if you using GNOME (gdm3) or latest version of xrdp, the ubuntu/19.04/install.sh be better, as you said.

if you're using GNOME shell (gdm3), need to set "WaylandEnable=false" at /etc/gdm3/custom.conf, because the xrdp will use Xorg.
other changes are in the way the VSOCK settings are written.

If you know of a way to improve the code in the kali version, please send us a pull request, thanks. :)

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