← 返回信息流
AI 资讯Hacker News·3 小时前

微软推出基于 Linux 的 Azure 桌面服务

原标题:Azure Linux Desktop

速览

微软正式推出基于 Linux 的 Azure 桌面服务,这是其云桌面产品线的重要扩展。该服务允许用户在 Azure Virtual Desktop 中运行 Linux 桌面,为开发者和特定工作负载提供更灵活的环境。此举标志着微软在云桌面领域进一步丰富其操作系统支持范围。

AI 深度解读

Azure Linux "Desktop":Build 2026 技术拼贴实验的深度解读

背景

在 Microsoft Build 2026 大会上,微软展示了一系列令人瞩目的新技术。一位开发者受 Craig Loewen 的 Herbert 演示启发,决定将这些新技术整合,构建了一个名为 Azure Linux "Desktop" 的实验性 Windows 应用程序。

该项目的初衷并非为了生产环境,而是一个“玩具”(toy),旨在探索 wslc 容器 API、WinUI ReactorAzure Linux 4.0 以及 .NET 10 这些来自 Build 2026 的新特性组合在一起会产生什么效果。开发者明确表示,构建步骤需要编译不稳定的 WSL 主分支以提前获取容器运行时,并将 Fedora 桌面包强行安装在从未设计用于桌面环境的服务器发行版上,同时依赖 WinUI 实验性的早期源码构建。尽管存在诸多“ hack ”成分,但它生动地展示了开源生态中共享包系带来的可能性。

核心内容

Azure Linux "Desktop" 是一个小型 Windows 应用,它能在一个窗口内启动完整的 Linux 桌面环境。用户只需启动应用,无需任何按钮、设置向导或终端操作,几秒钟后即可看到一个基于 Azure Linux 4.0 运行、带有主题风格的 XFCE 桌面。该环境具备音频支持、GPU 加速、剪贴板共享以及随窗口自适应调整大小的显示功能。

这一成果由 Build 2026 发布的四项关键技术共同驱动:

1. wslc 容器 API

wslc 是 Windows 上新的 Linux 容器运行时。它允许在 Windows 原生运行 OCI 容器,并提供 CLI 和 API 接口。该应用直接使用其 API:创建会话、加载镜像、创建带有端口映射的容器并启动它。

  • 现状:wslc 尚未正式进入稳定的 WSL 版本,预计几周后通过 wsl.exe --update --pre-release 更新。
  • 获取方式:由于 WSL 是开源的,开发者可以从 main 分支编译源码来提前使用。

2. WinUI Reactor 与无 XAML

该应用采用 Microsoft UI Reactor 构建。Reactor 是一种“代码优先”(code-first)的 WinUI 3 界面构建方式,开发者使用 C# 编写可组合的函数和状态钩子(类似 React 的开发模式),而非传统的 XAML 和代码后置文件。

  • 特点:项目中不存在任何 .xaml 文件。整个界面(包括标题栏、启动页和桌面表面)均在 App.cs 中通过 Reactor 工厂函数构建,并通过状态切换显示。

3. Azure Linux 4.0

Azure Linux 4.0 是基础镜像,它是微软的 Linux 发行版,版本 4.0 基于 Fedora Linux 43 的快照构建。

  • 技术难点与突破:Azure Linux 本身是通用服务器和容器发行版,不包含桌面或 GUI 包。但由于其底层是 Fedora 43 快照,开发者可以直接指向 Fedora 43 的软件源并从中拉取 XFCE 桌面环境。这种“共享包系”(shared package lineage)使得跨发行版安装桌面环境成为可能,尽管这在生产环境中被视为一种糟糕的 hack。

4. .NET 10

应用针对 .NET 10WinUI 3 构建,并通过 Windows App SDK 打包。

  • 性能优化:使用 dotnet run 启动时具备包身份,利用 ReadyToRun 预编译实现更快的冷启动速度。
  • 构建简化:通过单个 .slnx 文件和 dotnet build 命令即可生成 x64 或 ARM64 架构的构建版本。

