The Megadesk Monster Machine - Threadripper Pro
Asus SAGE wrx80 and Threadripper Pro 3975wx
Yes, that is Microsoft Office running seamlessly (flawlessly) on Fedora 34, at near-native speed, with some measure of video acceleration.
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.
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_:  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_:  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.