The Video
The Megadesk Monster Machine - Threadripper Pro
Asus SAGE wrx80 and Threadripper Pro 3975wx
Background
Yes, that is Microsoft Office running seamlessly (flawlessly) on Fedora 34, at near-native speed, with some measure of video acceleration.
This had been broken on both Virtual Box and VMware workstation for years . It does not actually work.
This is not a perfect solution either. It uses Remote Desktop, well specifically RemoteApp, that allows running individual apps via the RDP protocol, but without the start menu and the rest of the âwindows desktop experience.â
It is not as fast as Looking Glass, but it can work seamlessly. I donât recommend it for playing games, but it works reasonably well even for things like Photoshop and Premiere. (Parsec may be a better choice for these kinds of tasks, if Looking Glass is not an option.)
Running apps in this way has some advantages. For one, it is possible to get an experience more akin to QubesOS, but without the baggage and commitment to Qubes. (Qubes only supports seamless mode with Windows 7, but this technique probably works fine there too, with a new enough version of xFreeRDP).
If you arenât familiar with Qubes, imagine setting up a VM for each kind of thing you might want to do â online banking, playing games, doing work stuff, etc. Any security issue that happens in one doesnât affect the others. Certainly, when I play Escape from Tarkov, there is really no way to be sure it isnât stealing my login cookies in the background. Unless the only thing I do is play games in that virtual machine, however.
I think this kind of thing will eventually be requisite basic computer hygene. That day isnât today, but it canât get here fast enough. Especially given the kinds of threats normal computer users face. We technical users would be doing our fellow man a great service by making it as seamless, and painless as possible, to offer them transparent and varying levels of app isolation which would prevent one app from stealing another appsâ data.
Getting Started
Running a Windows VM on Linux is pretty easy these days. On Fedora 34, Iâve written several guides already on the topic, centered around GPU Passthrough: Passing a second GPU through to a virtual machine.
A further wrinkle is that LXC, the containerization platform for Linux, now also supports VMs. It is possible, in a relatively few commands, setup a new virtual machine.
Hereâs the mind bender: Nvidia GPUs can actually be shared among several LXC containers! Even Geforce cards! Before I get your hopes up, windows canât (as far as I know) run inside an LXC/LXD container â only a VM. So, to the extent âLXC Supports Windowsâ this is really just a full-fat virtual machine (and not shared GPU resources).
(The irony being, of course, that you can do shared Linux VMs just fine and âThe QubesOS Experienceâ maybe works a little better without Windows AND getting hardware acceleration in graphicsâŚ)
This guide asumes you Windows 10 Pro VM is setup. (You need Remote Desktop, so Win10 Home wonât work).
After Windows 10 Pro is Ready
Enable Remote Desktop:
Next, youâll need to install RemoteApp Tool from Kim Knight:
and add Windows EXplorer to the list of remote apps.
Note: strictly speaking all weâre doing is registry manipulation. This isnât some complicated arcane thing. This app just makes it more convenient. Check out WinApps also for a similar approach.
Why turn Explorer.exe into a RemoteApp ???
Windows 10 RDP only allows two RemoteApp connections at once. So you could only launch Paint and Notepad. If, however, you launch Explorer and then Explorer spawns Notepad, Paint, etc. Then thatâs perfectly ok! That only counts as one!
On the Linux Side
Ideally you have the latest version of xfreerdp. Itâs probably the best? Iâm still testing because itâs really buggy. I appreciate the hard work that has gone into xfreeRDP but it sure seems like they need a lot of cash so that the developers can be paid to bughunt and get some things fit.
The list of pull requests is long, extensive even. If any of the contributors or the main author(s) want any help from me, please reach out. I will be glad to do whatever you think would help you move the project along.
Microsoft has a ânativeâ version of their RDP client for macOS, Android, iOS, chromeOS, BeOS⌠but not Linux?
Fortunately xfreeRDP supports RemoteApp protocols.
Here is the command I use to connect:
xfreerdp /cert:ignore /u:test /p:beeltejuicebettlejuicebeetlejuice/app:'%windir%\explorer.exe' /v:192.168.122.254 /monitors:0,1,2 /relax-order-check
From here I can launch Office, Edge (for windows), or any other Windows app.
thatâs prettymuch it!
If anything goes wrong, you can still connect on the console (not via remote app mode) with Looking Glass, RDP or even directly at the console (even in a VFIO setup) and sort the issue out.
xfree rdp is buggy you say?
In this remoteApp mode, it sure is. Dragging windows often causes the tracking position of the cursor to be completely lost. Check out this hilarious gif of click-to-draw in paint.net showing âwhere my cursor isâ
[18:29:58:075] [299221:299222] [WARN][com.freerdp.client.x11] - xf_lock_x11_: [1] recursive lock from xf_UpdateWindowArea
[18:29:58:111] [299221:299222] [INFO][com.freerdp.client.x11] - Property 262 does not exist
[18:29:58:113] [299221:299222] [WARN][com.freerdp.client.x11] - xf_lock_x11_: [1] recursive lock from xf_UpdateWindowArea
[18:29:58:114] [299221:299222] [WARN][com.freerdp.client.x11] -
Normal, right? There are a lot more unsettling errors after a
few hours of use and the windows get all wonky. Fortunately it
is possible to close and reconnect and everything will go back to normal.
The Experience - with GPU in the VM
So you can do this JUST FINE without doing the vfio thing. Works via RDP and is totally okay. HOWEVER if you DO pass through the GPU, then you still get video acceleration through RDP. It sounds like madness, but it really isnât. Itâs almost good enough to play games at 1080p30 but for that use case Looking Glass is much better.
It is also possible for Looking Glass to support single-application modes, but we would want Nvidiaâs blessing on opening up their API as they have with Steam. We can do this single-app looking glass thing with Quadro cards fairly easily, but not for geforce cards because that API is disabled. Unless youâre steam. Then it is enabled.
Fortunately, for most pedestrian workloads, the GPU acceleration inside a VM with a VFIO GPU connected via RemoteApp seamless RDP works Just FIne.