
虽然我很喜欢 Linux,但总有一两个应用程序因为各种原因不得不在 Windows 下运行。当然,你可以使用 Wine、Crossover Office,或者在虚拟机中运行 Windows,但这些都比较笨重,我总是得费劲地摆弄才能让它正常工作。不过,我最近发现了一个方法——如果使用不当——可以让一切变得轻松很多。我没有虚拟化或模拟 Windows,而是直接用硬件驱动,结果出奇地好用。
曾几何时
首先讲个故事。有人送了我一台 Surface Laptop 2,好像已经坏了。它充电不了,而且没电了键盘也拔不出来。其实用回形针就可以,我建议拔一下回形针,看看屏幕能不能自己充电。他们说他们已经买了新电脑,所以不在乎。
不出所料,拆掉键盘后,电脑充电后就没问题了。你只需要换个键盘或者换个新的就行了。或者把它当平板电脑用,反正它就是这么设计的。但我有各种各样的笔记本电脑和台式电脑。我该拿这台漂亮却没有键盘的电脑怎么办呢?
巧合
大约在同一时间,我将我的 VirtualBox Windows 安装迁移到了 KVM。如果你曾经这样做过,那会很麻烦,但它性能良好,运行良好。然后我发现了WinApps 。这是一个简单的脚本安装程序,可以在你选择的虚拟机中运行 Windows,并将单个应用程序拖放到桌面上的 RDP 客户端中。这样,你就可以像其他程序一样,在桌面上放置 Microsoft Word 等程序。它还可以连接应用程序,这样你就可以使用在虚拟机中运行的真实 PowerPoint 副本直接打开 PowerPoint 了。
它运行良好,除了一件事。当 Windows 运行时,你的磁盘会疯狂地抖动。这或许并不奇怪,因为 Windows 虚拟机映像位于一个文件中,所以所有内容都会经过 Windows 文件系统,然后再经过 Linux 文件系统。在我的 SSD 缓存和 RAID 阵列之间,有很多事情要做。性能还不错,但磁盘的失控很烦人,而且当驱动器不堪重负时,系统会不时地卡住。
虚拟现实,真实存在
但是 WinApps 怎么办呢?它指向的是 KVM 或 Docker 中的虚拟机。为什么不让它指向网络上的真实硬件呢?我可以把 Surface 放在一边,然后直接在桌面上运行我选择的 Windows 软件,硬件速度只受网络限制。
它并没有让你感到悬念,而是成功了。程序允许你设置虚拟化类型,其中一种是“手动”。想必你通常会自己启动虚拟机,但在这种情况下,你只需要远程 Windows 设备的 IP 地址即可。
就这么简单吗?
嗯,差不多了。有两个小问题。首先,你需要在 Windows 系统上运行一个安装脚本。你可以在设置之前,启用远程桌面时运行这个脚本。安装说明如下:
接下来,您需要进行一些注册表更改,以使 RDP 应用程序能够在系统上运行。首先下载RDPApps.reg文件,右键单击“Raw”按钮,然后单击“另存为”。对install.bat和NetProfileCleanup.ps1重复相同的操作。不要下载 Container.reg。
另一个问题是,我有两个显示器,一个在一个大矩形的左下角,一个在右上角,中间有很多空白区域。xfreerdp 程序很讨厌这种情况。我不得不反复调整设置,你可能会得到不同的结果。
为了安全起见,我做的一件事是获取最新版本的xfreerdp并安装它。你可以在 WinApps 配置文件中指向它。有时,发行版存储库中的程序可能相当老旧。我想确保我拥有最新的 RDP 客户端。
对于正常操作,这些选项有效:
RDP_FLAGS="/cert:tofu /sound /microphone +home-drive /span /multimon:force /mouse-relative /dynamic-resolution"
我还必须编辑 ~/.local/bin/winapps 以将“windows”运行(启动全屏 Windows 会话)的选项更改为:
# 打开 Windows RDP 会话。 打印“WINDOWS” $FREERDP_COMMAND \ /d:“$RDP_DOMAIN”\ /u:“$RDP_USER”\ /p:“$RDP_PASS”\ /规模:“$RDP_SCALE”\ +自动重新连接\ /监视器:0\ /wm-class:“Microsoft Windows”\ /t:“Windows RDP 会话 [$RDP_IP]”\ /v:“$RDP_IP”&>/dev/null&
有虫子!
布丁的证明
它能正常工作吗?嗯,我的 KDE 桌面上正在运行 Microsoft Word。首次启动时,您可能需要重新排列或调整窗口大小。如果这让您感到困扰,请编写一条规则来修复窗口位置。大多数情况下,它都能正常工作。您还可以全屏切换(Control+Alt+Enter)。所有您在 RDP 会话中可以执行的操作,在这里都可以执行。
它完美吗?不完美。理论上,你可以重定向 USB 设备,但这样会很笨拙,而且速度可能很慢。我仍然使用 KVM 来处理需要与 USB 设备通信的事情。当然,你也可以将 USB 设备挂载到 Windows 机器之外。默认设置会将你的主目录映射到 Windows,但你也可以修改它来映射到其他位置(并确保配置文件也知道你的可移动媒体的挂载位置)。系统会自动检测许多应用程序,但理论上有一个手动模式可以运行任何应用程序。或者,你可以打开 Windows 资源管理器并运行任何你想要的应用程序。
用它来改造闲置的旧电脑,或者从废品店淘来的几乎不花钱的小型电脑,再好不过了。虽然你不会用它玩游戏什么的,但它可以用来处理那些奇怪的Word文档或EPROM编程软件。
说实话,现在的情况是,在 Windows 上使用WSL意味着我 99% 的时间几乎都感觉不到自己在用哪个操作系统。我使用的大多数应用程序都可以在两个系统上运行,但我还是更喜欢在 Linux 上拥有的控制力,而且发现在 Linux 上解决问题更容易。至少双启动基本上已经成为过去了。
原文: https://hackaday.com/2025/08/21/linux-fu-windows-virtualization-the-hardware-way/