As much as I love Linux, there are always one or two apps that I simply have to run under Windows for whatever reason. Sure, you can use wine, Crossover Office, or run Windows in a virtual machine, but it’s clunky, and I’m always fiddling with it to get it working right. But I recently came across something that — when used improperly — makes life pretty easy. Instead of virtualizing Windows or emulating it, I threw hardware at it, and it works surprisingly well.
Once Upon a Time
First, a story. Someone gave me a Surface Laptop 2 that was apparently dead. It wouldn’t charge, and you can’t remove the keyboard without power. Actually, you can with a paper clip, and I suggested pulling it to see if the screen would charge by itself. They said they had already bought a new computer, so they didn’t care.
Unsurprisingly, once I popped the keyboard off, the computer charged and was fine. You just have to replace the keyboard or use another one. Or use it as a tablet, which it is set up for anyway. But I have plenty of laptops and computers of every description. What was I going to do with this nice but keyboardless computer?
Coincidence
About this same time, I’d been moving my VirtualBox Windows installs over to KVM. That’s a pain if you’ve ever done it, but it performs well and works well. Then I found WinApps. This is a simple script setup that runs Windows in your choice of virtual machine and can pull a single application into an RDP client on your desktop. The effect is that you can have, for example, Microsoft Word just sitting on your desktop like any other program. It also wires up the application so you can, say, open a PowerPoint directly using a real copy of PowerPoint running in the virtual machine.
It works great, except for one thing. When Windows is running, your disk thrashes like crazy. That’s probably not very surprising since the Windows VM image is in a file, so everything goes through the Windows file system and then the Linux file system. Between my SSD cache and my RAID array, there’s a lot going on there. The performance wasn’t bad, but the disk going wild was annoying, and it would freeze up here and there while the drive was overwhelmed.
Virtually Reality, for Real
But what about WinApps? It points to a virtual machine in KVM or Docker. Why not let it point to a real piece of hardware on the network? I could put the Surface out of the way and then run my choice of Windows software right on my desktop with hardware speeds only limited by the network.
Rather than keep you in suspense, it worked. The program allows you to set your virtualization type and one of them is “manual.” Presumably, you’d usually start a VM yourself, but in this case, just the IP address of the remote Windows box is all you need.
Is it that Easy?
Well, almost. There were two small issues. For one thing, you need to run an install script on the Windows box. You can do that before you set up, while you enable Remote Desktop. Here’s what the directions say:
Next, you will need to make some registry changes to enable RDP Applications to run on the system. Start by downloading the RDPApps.reg file, right-clicking on the Raw button, and clicking on Save target as. Repeat the same thing for the install.bat and the NetProfileCleanup.ps1. Do not download the Container.reg.
The other issue is that I have two monitors that are separated, with one at the bottom left and one at the top right of a large rectangle, and lots of blank wall between them. The xfreerdp program hates that. I had to fiddle with the settings quite a bit, and you may have different results.
One thing I did to be safe was to go get the latest version of xfreerdp and install it. You can point to it in the WinApps configuration file. Sometimes, the programs in your distro’s repositories can be pretty old. I wanted to make sure I had the latest RDP client.
For normal operations, these options worked:
RDP_FLAGS="/cert:tofu /sound /microphone +home-drive /span /multimon:force /mouse-relative /dynamic-resolution"
I also had to edit ~/.local/bin/winapps to change the options for the “windows” run (which starts a full-screen windows session) to:
# Open Windows RDP session. dprint"WINDOWS" $FREERDP_COMMAND \ /d:"$RDP_DOMAIN"\ /u:"$RDP_USER"\ /p:"$RDP_PASS"\ /scale:"$RDP_SCALE"\ +auto-reconnect\ /monitors:0\ /wm-class:"Microsoft Windows"\ /t:"Windows RDP Session [$RDP_IP]"\ /v:"$RDP_IP"&>/dev/null &
Bugs!
Proof in the Pudding

Does it work? Well, there’s Microsoft Word running on my KDE desktop. You might have to rearrange or resize a Window when you first launch it. If that bothers you, write a rule to fix the window position. Most of the time, it works well enough. You can also go full screen and back (Control+Alt+Enter). Anything you can normally do in a RDP session, you can do here.
Is it perfect? Nope. You can, in theory, redirect USB devices, but it will be kludgy and probably slow. I still use KVM for things that have to talk to a USB device. Of course, you can also hang the USB device off the Windows machine. The default setup maps your home directory to Windows, but you can fix it to map other places, too (and make sure the config file knows where your removable media mounts, too). The system autodetects many apps, but there is a manual mode that can, in theory, run anything. Or, you can pull up Windows Explorer and run any application you want.
This would be a perfect thing to use an old computer sitting around or a junk store small form factor PC that you can pick up for nearly nothing. You won’t be gaming on it or anything, but it is perfectly usable for that strange Word document or EPROM programmer software.
Honestly, it’s gotten to the point where having WSL on Windows means I barely notice which OS I’m on 99% of the time. Most of the apps I use will run on either system, but I still prefer the control I have on Linux and find it easier to fix issues there. At least dual booting is mostly a thing of the past.
this is really cool :)
my current issue : GPU sharing.
my dream : getting autodesk inventor on linux but working inside a VM is just painful and I dont have two GPU to dedicate one to a VM.
if someone has an idea i’m all ears.
(I recently retried freeCAD and i’m impressed it’s nothing like the one I tested 2 years ago, maybe I should just learn FreeCAD instead :)
The ability to mix the windows on one desktop is kinda spiffy, but I would probably either run some flavor of VNC (if the Windows box is headless), or just add its monitor to my desk and use something like Synergy to control it.