In a previous article I explained how to use PulseAudio with XRDP to allow your Ubuntu Hyper-V VM to pass audio through your host machine’s sound system. It has been brought to my attention that the instructions do not work for everyone.
I believe most of the people that have issues are choosing the 20.04 version of Ubuntu when deploying their Hyper-V VM. The 20.04 edition of Ubuntu is not running XRDP (Linux RDP Server) by default. When you connect to it from the Hyper-V manager you are directly viewing the machine’s console. PulseAudio requires an enhanced XRDP session to work.
I’ve spent a lot of time getting pass-through sound working in 20.04. Deploy the VM as outlined in the original document choosing the 20.04 version instead. Once you have completed the operating system installation, run the software updater (in the apps menu) until everything is patched to the newest version.
Please Note: These instructions will not work if your VM is configured for auto logon. PulseAudio runs in the user space and requires active logon to work. It would be possible to convert the daemon to a service, but that is beyond the scope of this post.

Once Ubuntu is installed and up to date we’ll need to manually configure it for an enhanced session. Open a terminal and run this command to download the configuration script:
wget https://raw.githubusercontent.com/Hinara/linux-vm-tools/ubuntu20-04/ubuntu/20.04/install.sh
Once the download finishes run:
sudo chmod +x install.sh
followed by:
sudo ./install.sh
to install and configure XRDP.


You will be prompted to logon to your VM with XRDP, but it will not work until you reboot. Use the button in the tool bar to return to the basic session and power off the VM.

Open PowerShell on your host system and run the command below, where the name of your particular VM is between the quote marks.
Set-VM -VMName "Ubuntu 20.04" -EnhancedSessionTransportType HvSocket

Power on the VM and you will be prompted by the RDP client to select your monitor size. Logon to XRDP with your Linux credentials and the desktop will load. Now that we have installed and configured XRDP we can proceed to install and configure PulseAudio.


Occasionally you may stop being prompted to change your monitor size, etc. by the RDP client when you connect to your VM. There is a check box that can accidently be selected that stores your current settings for all future connections. To get the controls back, right click on your VM in the Hyper-V manager and then click Edit Session Settings.
Open a terminal.
Install the pre-requisite libraries with this command:
sudo apt-get install git libpulse-dev autoconf m4 intltool build-essential dpkg-dev libtool libsndfile-dev libspeexdsp-dev libudev-dev -y
Next we need to enable the “source” repository so that we can download PulseAudio and compile it. You can enable the “source” repo in the GUI:

Or run:
sudo cp /etc/apt/sources.list /etc/apt/sources.list~
sudo sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list
sudo apt-get update

Now we need to get the source code for pulse audio and compile it. Run the following command groups one after the other. Each will take some time to complete.
sudo apt build-dep pulseaudio -y
cd /tmp
sudo apt source pulseaudio
pulsever=$(pulseaudio --version | awk '{print $2}')
cd /tmp/pulseaudio-$pulsever
sudo ./configure
sudo git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
cd pulseaudio-module-xrdp
sudo ./bootstrap
sudo ./configure PULSE_DIR="/tmp/pulseaudio-$pulsever"
sudo make
cd /tmp/pulseaudio-$pulsever/pulseaudio-module-xrdp/src/.libs
sudo install -t "/var/lib/xrdp-pulseaudio-installer" -D -m 644 *.so
Power off your VM and wait until the snapshot merge in Hyper-V completes then power it back on. When you connect to it this time, use the “Show Options” down arrow and then click the “Local Resources” tab. Click the settings button and then choose the option to play back audio on this device.


Now open the setting applet on your Ubuntu VM and go to sound. Use the drop down to select xrdp-sink as the audio device. Sometimes the option will be missing. Generally, if you wait some random amount of time the daemon will start on its own, I’m not sure what causes the inconsistency.

If the option never appears or you get tired of waiting. Close the Settings applet and open a terminal. Run: pulseaudio -k to start the daemon yourself. Then use settings to adjust the output device again.

[…] Attention: If you are using a newer edition of Ubuntu these instructions will not work. The more modern versions do not include XRDP in the base image. There is an updated version of these instructions that will get sound working at https://techbloggingfool.com/2020/12/26/deploy-a-linux-vm-on-hyper-v-with-sound-20-04-edition/ […]
LikeLike
I tried this on Ubuntu 20.10 and I can confirm that it’s working absolutely fine. Thanks a lot.
LikeLike
I ran through the instructions as I posted them again to make sure I didn’t miss something. The pulsever line is creating a variable that contains the pulseaudio version number so that the next line can change to the correct directory. I noticed in your comment that it shows as pulsever=$(pulseaudio –version | awk ‘{print $2}’), but it should be pulsever=$(pulseaudio –version | awk ‘{print $2}’). There should be a double dash before the version number. The windows clipboard or WordPress is doing something odd to that line when you copy and paste it. It is doing it to me as well and I haven’t figured out why yet. If fixing the dash doesn’t let the line work, you should be able to change the next line to manually go to the correct directory. If you build a new VM and still end up with 13.99.2 it would be: “cd /tmp/pulseaudio-13.99.2”.
The other issue I know about from working with someone else, is that you cannot have your virtual machine configured to automatically logon. Pulseaudio runs as a daemon in the user space and it doesn’t work with auto logon.
I plan on updating the post with both of these pieces of info. Thanks for letting me know about that line not working.
This is the wiki for the plug-in itself, you might find some useful info there: https://github.com/neutrinolabs/xrdp/wiki/Audio-Output-Virtual-Channel-support-in-xrdp
The other tip I can give you is that usually when you only get prompted to configure the RDP client once it is because the “save these settings for all sessions” box was checked. If you right click on the VM in the Hyper-V manager you should see an option to “Edit Session Settings” that will give you the controls again.
With all the versions of Hyper-V, Ubuntu, XRDP, and the Pusleaudio plug-in, it is difficult to write instructions that cover every scenario. If you decide to try again maybe knowing about the logon and — issue will be enough to get you over the hurdle.
Good luck.
LikeLike
Thank you so much! I had tried everything else I could find prior to this because it seemed so involved. Yet, your instructions were the only ones to actually work.
Thanks for taking the time to put this in a post and sharing your knowledge!
LikeLike
Thank you , this works on PopOS with windows 10 enterprise host(build 19041.) . As you mentioned, I did have to ‘pulseaudio -k’ for the XRDP source/sink to appear within the linux VM.
Aside, I could never find the edit session properties once its ‘saved’ in Hyper-V, so currently taking good care of never storing it :).
LikeLike
Howdy!
Nice tut but I ran into a problem: after running the install.sh on Ubuntu 20.04LTS I’m unable to connect by RDP from other machines – except the Hyper-V host itself. Is this normal or do I have to modify anything in the xrdp.ini?
Thx and stay healthy!
Cheers
Chris
LikeLike
As it turns out, the answer to your question was the subject of my newest article. https://techbloggingfool.com/2021/02/28/hyper-v-nat-remote-access-to-windows-and-linux-virtual-machines/
LikeLike
[…] several posts on creating Hyper-V virtual machines on Windows 10. One of my most popular covers how to create a Linux VM with sound. Inevitably, somebody will follow up with a question along the lines of, “How do I access […]
LikeLike