- https://superuser.com/questions/1660150/change-screen-resolution-of-ubuntu-vm-in-hyper-v
- https://dev.to/samerickson/-improving-performance-with-linux-boxes-in-hyper-v-3chb
- https://askubuntu.com/questions/1263977/ubuntu-on-hyper-v-sluggish-slow-ui-experience
- https://superuser.com/questions/1539900/slow-ubuntu-remote-desktop-using-xrdp
- https://superuser.com/questions/518484/how-can-i-increase-the-hyper-v-display-resolution
- https://superuser.com/a/1505724
- https://superuser.com/a/1598852
- https://superuser.com/questions/1728001/arch-install-hangs-on-windows-11-hyper-v-vm
I couldn't find instructions that were 100% complete, so I put this together.
These instructions worked fine for me. Follow each step carefully.
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.
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
- Settings > Security
- Change Template to "Microsoft UEFI Certificate Authority"
- OK
- Connect, Start
Use all defaults.
Do not choose "Log in Automatically"
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."
- Connect, Start
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
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.
How to install Ubuntu 20.04 on Hyper-V with enhanced session