Skip to content

Instantly share code, notes, and snippets.

@milnak
Last active April 24, 2024 20:24
Show Gist options
  • Star 68 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save milnak/54e662f88fa47a5d3a317edb712f957e to your computer and use it in GitHub Desktop.
Save milnak/54e662f88fa47a5d3a317edb712f957e to your computer and use it in GitHub Desktop.
[Enabling enhanced session in Hyper-V for Ubuntu 20] This works for me, although it seems that Hyper-V quick create now supports enhanced session by default. #ubuntu #hyperv

Setup Hyper-V enhanced session for Ubuntu 20

I couldn't find instructions that were 100% complete, so I put this together.

These instructions worked fine for me. Follow each step carefully.

Download Ubuntu 20 desktop

DO NOT create the VM by choosing Quick Create in Hyper-V Manager. Follow these instructions exactly.

Download Ubuntu Desktop 20.04 LTS from here - later 20.xx versions will likely work as well.

Direct link as of this writing is here.

Set up Hyper-V VM

New > Virtual Machine

Use all defaults aside from:

  • Name: Ubuntu 20.04 LTS
  • Generation: 2
  • Startup memory: 4096
  • Connection: Default Switch
  • Install from bootable image file: (use iso downloaded above)
  • OK

Set Ubuntu compatible security template for Secure Boot

  • Settings > Security
  • Change Template to "Microsoft UEFI Certificate Authority"
  • OK

Start VM

  • Connect, Start

Install Ubuntu in VM

Use all defaults.

Do not choose "Log in Automatically"

Install and run linux-vm-tool script

sudo apt-get update

sudo apt-get install --yes git

git clone https://github.com/Hinara/linux-vm-tools.git

cd linux-vm-tools/ubuntu/20.04

chmod +x ./install.sh

sudo ./install.sh

sudo shutdown -r now

For reference, the contents of the install.sh script (as of commit 19ae5b9) is:

#!/bin/bash

#
# This script is for Ubuntu 20.04 Focal Fossa to download and install XRDP+XORGXRDP via
# source.
#
# Major thanks to: http://c-nergy.be/blog/?p=11336 for the tips.
#

###############################################################################
# Use HWE kernel packages
#
HWE=""
#HWE="-hwe-20.04"

###############################################################################
# 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

###############################################################################
# XRDP
#

# Install hv_kvp utils
apt install -y linux-tools-virtual${HWE}
apt install -y linux-cloud-tools-virtual${HWE}

# Install the xrdp service so we have the auto start behavior
apt install -y xrdp

systemctl stop xrdp
systemctl stop xrdp-sesman

# Configure the installed XRDP ini files.
# use vsock transport.
sed -i_orig -e 's/port=3389/port=vsock:\/\/-1:3389/g' /etc/xrdp/xrdp.ini
# 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

# Add script to setup the ubuntu session properly
if [ ! -e /etc/xrdp/startubuntu.sh ]; then
cat >> /etc/xrdp/startubuntu.sh << EOF
#!/bin/sh
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
exec /etc/xrdp/startwm.sh
EOF
chmod a+x /etc/xrdp/startubuntu.sh
fi

# use the script to setup the ubuntu session
sed -i_orig -e 's/startwm/startubuntu/g' /etc/xrdp/sesman.ini

# rename the redirected drives to 'shared-drives'
sed -i -e 's/FuseMountName=thinclient_drives/FuseMountName=shared-drives/g' /etc/xrdp/sesman.ini

# Changed the allowed_users
sed -i_orig -e 's/allowed_users=console/allowed_users=anybody/g' /etc/X11/Xwrapper.config

# Blacklist the vmw module
if [ ! -e /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf ]; then
  echo "blacklist vmw_vsock_vmci_transport" > /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf
fi

#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

# reconfigure the service
systemctl daemon-reload
systemctl start xrdp

#
# End XRDP
###############################################################################

echo "Install is complete."
echo "Reboot your machine to begin using XRDP."

Start VM (again!)

  • Connect, Start

Run the script again

Yes, you must runt the script again after rebooting. This is a step that many online instructions missed.

Note: This step takes a while to complete.

cd linux-vm-tools/ubuntu/20.04

sudo ./install.sh

sudo shutdown -h now

Set Hyper-V transport type

In PowerShell, run the following:

(note that if you named your VM something different, replace the VMName parameter accordingly. Use Get-VM to see the name of all VMs)

Set-VM -VMName 'Ubuntu 20.04 LTS' -EnhancedSessionTransportType HvSocket

start and connect to the VM. You should now see a prompt for resolution when the VM starts up.

You now have enabled enhanced session, which allows for copy and paste between host and VM etc.

References

How to install Ubuntu 20.04 on Hyper-V with enhanced session

Ubuntu 20.04 on Hyper-V

@milnak
Copy link
Author

milnak commented Apr 10, 2021

Note that you can disable the Ubuntu swipe to unlock screen by doing:

gsettings set org.gnome.desktop.session idle-delay 0

@amry-dgnet
Copy link

I'm not able to run install.sh for the first time; the error messages I'm getting:

