在 WSLg 下运行的 Linux 桌面内运行 Windows 图形应用程序

在 WSLg 下运行的 Linux 桌面内运行 Windows 图形应用程序

在主机 Windows 环境中显示 WSL 应用的示例有很多:
https://stackoverflow.com/a/65576810/7991646
https://stackoverflow.com/a/66398613/7991646

相反的情况呢?在 WSLg(或其他)下运行的 Linux 桌面内显示 Windows 图形应用程序(例如记事本、Excel)。

从 WSL 启动 Windows 应用程序非常简单:
https://stackoverflow.com/a/47663269/7991646

然而,除此之外的步骤还不太清楚。这是我相对较新的领域,对 Windows 会话渲染的理解有限。这篇短文是一个有用的介绍 -https://www.2brightsparks.com/resources/articles/understanding-windows-sessions.pdf

注意我宁愿避免使用 Wine 之类的 API 转换器。对于 MS Excel 之类的更复杂的应用程序来说,在主机 Windows 机器上进行安装至关重要。

理想情况下,该解决方案可以编写脚本/自动化,以便静默部署到单个 Windows 机器池中。

答案1

答案有些“消极”,但也许这项研究能帮助你找到正确的方向(如果有的话)。

我根据您之前对此主题的评论进行了一些实验。是的,该实验与您在上面关于 RDP 的评论中提到的思路相同。

我们首先来总结一下这个问题:

  • Windows 中的图形应用程序是使用(我相信)基础层的 GDI 绘制的,当然通常使用更高级别的工具包/框架。
  • Linux/WSL/WSLg 中的图形应用程序使用 Wayland 和 Xwayland 绘制,并通过使用 RDP 转换到 Windows。

因此,WSLg 使用 Wayland 输出到 RDP 的能力作为其显示 Linux 应用程序的魔法票。

而且,理论上,我们可以使用 RDP 在 Linux 中显示 Windows 应用程序。RDP 显然包括仅运行单个应用程序而不是完整桌面的能力。因此,在理论上完美的世界中,我们可以在 WSLg 下运行类似 Remmina(或其他)RDP 客户端的东西来远程访问 Windows 图形应用程序。

在实践中,我们受到几个因素的限制,有些是技术性的,但主要基于许可和功能限制:

  • 有趣的是,Windows 7 RDP 客户端曾经能够指定要在远程计算机上运行的应用程序。在 Windows 10 及更高版本中,似乎已删除此选项(至少从客户端应用程序的 GUI 中删除)。仍然可以通过以下方法之一指定要启动的应用程序这个问题

  • 但是,如果我们尝试使用localhost或 Windows 主机名,我们会被拒绝,因为我们已经有一个活动的控制台。

  • 我们仍然可以通过使用主机地址来解决这个问题127.0.0.2。但随后我们遇到了许可问题。至少在 Windows Pro(我相信还有 Enterprise)上,我们无法使用 RDP 运行应用程序,因为在这些 SKU 下,我们只能使用终端服务进行“一次连接”。据我所知,只有 Windows Server 允许多个连接。

而这一切都只是通过从 Windows 到 Windows 本身的 RDP 实现的。即使我们使用 Remmina(在 WSL2 下它将在 WSL2 VM 内运行),我们仍然受到已达到最大值的连接数的限制。

再说一遍,没有技术的RDP 无法实现此功能的原因 -- 不幸的是只是许可限制。

至于替代方案,我不知道有什么好的选择。您需要该技术能够:

  • 远程单个应用程序
  • 在屏幕外缓冲区中执行此操作,以便应用程序在运行时不会镜像到 Windows 中的本地桌面上。
  • 拥有 Windows“服务器”组件
  • 有一个Linux“客户端”组件

有些理论并不完全符合实际情况:

  • Windows 容器攻击您在评论中提到的听起来当然会起作用,但不再是一种选择(再次是许可问题)。

  • VNC 仅适用于全屏显示,不支持单个应用程序。

  • Nvidia Gamestream(带有 Moonlight 客户端)很接近,但据我所知,它仍然要求应用程序在桌面上镜像。理论上,你可以用连接到 nVidia 卡的虚拟 HDMI 适配器来解决这个问题。但在这一点上,你可能有点太过分了。

  • 如果你不局限于使用当地的Windows 安装,您可能可以使用第三方 RDP 桌面/应用程序服务,但对于 AWS Workspaces 之类的服务,您至少需要支付 25 美元/月。

有了这些,我将不再喋喋不休地谈论惯于工作。当然,希望我错了,有人能给出更好的答案。我对此表示怀疑,但如果真是这样,我会很高兴我错了。

相关内容