Does my CloudXR server even work?
How to use this guide
Click me: [2]
Click me, too:
Other parts of the guide are long, and central, but break up the flow of the guide, and are therefore hidden until clicked on.
☑️ Check’s are scattered throughout the guide. Each ☑️Check is a section with a large header, so if you encounter an instruction with this symbol, know that you can find a section with detailed instructions
We begin.
You’ve done your best, you’ve tried, but something is just not right. CloudXR isn’t connecting, or streaming, or running without throwing an error. Well, you’re in the right place. Remembering the golden rule of CloudXR debugging:
If right now you don’t succeed, simplify.
We’re going to go right to the bottom–the simplest thing possible–and work our way up. I’m guessing you’ve tried to follow the User Guide in the documentation, know at least a little about CloudXR, and have these things:
- a CloudXR Server: a Windows computer to run SteamVR with CloudXR;
- a CloudXR Client device: a tablet (iOS or Android), a SteamVR gaming PC, or an all-in-one wireless VR headset like the Meta Quest;
- a Network connecting them.
❗️ Use two (2) local, bare-metal Windows computers to start!
Why can't I use my VM or Cloud instance? (clickme)
Almost certainly you are not intending to stream from one PC to another PC in the same room. But we’re going to start there. We will step outwards from this, first towards your intended server, then towards your intended device.
So the Don’t’s right now are:
- Don’t use a remote server.
- Use a computer that’s in the room with you.
- Don’t use Remote Desktop or otherwise “remote into” any computers.
- Not even across the room.
- Log in to all computers using directly attached keyboard/mouse/monitor.
- Don’t do this on a Virtual Machine (VM).
- Drivers get… complicated.
- Use a “bare metal” computer first.
- Don’t use your Quest, iPad, or other device.
- Again, not at first.
- We’ll be using a Windows client for testing.
What do you need?
- Two (or at least one) Windows 11 computers, each:
- in the room with you
- with an NVIDIA GPU
- with an account with Administrator privileges
- with SteamVR installed
- BUT NOT any other XR software (such as Oculus/Meta Link)
❗️You’re probably eyeing a laptop.
That's what I do, but beware. (clickme)
Many folks have gotten this to work, but it’s not officially supported. In particular, you need to make sure that any Windows application mentioned in this guide is running on the NVIDIA GPU.
❗️ Don’t use your Android or iOS or other non-Windows device during this guide.
Why not!? (clickme)
This guide is focused on making sure your server is working. Android and iOS introduce complications, and remember our golden rule: If right now you don’t succeed, simplify.
You may well decide to skip some of the steps of this guide and jump to testing with your device. But if you do, and something isn’t working, come back here to using a Windows client for testing. It eliminates a lot of steps during the debugging feedback loop as you can make changes and run without going through any USB debug bridges or re-deployment.
⚠️ You need to be familiar with Windows command line usage.
Command line knowledge and tools. (clickme)
You need to be comfortable with…
- Command Prompt vs PowerShell;
- processes (tasks);
- executables;
- paths, folders, directories, files, file systems and so forth;
- command-line arguments/flags.
Useful tool: Windows Terminal
- Modern console application that can show multiple terminals as tabs in one or more windows.
- Runs both Powershell and Command Prompt sessions
- Built into Windows 11. Available for download for Windows 10.
☑️ Periodic Check: Can you access Server logs?
You have probably already attempted to run CloudXR via SteamVR on your Server, so we’re going to introduce log files first. If you haven’t tried to run CloudXR, then skip this and come back when you need to check on log files.
How do I check on CloudXR server logs? (clickme)
- Open the CloudXR app data folder
- For CloudXR 4.0, there are up to 3 server log folders inside of this:
SteamVR\logs
SampleServer\logs
TestServer\logs
- Does the right sub-folder exist and does it contain at least one matched pair of logs?
CloudXR ... Server Log <date<time>.txt
Streamer Server Log <date<time>.txt
- Yes?
- The CloudXR server process has been launched at least once.
- No?
- CloudXR has not launched successfully. Either you’ve never launched it, or install did not succeed.
☑️ Check: Is CloudXR installed on the server?
If you haven’t already, designate one of your local, bare-metal computers as your CloudXR Server.
On your Server:
C:\Program Files\NVIDIA Corporation\CloudXR
- Does this folder/directory exist, and does it contain a folder named
VRDriver
?- No? The installer did not succeed.
- Re-run the installer, and pay particular attention to any messages.
- Yes? The binaries are installed.
- No? The installer did not succeed.
There could still be install issues, e.g., the driver is not registered properly with SteamVR. Briefly run SteamVR and check for CloudXR logs
- Run and stop SteamVR.
- Start SteamVR.
- Wait 10-30 seconds.
- Close SteamVR, if open.
- ☑️ Periodic Check: Can you access Server logs?
- Look for the
SteamVR
sub-folder:%LocalAppData%\NVIDIA\CloudXR\SteamVR\logs
- Look for the
- Can you find both
CloudXR...Server...
andStreamer Server...
log files with the right date/time?- No?
- SteamVR is not loading/running the CloudXR server driver.
- Close SteamVR, uninstall CloudXR, reinstall CloudXR, and try again.
- Still No? Reach out on the forums.
- Yes?
- Congratulation! CloudXR Server Driver for SteamVR is installed and SteamVR loads it.
- No?
How to start SteamVR without going through Steam (clickme)
🪟+R , copy-paste (include the quotes):
"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrstartup.exe"
A useful Powershell script to restart SteamVR (clickme)
# Kill the monitor (prevents "SteamVR had an issue; Restart?" dialogue)
Get-Process | Where-Object { $_.Name -match '^vrmonitor$' } | Select-Object -First 1 | Stop-Process
# Kill SteamVR
Get-Process | Where-Object { $_.Name -match '^vrserver$' } | Select-Object -First 1 | Stop-Process
$startvr = Resolve-Path 'C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrstartup.exe'
Write-Host "Launching $startvr"
Start-Process $startvr
☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
There can be only one CloudXR Server process on a given running copy of Windows. There is no way to change the ports etc., so if an old process is hanging around, then any new processes will probably fail to stream. And if the old process is hanging around, it’s probably in an error state and won’t stream, or at the very least, will stream something unexpected/wrong.
Because this is something you’ll need to check for occasionally, and because you probably already tried some stuff and might have some processes hanging around, we’ll check this now.
On any Windows computer running a CloudXR server or client:
SteamVR related tasks
- If SteamVR window is open:
- Close SteamVR
- Task Manager > Details[5]
- SteamVR-related tasks
vrmonitor.exe
- terminate this first; it restartsvrserver.exe
if it stopsvrserver.exe
- terminate this
CloudXR related tasks
- If present, probably running in a Terminal (or Command Prompt or PowerShell) window somewhere
- Switch to this terminal
- Use
Ctrl-C
- Task Manager > Details[6]
- Terminate any
CloudXR.…exe
processes
- Terminate any
☑️ Check: Can you stream from your Server to itself?
Thanks for your patience. You probably wanted to jump into streaming with CloudXR sooner, but the above checks are essential when you’re having issues.
This check sets up the simplest possible CloudXR streaming test. If you were able to install SteamVR and CloudXR on the computer (and that computer is local and bare-metal), then almost certainly this test should succeed. You don’t even need a network connection to try this; it uses the software “loopback” network that Windows 11 provides.
On your Server:
-
Install the CloudXR Client for Windows.
- That’s right, install the client program on your Server box.
- Re-run the installer selecting “Client” on the Components page.
- Check this directory:
C:\Program Files\NVIDIA Corporation\CloudXR\Client\
-
☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
-
Start CloudXRServerSample
- Open a Terminal window
cd "C:\Program Files\NVIDIA Corporation\CloudXR\VRDriver\CloudXRRemoteHMD\bin\win64"
.\CloudXRServerSample.exe
- This VR test server supports most VR features (tracked head poses, controllers) but only for the simple built-in scene (a single object)
- There will be a scroll of log messages, which will quickly stop when the server is ready for clients to connect
-
Start CloudXRClientSample
- Open another Terminal window
cd "C:\Program Files\NVIDIA Corporation\CloudXR\Client"
.\CloudXRClientSample.exe -s 127.0.0.1 -w
-s 127.0.0.1
means “connect to IP 127.0.0.1”-w
means “use windowed mode” (a “mock” VR streamer)
-
Wait 5-10 seconds. In the console, watch for:
- Connected:
I (CloudXR Client) Connection attempt succeeded.
- Streaming: multiple
D (CloudXR Client) FPS: 62.1...
- Connected:
You’re looking for a new Windows desktop window to pop up, taking up most of your screen, with either a statue of an angel, or a pirate ship:
- Did this window appear? Does moving the mouse change the perspective?
- No?
- Check your command lines for accuracy.
- Still No?
- Sorry, but: Restart this process on a different computer, preferably one with a fresh and basic install of Windows.
- If that doesn’t work, reach out; something is up.
- Yes?
- Congratulations! You’ve just run a working CloudXR streaming session!
- No?
☑️ Periodic Check: Can you access Client logs?
On Windows, this is the same as logs for your Server except for the subfolder and log file names:
- Look for
%LocalAppData%\NVIDIA\CloudXR\SampleClient\logs
CloudXR Client Log …txt
Streamer Client Log …txt
- Do these log files exist?
- Yes?
- Great! Include a copy in any help requests (on the forums or otherwise).
- No?
- If you got the client to work but the log files don’t exist, reach out on the forums.
- Yes?
☑️ Check: Can you stream from SteamVR?
Changing one variable at a time, we step from the SampleServer to the SteamVR server.
⚠️ Do not include your VR game / app in this check, only SteamVR.
Why not? (clickme)
There are known issues where some applications fail to stream successfully, even if most apps and SteamVR itself connects and streams fully correctly.
We are stepping out one variable at a time; here we’re adding SteamVR and nothing else.
On the CloudXR Server:
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
- Launch SteamVR
- …waiting until the SteamVR control window appears on the desktop
Still on the CloudXR Server:
- Start the window-mode test client
- New Terminal window
cd "C:\Program Files\NVIDIA Corporation\CloudXR\Client"
.\CloudXRClientSample.exe -s 127.0.0.1 -s
You’re looking for that same window showing a split-view, this time showing the SteamVR mountains (or SteamVR home).
- Did this window appear?
- No?
- Check your command lines for accuracy.
- Reinstall CloudXR.
- Uninstall CloudXR
- Run SteamVR once
- Reinstall CloudR
- Try again.
- Reinstall SteamVR and CloudXR.
- Uninstall CloudXR
- Uninstall SteamVR
- Clean up SteamVR configuration files.
- Make sure Steam is not cloud-syncing your SteamVR config to something you don’t want.
- NOTE: I know these are issues, and you might need to deal with this, but I don’t presently have details on how to do it or a link to share. Use your usual digital Internet information search/retrieval friends for help.
- Reinstall SteamVR
- Run SteamVR once
- Reinstall CloudR
- Try again.
- *Still No?
- Try this whole procedure on a different computer, preferably one with a fresh and basic install of Windows 11.
- If that does work, then something is up with your first computer.
- Either way, reach out on the forums; something is up.
- Remember to have all your Client and Server logs (☑️ details below).
- Yes?
- Congratulations! You can stream from SteamVR.
- No?
Some house keeping tasks:
- ☑️ Periodic Check: Can you access Server logs?
%LocalAppData%\NVIDIA\CloudXR\SteamVR\logs
- This is not the same subfolder as you used previously with
SampleServer
.
- This is not the same subfolder as you used previously with
- ☑️ Periodic Check: Can you access Client logs?
%LocalAppData%\NVIDIA\CloudXR\SampleClient\logs
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
☑️ Check: Can you stream your XR application?
Closer and closer. Remember, don’t change anything except the one variable we’re working on, so don’t add another device yet.
This introduces the full and exact order of operations required for a CloudXR connection. The short version is:
- Server: Start SteamVR.
- Client: Start Client, connect.
- Server: Start your application.
Except that, for now, Client is just the server computer running the Windows client in mock-VR windowed mode.
From our previous efforts:
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
- ☑️ Check: Can you stream from SteamVR?
- but DON’T close SteamVR or your Client streaming window.
On the Server:
- Wait for SteamVR / server to “finish connecting”
- The SteamVR “control window” will vanish, and reappear with the CXR headset
> - Hint: Open the SteamVR “VR View” to see what the Server is sending out
- The SteamVR “control window” will vanish, and reappear with the CXR headset
- Launch your XR application
- Given the limitations of the mock-VR / windowed client:
Can you interact with your game/app as expected, and does it render correctly?- No?
- Make sure everything works up to this point.
- Try this with a few free applications.
- The Lab is an excellent option.
- With YMMV and no promises, it looks like you can start up the individual experiences, giving you not one but 10+ tests: You’re on you’re own, it’s Reddit.
- The Lab is an excellent option.
- Gather up the logs and reach out on the forums.
- Yes?
- Awesome! You can stream your target XR application!
- No?
Take a breath. Enjoy this moment.
Because next comes networking, which is often the problem, and to which there are often no simple solutions.
☑️ Check: Can you stream to a different computer on a local, wired network?
You now need two additional things:
- A second computer to be your CloudXR Client
- A Network
There are several Network options at this point, but keep it simple.
Click for network options
- Get a (standard, retail) router
- with several ethernet ports
- and (looking ahead) WiFi.
- Set it up according to its instructions.
- This is the easiest thing.
- Use a “patch cable”
- Directly connect your Client to your Server via ethernet
- Look up how to set up manual IP addresses for a patch cable and do that
⚠️ Do not use a corporate, government, or other highly managed network.
Why not? (clickme)
These networks have highly complex rules blocking all kinds of traffic, and you have no control over them. Streaming CloudXR over such a network is an advanced usage and definitely not part of our “keep things simple” debugging strategy.
⚠️ You need to be familiar with computer networking.
What should you know? (clickme)
- IP (Internet Protocol)
- IP addresses
- Subnets
- Subnet masking
- Gateways
- Protocols
- TCP, UDP, ICMP
- Ports and firewalls
- Opening ports in firewalls
- Your router’s firewall, you’ll have to check your router’s docs, we can’t help you here.
- Windows Defender Firewall
On your Server:
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
- Check your IP address
- Open a Terminal
ipconfig
- Launch the Sample Server
- Open a different Terminal window or tab
cd "C:\Program Files\NVIDIA Corporation\CloudXR\VRDriver\CloudXRRemoteHMD\bin\win64"
.\CloudXRServerSample.exe
On your Client computer:
- Remember to install SteamVR and the CloudXR Client for Windows.
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
- Yes, do this check on your Client computer as well as on your Server
- Check your IP address
- Open a Terminal
ipconfig
PAUSE. Make sure you fully understand everything that is printed by ipconfig
on both computers. On a typical Windows laptop, there will be 2-3 entries:
- One for “loopback”: IP address 127.0.0.1
- One for WiFi
- One for ethernet
If there are more, you have a more complicated networking setup, and need to understand which of these entries is the physical ethernet port you are using. Do not proceed until you are confident that you know which IP addresses belong to the ethernet ports of the Server and Client respectively.
Continuing on the Client:
- Check network visibility via ping
- Terminal window (maybe reuse what you opened for
ipconfig
) ping <your-server's-IP>
- If this fails:
- Check all IP addresses. Make sure Client and Server are on the same subnet.
- Open your Server to ping requests
- Easy-but-insecure: Temporarily disable Windows Defender Firewall
- Correct: Enable the ping rules
- Terminal window (maybe reuse what you opened for
PAUSE. If you cannot get the Client to ping the Server, then you either need to read up on how to make that happen, or you don’t have enough permissions on the Server. You will not be able to debug actual CloudXR issues if you are unable to debug this issue.
⚠️Important note on the two (2) Windows Defender Firewall “applications” in Windows 11
⚠️(clickme)⚠️
There are two entries in the Start menu when you search for Windows Defender Firewall:
- Windows Defender Firewall
- Windows Defender Firewall with Advanced Security
To enable/disable the firewall, you want the shorter one, Windows Defender Firewall:
To view/edit/create/delete port/protocol rules, you want the longer one, Windows Defender Firewall with Advanced Security. Note that the CloudXR Installer should have created the rules you see in this screenshot:
Continuing on the Client:
- Start the windowed / mock-VR client
cd "C:\Program Files\NVIDIA Corporation\CloudXR\Client"
.\CloudXRClientSample.exe -s <cloudxr-server-ip> -w
- Do you get the window showing the pirate ship/statue?
- No.
- Ensure the Server is not blocking the CloudXR ports.
- Easy-but-insecure: Temporarily disable Windows Defender Firewall
- Correct: Make targeted rules. See the documentation for a list of ports.
- Ensure the Server is not blocking the CloudXR ports.
- Still no.
- Probably an issue with the network you set up between the computers.
- Gather up the logs and reach out on the forums.
- Yes.
- Woot! You can stream CloudXR over a network!
- No.
Now step outwards and check SteamVR, then SteamVR + your application.
- On the Server:
- ☑️ Periodic Check: Are any old SteamVR/CloudXR processes hanging around?
- Launch SteamVR
- …waiting until the SteamVR control window appears on the desktop
- On the Client:
- Start the window-mode test client
cd "C:\Program Files\NVIDIA Corporation\CloudXR\Client"
.\CloudXRClientSample.exe -s 127.0.0.1 -s
- Start the window-mode test client
- Does it work?
- No? Recheck loopback streaming:
- ☑️ Check: Can you stream from SteamVR?
- Still no?
- Gather in logs and reach out.
- Yes?
- Great. Now test your app.
- No? Recheck loopback streaming:
- On the Server:
- Launch your XR application
- Does it work?
- No?
- Gather in logs and reach out.
- Yes?
- Wonderful! You can stream your XR app/game over a (basic) network!
- No?
Where to go from here?
From here, there are many directions to go, and I don’t want to hold up releasing this guide for all the stuff I want to write about other debugging. Here is just a few of the things you might want to do next:
- Loopback streaming on your real server
- Stepping through SampleServer, SteamVR, SteamVR + your application
- Helps isolate GPU configuration issues, SteamVR issues
- Local streaming to your device
- Helps isolate device issues from network issues
- Streaming to Windows from your real server over your real network
- Helps isolate device issues from network issues
This post is the first of a series on CloudXR debugging, and is focused on getting your server working. 2024-10-01. ↩︎
Some hints for how to do things that are necessary but not really central to the flow of this guide are hidden in footnotes, which appear like this can be viewed by clicking. ↩︎
🪟+R opens the Run… dialogue. Copy-paste the path. ↩︎
🪟+E opens a new Windows Explorer window.
alt+D
selects the address bar. Copy-paste the path. ↩︎To open Task Manager:
Ctrl+Shift+Esc
, or🪟+R
>taskmgr
, or 🪟Start > typeTask Manager
↩︎To open Task Manager:
Ctrl+Shift+Esc
, or🪟+R
>taskmgr
, or 🪟Start > typeTask Manager
↩︎