./install.sh: line 106: unexpected EOF while looking for matching `"'
./install.sh: line 107: syntax error: unexpected end of file

@triplejay2013
Copy link

I had the same issue. The install.sh is missing a double-quote on line 79
change

  echo blacklist vmw_vsock_vmci_transport" > /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf

to

  echo blacklist "vmw_vsock_vmci_transport" > /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf

@AnthonyMonterrosa
Copy link

I had the same issue. The install.sh is missing a double-quote on line 79
change

  echo blacklist vmw_vsock_vmci_transport" > /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf

to

  echo blacklist "vmw_vsock_vmci_transport" > /etc/modprobe.d/blacklist-vmw_vsock_vmci_transport.conf

I believe the quotes should also surround 'blacklist'. Otherwise, you're giving two separate inputs to 'echo'.

@milnak
Copy link
Author

milnak commented Oct 20, 2021

looks like the Hinara fixed the script with this commit.

@felipemarques
Copy link

works fine!

@nul800sebastiaan
Copy link

This works with a fresh install of Ubuntu 21.10 as well, make sure to remember the script again after reboot, then shut down and set the Hyper-V transport type. I forgot the last bit and.. predictably, it didn't work.. 😉

@AV68
Copy link

AV68 commented Nov 16, 2021

I did everything listed in this article but the advanced session icon is still greyed.
:-(

@danchitnis
Copy link

Most of the time it doesn't work, but sometimes it works. Can't figure out what is the reason.

@abelal83
Copy link

abelal83 commented Jan 4, 2022

Followed everything in guide.. doesn't work :(
I've given up, VMWare for me it is.

@zhantongz
Copy link

Thank you!

Turn off the machine before setting the transport type with Set-VM in PowerShell. After that, start (turn on) the VM without connecting to it using the right-click menu. Wait until the login screen appears (when xrdp is up and running) in the thumbnail before connecting.

@jdvor
Copy link

jdvor commented Jan 17, 2022

Does not seem to work for me. (Windows 10 Pro 21H1 9043.1466, Ubuntu 20.04 LTS). The enhanced session button stays disabled.

Make sure not to create the VM by choosing Quick Create in Hyper-V Manager. I know it's tempting, thinking if it's officially maintained image, it must be better prepared for OS integration, right? Wrong. Just follow this guide to the letter.

@joaomoreno
Copy link

This still doesn't work for me either.

@zhantongz
Copy link

If you are sure xrdp is running, try closing the connection window, right click the virtual machine to "Save" in the Manager, then "Start" and then open the connection window.

@joaomoreno
Copy link

joaomoreno commented Jan 26, 2022

Nope, that didn't work either. I'm sure xrdp is running.

@kgnfth
Copy link

kgnfth commented Feb 2, 2022

Thanks it works!

@AV68
Copy link

AV68 commented Feb 2, 2022

I moved to Virtualbox and now I have fullscreen, mouse and keyboard integration and also network is 100x faster than Hyper-V
Ciao

@kestasjk
Copy link

It works just fine

@fugtui
Copy link

fugtui commented Feb 27, 2022

Awesome, that finally worked on the first try. THANKS!

@AdamDanischewski
Copy link

Worked for me, Windows 11 Pro. Tried basically the same steps in another guide except I let Hyper V fetch the ISO and it was a no go. For those having a problem, you may want to check that you have RDP set up to work. You'll get a kitschy looking "Just connecting" screen (looks atomic w/pastel colors) from rdp after you get the resolution dialog.

@ferminc
Copy link

ferminc commented May 29, 2022

nice, works with 22.04!

@akovac35
Copy link

This only started working for me after I first installed azure kernel:
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-ubuntu

Or maybe the problem was that I enabled enhance mode in Hyper-V while the VM was running. Stopping and starting it did not help.

Anyhow, now it works. Thanks.

@CXwudi
Copy link

CXwudi commented Aug 4, 2022

For some reason, when I use Hyper-V Quick Create to create an Ubuntu 22.04 VM, it has the enhanced session built-in. Not sure if it is just newly added for Ubuntu 22.04 only in Hyper-V Quick Create.

Updated: The Ubuntu 22.04 from Hyper-V Quick Create is using Ubuntu 22.04 LTS (GNU/Linux 5.15.0-1014-azure x86_64) kernel. This might be related to what @akovac35 pointed.

FYI, I am running win 10 21h2 Pro

@milnak
Copy link
Author

milnak commented Aug 4, 2022

For some reason, when I use Hyper-V Quick Create to create an Ubuntu 22.04 VM, it has the enhanced session built-in. Not sure if it is just newly added for Ubuntu 22.04 only in Hyper-V Quick Create.

I just tried it here on Windows 11 and you're right -- it seems like Microsoft seems to have added support for enhanced VM with the latest 22.04 LTS quick create. Great!

@Snickbrack
Copy link

So someone suggested the option to use Quick Install with the 22.04 LTS Version.

And I must say it works for me. Use Xorg to connect and login. It may take some time to connect (for me 2-3 Minutes).

Just write me if you have further questions.

@odoohome
Copy link

odoohome commented Dec 8, 2022

Thank you, it worked for me

@lyubomyrv
Copy link

lyubomyrv commented Sep 25, 2023

If you experience "black-screen" or "frozen desktop" in Hyper-V "Enhanced session" virtual machine connection by choosing Quick Create in Hyper-V Manager or just after install of any other Unix OS it may be desktop instances management issue due to autologon feature.

Quick test for Ubuntu 20.xx - uncheck View -> Enhanced session in VMC windows and launch file manager from Ubuntu desktop: windows from file manager will be painted in enhanced session desktop while rest of applications still sitting in first autologin desktop session.

A quick workaround is to disable Ubuntu autologin feature or log out from Ubuntu desktop in basic session, then switch to enhanced session and log in as it should be from the beginning. The same rule applies to Xserver's running on Windows host machine used by guest Unix OSes.

@CXwudi
Copy link

CXwudi commented Sep 26, 2023

I can confirm the auto login is pretty annoying to me as well. It would be great if this feature can be disabled during the OS installation

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