Deploy a Linux VM on Hyper-V with Sound 20.04 Edition

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.

Use Hyper-V quick create to deploy a VM

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.

The highlighted button will return you to a basic session so you can shutdown 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:

Enable the Source-code 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.

About Kevin Trent

IT professional with almost 30 years of experience in Infrastructure, Architecting, Administration, Development, and Communications.

18 Responses

  1. TD Hickerson

    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!

    Like

  2. Rajnish

    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 :).

    Like

    1. TD Hickerson

      Hey Raj,

      If you need to open Session Settings but the options don’t appear, open an administrative powershell:

      vmconnect localhost NAMEOFYOURVM /edit

      (use double-quotes if the vm’s name has spaces in it, i.e. “NAME OF YOUR VM”)

      TD

      Like

  3. Chris

    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

    Like

  4. Roland

    Hi,
    yesterday I found this instruction and thought: finally I will get sound from my Ubuntu VM! I had tried many times before with guides for older Ubuntu versions which never worked for 20.04. I managed to have an xrdp session soon after having created the VM but I never succeeded to get pulseaudio (or other solutions) to work.
    And after having updated my VM and executed all the commands listed here there is still nothing else to select than “dummy source” (sorry if this does not match the real English text! I have to translate from my language).
    I had no obvious error executing the commands but when I use “pulseaudio -k” nothing happens. When trying using sudo I get an error message though (again, a translation): Background process could not be stopped. No matching process found.
    Does somebody have an idea what might go wrong? By the way, I do not use autologon. As far as I remember I did not do a quick create of the VM because I was not able to establish an xrdp session with it. After having read that an “normal” install is necessary to use xrdp I succeeded to set up the VM and connect via xrdp. But could it be possible that pulseaudio does not work for this reason?
    Thanks,
    Roland

    Like

  5. crramirez

    Hello,

    I had to do this in order to work:

    sudo cp /var/lib/xrdp-pulseaudio-installer/* /usr/local/lib/$pulsever/modules

    Regards

    Like

  6. Scott Neumyer

    This works great! Thanks for creating this reference.
    FWIW, I put ” pulseaudio -k ” as a Startup Application, to resolve the random delay in audio availability

    Like

  7. Terence S

    Holy crap! All that just to get sound working!? So sad, Microsoft. With VMware Player v16, sound works right away. No fu*)king around with making a wedding cake. Actually, making a wedding cake would be easier than this. And having to manually set screen resolution to 1920×1080 (Hyper-V screwed that up to), Hyper-V client can kiss my a$$. VMware all the way from now on.

    Like

  8. Eduardo Sales

    Worked really great, I’m far from being a Linux expert and was able to make it work, with this I hopefully will be able to use my Ubuntu VM instead of my existing Windows 7 VM to do all sort of things that I don’t risk doing in my host machine.

    thank you so much

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s