Connecting 2 HTC Vive to one computer. Step-by-step instruction

htc-vive-6-1.jpg

After buying a new model of a VR headset coming without peripherals I was left alone with the old device, and without the ability to connect it to the computer. By default, SteamVR cannot work with two VR devices at a time, so in this article, I’ll describe the solutions to the most common problems.

This method is likely to work for other VR headsets, such as Oculus or WMR. However, I tested it only with Vive.

Also, this method can work for three or more headsets, but this, of course, will depend on the hardware characteristics.

Note that some of the problems covered in the article arise when attempting to use the hardware which isn’t marked as a “server” one on a “server” machine. For reasons known only to marketers the drivers of these devices fail to function under the server OS or virtual machine, so I’ll describe how their configurations can be changed. It’s also worth mentioning that all methods are highlighted for informational purposes only and are not recommended for use.

Preparation

System requirements:

Two video cards, each of which can separately support VR games. (+1 for every additional headset).

A processor supporting virtualization and having at least 8 threads. (+4 threads for every additional headset).

8GB of RAM. (+ 4GB for every additional headset).

A fair number of USB 3.0 ports on the motherboard for all of your devices.

The characteristics of the hardware used during the test:

The motherboard: X299 AORUS Gaming 3.

The processor: i7-7820x (16 threads).

Video cards: GTX-1080 2 pieces.

64GB of RAM.

Installation

1.1. Install and configure Windows Server 2016.

2.1. Go to the "Server Manager"->“Add Roles and Components” and in the window that opens add the role of the “Hyper-V” server. The server must be allowed to connect to your network.

2.2. After the installation, go to the "Hyper-V Manager".

2.3. Create a new virtual machine. In its settings specify at least 4GB of RAM and at least 4 processor threads.

2.4. Start the virtual machine and install Windows 10 or Windows 7 platform.

2.5. After the installation and initial setup, disable the virtual machine.

3.1. Now you need to pass one of the video cards into the virtual machine. (Documentation)

3.2. Disable SLI if it was active.

3.3. Go to the "Task Manager". Find the video card that will be used in the virtual machine and unmount it.

3.4. Go to the Properties of the unmounted video card. In the tab Details, find Location and copy the path from there.

3.5. Now, set up a virtual machine using PowerShell and mount the video card to it. For example, the name of the machine is VMName, and the path of the video card is $locationPath.

        Set-VM -Name VMName -AutomaticStopAction TurnOff
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Dismount-VMHostAssignableDevice -force -LocationPath $locationPath
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
    

To mount the video card back to the host:

        Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
Mount-VMHostAssignableDevice -LocationPath $locationPath
    

3.6. Start the virtual machine. If everything went well, the video card will appear in the Task Manager of the virtual machine.

4.1. Install the driver for the video card.

5.1. It is not possible to access physical USB ports from Hyper-V. Therefore, you can solve the connection problem in two ways.

5.2. If you have a PCI-E USB controller, you can pass it into the virtual machine just as you did with the video card.

5.3. If you have no controller, you can use Flexihub.

6.0. Now, the virtual machine and the host will see each a separate headset, and further configuration does not differ from the standard settings of the VR Headset.

Conclusions

If you know how to optimize these methods or have experience of connecting other VR headsets, please write about it in the comments below. Any tips are welcome.  

Max Spencer
I am a computer enthusiast, programmer, and electronics tinkerer. I work with PHP, MySQL, HTML, JavaScript, jQuery, CSS as well as C, Arduino.