Return to Level1Techs.com

[Guide] Painlessly adding audio support to a Looking Glass windows 10 machine using Scream!

Hello there fellow Looking Glass users!

As of a recent windows 10 update, all programs that utilize audio will hang when the output is set to an ICH6 or ICH9 device. AC97 drivers are quite old, and setup is quite tedious.

Today I present to you: Scream, primarily developed by duncanthrax. It provides an alternate way to send sound to the host, and is painless to set up.

Setup for scream is really simple, you already have the IVSHMEM drivers installed as part of Looking Glass setup, so you can skip this part in the official guide. (Link)

In this guide, an example for Pulseaudio is provided. But scream supports ALSA as well.

A link to the official tutorial I am basing this guide on is here! Below is a step-by step instruction for modifying your existing Looking Glass machine!

There’s some special sauce at the bottom that is not in the official guide, but i highly recommend doing. Scroll down to the “Linking Looking Glass with Scream for the perfect experience.” section.

Here’s how I upgraded my VM to use Scream v3.4

Configuring the windows VM.

  • Download the latest release from the GitHub repository.
    • Choose the non-source .zip file
  • Inside that file, there’s a directory called Install.
    move it into your Windows 10 virtual machine
  • Execute install.bat as administrator
  • Open registry editor and navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Scream\Options
    • If the Options key doesn’t exists, create it.
  • Create a DWORD value called UseIVSHMEM and set it to 2.
    image
    image
  • Shut down the VM, and use virsh edit <vm-name> and insert this snippet in the XML file.
    • Please notice that the size must match the number entered in the DWORD value as configured in windows.
    • If you get complaints like: “Attempted double use of PCI Address”, change the slot number to something else and try again.
   <shmem name='scream-ivshmem'>
      <model type='ivshmem-plain'/>
      <size unit='M'>2</size>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
    </shmem>
  • Configuring the windows machine is now complete.

Setting up the Linux host

The Linux host will use a ‘receiver’ to play sound. Instructions straight from the guide:

Linux/Pulseaudio: Not included in the installer package. Just type ‘make’ to build it. You might need to install build tools and Pulseaudio development packages.
Linux/ALSA: Originally contributed by ivan. Not included in the installer package. Just type ‘make’ to build it.You might need to install build tools and ALSA development packages.

  • Download the source code .zip for the same version of scream (In my case, v3.4)
  • Extract the following directory: Scream-X.X/Receivers/pulseaudio-ivshmem
  • Open a terminal inside the extracted directory containing a file named: Makefile
    • In the terminal, run: make
    • You might need some dependencies, for those, see the quote above.
  • You are left with a file called: scream-ivshmem-pulse. Move it to a location of your choosing. (I chose my Looking Glass folder.)

Testing functionality

  • Start the windows VM
  • Check if you have read-access to the /dev/shm/scream-ivshmem file.
  • Execute the following command in the directory you have moved the compiled program to: ./scream-ivshmem-pulse /dev/shm/scream-ivshmem
  • Play some test tunes in the windows VM. Make sure to set the audio output to scream.
  • You should hear sound at this point. If you don’t, something went wrong. (Maybe look at the official guide?)

Linking Looking Glass with Scream for the perfect experience.

We will use some bash magic to make sure Scream only runs for as long as Looking Glass is open. Therefore, we never run Looking Glass directly, but use bash to run it for us.
Create a file with a name of your choosing. This file will be used to start and stop Scream simultaniously with Looking Glass. Read the comments inside the snippet for further instructions.

#!/bin/bash

virsh start Windows_10_VM # Optional line, this will simply start the VM if it isn't running. You can delete this if you wish. Make sure to change the name to your VM name.
/path/to/looking-glass-client >/dev/null 2>&1 & # Starts Looking Glass, and ignores all output (We aren't watching anyways)
/path/to/scream-ivshmem-pulse /dev/shm/scream-ivshmem & # Starts Scream

wait -n # We wait for any of these processes to exit. (Like closing the Looking Glass window, in our case)
pkill -P $$ # We kill the remaining processes (In our case, scream)

Make sure the file is executable, and you should be good to go!

Thanks for making this, duncanthrax!

8 Likes

This is an excellent guide, thank you for your time documenting this. Perhaps this would be better though placed as a topic on the LG Wiki as a workaround until the Intel HDA issues are resolved.

https://looking-glass.hostfission.com/wiki

1 Like

I’d be honored to have this on the LG wiki!

I’m not sure how to create a new page on the wiki (and if I am allowed to). Would you mind copying this over there? I don’t need credits for writing this.

I would be happy to if I get a chance in the next few days. However if you feel so inlined you are able to create pages simply by visiting a non-existant page and creating it, for example:

https://looking-glass.hostfission.com/wiki/index.php?title=Using_Scream

Edit: Feel free to link to it in the appropriate place on the guides page:

https://looking-glass.hostfission.com/wiki/index.php?title=Guides

1 Like

I have created a page, and updated the guides list. I hope this helps!

3 Likes