工作原理流程

  1. 启动:应用打开显示带有 Azure Linux 徽标和旋转加载动画的启动页。
  2. 容器初始化:后台确保桌面镜像存在(首次运行时会构建),然后调用 wslc 启动容器。
  3. 桌面渲染:容器在后台运行 XFCE,并通过 XRDP 服务器提供服务。
  4. 窗口集成:应用通过回环接口连接到 XRDP 服务器,将 Windows RDP 客户端控件“停放”在窗口上。
  5. 无缝切换:当会话显示在屏幕上时,启动页卸载,窗口变为完整的桌面。RDP 客户端自动登录并填充标题栏下方的所有内容,从外部看,应用就像是一个原生的 Linux 桌面。

关键技术细节与 Hack

  • 真实的启动动画:启动页上的 Windows 风格旋转圆圈并非 GIF,而是由六个点组成的原始组合视觉元素(composition visuals)。每个点是一个精灵形状,其偏移量运行基于缓动扫掠采样的 Vector3 关键帧动画,且各点有时间延迟。它在合成器上无限循环,每帧不运行托管代码。
  • RDP 控件宿主:桌面表面实际上是 Windows RDP 客户端 ActiveX 控件(mstscax.dll)。由于该控件在 WinUI 的 DesktopChildSiteBridge 下重绘时 DirectX 呈现器不工作,且隐藏创建或分层重绘会导致崩溃,开发者采用了一种变通方案:
    • RDP 控件并不位于 WinUI 树中,而是位于一个由主窗口拥有的无边框 WinForms 窗口中。
    • 该窗口最初停在屏幕外,准备就绪后,通过一个跟踪定时器将其“粘合”到占位符矩形上,跟随主窗口的移动和缩放。
    • Reactor 绘制窗口和启动 UI,拥有的表单承载 RDP 表面。
  • 时间同步:容器时钟已通过 Hyper-V 时间同步跟踪主机。启动器将主机的 Windows 时区 ID 转换为 IANA 名称,并在容器启动时将 /etc/localtime 重新指向该名称,使桌面时钟与主机匹配。

构建中的陷阱

  • SVG 图标渲染问题:Fedora 43 弃用了 librsvg gdk-pixbuf 加载器,SVG 解码现在通过 glycin 进行,后者使用 bubblewrap 沙箱。由于容器内无法创建用户命名空间,bubblewrap 导致所有 SVG 图标渲染为缺失占位符。解决方案是在镜像构建时将主题 SVG 光栅化为 PNG,并保留 bubblewrap 以便静默处理遗留调用。
  • RDP 音频:容器会话是独立的虚拟机,无法借用 WSLg 音频。可行的路径是编译 pipewire-module-xrdp 模块(针对镜像中的 PipeWire 编译),并在 pipewire-pulse 启动后按顺序启动它。

此外,为了怀旧,XFCE 桌面使用了 2002 年 Red Hat 发布的 Bluecurve 主题复刻版。镜像还安装了 Visual Studio Code 和 PowerShell,以提供编辑器和 Shell 功能。

关键要点

  • 技术整合实验:该项目是 Microsoft Build 2026 四项新技术(wslc、WinUI Reactor、Azure Linux 4.0、.NET 10)的集成演示,旨在探索技术边界而非提供生产级解决方案。
  • wslc 容器运行时:wslc 允许在 Windows 上原生运行 OCI 容器,目前处于预发布阶段,需从 WSL 开源源码的主分支编译获取。
  • 代码优先 UI 开发:WinUI Reactor 允许使用 C# 函数和状态钩子构建界面,彻底消除了对 XAML 文件的依赖。
  • 发行版兼容性突破:利用 Azure Linux 4.0 基于 Fedora 43 快照的特性,通过直接引用 Fedora 源成功在非桌面版服务器上安装了 XFCE 桌面环境,展示了开源包系共享的优势。
  • 复杂的窗口集成方案:由于 WinUI 对 ActiveX 控件支持的限制,开发者采用 WinForms 窗口承载 RDP 控件,并通过定时器同步位置,实现了看似原生的窗口内嵌效果。
查看原文 →boxofcables.dev