Azure Linux 桌面
我做了一件事情... 0:00 / 0:49 我想尝试一下微软 2026 年 Build 大会上的一些很酷的东西。Azure Linux "桌面" 是一个小型 Windows 应用程序,可以在窗口中启动完整的 Linux 桌面。它会打开,启动嵌入式 Linux 容器,几秒钟之后,你就能看到一个主题化的 XFCE 桌面,运行在 Azure Linux 4.0 上,并支持音频、GPU 加速、复制和粘贴,以及随着窗口调整大小的显示。没有按钮,没有设置向导,没有终端。你启动应用程序就可以直接进入 Linux 桌面。部分灵感来源于 Craig Loewen 的 Herbert 演示。我不得不把它推得更远,因为我有一个问题。我会首先声明,这只是一个玩具。构建步骤需要从主分支编译不稳定的 WSL,以便及早获得容器运行时,它将 Fedora 桌面包放到一个从未打算使用它们的服务器发行版上,并且依赖早期的 WinUI 实验源构建。GitHub - sirredbeard/azurelinux-desktop: Azure Linux. 在容器中。基于 WSL。作为 .NET 应用程序。带有一些异想天开的桌面特性。Azure Linux。在容器中。基于 WSL。作为 .NET 应用程序。带有一些异想天开的桌面特性。- sirredbeard/azurelinux-desktop 四个组成部分 Build 2026 的四个东西在此发挥作用。每个组件本身都很有趣。它们结合在一起形成演示。wslc 容器 API wslc 是 Windows 新的 Linux 容器运行时。我单独写过关于它的内容,但简要来说,它可以在 Windows 原生运行 OCI 容器,提供 CLI 和 API。这个应用程序直接使用 API:它创建会话,加载映像,创建具有端口映射的容器并启动它。wslc 还未在 WSL 中落地。它将在几周内通过 wsl.exe --update --pre-release 发布,之后在 WSL 中稳定。尽管代码已在 WSL 中,其中是开源的,所以如果你想,可以从主分支编译并提前使用。使用体验可能会有变化。 WinUI Reactor,无需 XAML 这个应用程序是 Microsoft UI Reactor 应用程序。Reactor 是一种新的代码优先构建 WinUI 3 界面的方法:你以可组合的函数和状态钩子在 C# 中编写 UI,就像在 React 中一样,而不是编写 XAML 和后台代码。这个项目中没有一个 .xaml 文件。谢天谢地。整个界面是由 Reactor 工厂在 App.cs 中构建的:一个标题栏、一个启动页面,以及一个根据状态切换的桌面表面。启动屏幕和嵌入式桌面都是 Reactor 元素。Azure Linux 4.0 Azure Linux 4.0 是基础映像。它是微软的 Linux 发行版,版本 4.0 是从 Fedora Linux 43 的快照构建的。这个细节对这个项目很重要,因为 Azure Linux 不提供桌面或 GUI 软件包。它是一个通用的服务器和容器发行版。由于它是在 Fedora 43 快照的基础上构建的,你可以指向 Fedora 43 的软件库,从中获取 XFCE,并且……它基本上能够工作。这是一个糟糕的黑客行为,我不会在任何实际场景中这样做,但它很好地说明了共享软件包谱系的优势。再次感谢开源。 .NET 10 该应用程序面向 .NET 10 和 WinUI 3,通过 Windows 应用程序 SDK 打包。dotnet run 使用包标识启动它,ReadyToRun 预编译以加快冷启动,全局发布命令生成 x64 或 ARM64 构建。整个东西是一个 .slnx,你可以使用 dotnet build 构建。 工作原理 流程很简单。应用程序打开到一个带有 Azure Linux 徽标和旋转图标的启动屏幕。在该页面之后,它确保桌面映像存在,在第一次运行时构建该映像,然后请求 wslc 启动容器。容器在 XRDP 服务器后运行 XFCE。应用程序通过环回连接到该服务器,将 Windows RDP 客户端停放在窗口上,并在会话显示时卸载启动页面。窗口成为桌面。RDP 客户端会自动登录并填充标题栏下方的一切。从外部看,这个应用程序看起来只是一个 Linux 桌面。没有可见的容器,没有可见的 RDP 提示,没有可见的管道。0:00 / 0:22 一些有趣的黑客行为 有趣的部分是这些组件没有完全结合在一起的地方。一些我最喜欢的部分。 启动旋转图标是真正的合成,而不是 GIF 加载页面上的 Windows 风格启动圆圈是六个点围绕中心旋转,它们像真实操作系统启动旋转图标一样聚集和分散。它作为原始合成视觉构建:每个点都是一个精灵形状,其偏移量运行一个循环的 Vector3 关键帧动画,该动画采样自缓和扫掠,每个点的时间滞后,形成拖尾。它从挂载开始,无限循环在合成器上,每帧没有运行托管代码。 在 WinUI 下托管 RDP 控件 桌面表面是 Windows RDP 客户端 ActiveX 控件 mstscax.dll。真的。让它在 WinUI 窗口内绘制花费了……努力。它的 DirectX 呈现者在控件重新父级到 WinUI DesktopChildSiteBridge 时从不绘制,如果你在创建控件时隐藏或重新样式为分层,它会直接崩溃。因此,它并不在 WinUI 内部生活。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