☰
WSL2 运行 Ubuntu 26.04 完整 GNOME 桌面(WSLg Wayland)
2026/10/18 22:01:47 网站建设 项目流程

WSL2 运行 Ubuntu 26.04 完整 GNOME 桌面(WSLg Wayland 实践)

本文整理自 GitHub Gist - Using full desktop shell in WSL2 using WSLg (Wayland) 中 Ubuntu 26.04 部分,结合加部分问题整理

背景与痛点

Ubuntu 26.04 LTS 搭载的 GNOME 50 已经是纯 Wayland 会话,不再支持 X11/Xorg 嵌套模式。这意味着网上针对 Ubuntu 24.04 的--nested方案在 26.04 上直接失效:

  • GNOME 49 之后移除了--nested参数,旧的 override.conf 会报 “Failed to find any matching session”
    • mutter 提供了新的--devkit模式作为替代,但需要正确的 systemd service 配置
      本文将介绍如何在 WSL2 + WSLg 环境下,通过gnome-shell --devkit --no-x11成功启动完整的 GNOME 桌面,并附带 RDP 远程桌面接入方案。

验证环境

组件版本
WSLg1.0.73.2
Ubuntu26.04.1 LTS
GNOME Shell50.1 (Mutter 50.1)

第一步:安装所需软件包

1.1 更新系统

打开 Ubuntu 26.04 终端,先确保系统为最新状态:

sudoaptupdatesudoaptupgrade

1.2 安装 GNOME 桌面环境

安装轻量版桌面(加--no-install-recommends可获得精简版desktop):

sudoaptinstallubuntu-desktop

安装 Snap Store(应用商店):

sudosnapinstallsnap-store

1.3 安装 mutter devkit(关键)

这是 26.04 下的关键包——提供--devkit模式,替代旧版的--nested。
为什么必须安装它?

因为 GNOME 49+ 已经彻底移除了--nested参数,而mutter-dev-bin正是提供--devkit模式的核心包。如果不安装,后续第二步配置的gnome-shell --devkit --no-x11命令将无法识别--devkit参数,导致桌面启动失败。所以这一步是整个方案能否跑通的前提。

sudoaptinstallmutter-dev-bin

第二步:配置 systemd 用户服务覆盖

2.1 创建 override 目录

sudomkdir-p/etc/systemd/user/org.gnome.Shell@.service.d/

2.2 编写 override.conf

sudonano/etc/systemd/user/org.gnome.Shell@.service.d/override.conf

粘贴以下内容:

[Service] ExecStart= ExecStart=/usr/bin/gnome-shell --devkit --no-x11 --mode=%i

说明:这里用--devkit --no-x11替代了旧方案中的--nested,因为 GNOME 49+ 已经移除了--nested参数。
--no-x11,禁用 Xwayland

–devkit场景区别:

  1. 物理机原生桌面(正常登录进 GNOME):不需要 --devkit,原生会话直接访问显卡 DRM/KMS,直接渲染到显示器
  2. 嵌套会话(在你当前桌面里,弹出一个窗口,窗口里面跑一套完整 GNOME Shell):必须 --devkit,这就是你这个 override 配置干的事
  3. --devkit做了什么
    --devkit会启动独立mutter-devkit进程(需要安装mutter-dev-bin),它用 PipeWire 做渲染,在现有 Wayland 桌面打开一个普通窗口,窗口内部作为虚拟显示器运行一套完整 Mutter+GNOME Shell。这就是 GNOME49 替代旧 --nested 的唯一方案

2.3 重启 WSL

保存退出后,完全关闭 Ubuntu 终端窗口,然后在 Windows PowerShell 中执行:

wsl.exe--shutdown

第三步:启动 GNOME 桌面

重新打开 Ubuntu 终端,执行:

XDG_CURRENT_DESKTOP=ubuntu:GNOME\XDG_SESSION_TYPE=wayland\gnome-session

首次启动可能需要等待几十秒到一分钟,WSLg 窗口会弹出完整的 GNOME 桌面。

gnome-control-center(ubuntu 设置)

gnome-control-center13:45:30.6650 Adwaita[9265]: WARNING: The resource style-dark.css is deprecated and shouldn't be used anymore. Use style.css with media queries instead. 13:45:30.6651 Adwaita[ 9265]: WARNING: The resource style-hc.css is deprecated and shouldn't be used anymore. Use style.css with media queries instead.13:45:55.7088 cc-wwan-panel[9265]: WARNING: Error connecting to ModemManager: Error calling StartServiceByNamefororg.freedesktop.ModemManager1: Failed to activateservice'org.freedesktop.ModemManager1':timed out(service_start_timeout=25000ms)libEGL warning: failed to get driver nameforfd-1libEGL warning: MESA-LOADER: failed to retrieve device information libEGL warning: failed to get driver nameforfd-1MESA: error: ZINK: failed to choose pdev libEGL warning: egl: failed to create dri2screen

打开会出现错误及timeout, 需要关闭 SIM / 蜂窝模块(因为没有这两个模块)

sudosystemctl disable--nowModemManager.servicesudosystemctl mask ModemManager.service#不应开启等待sudosystemctl unmask ModemManager.service

3.1 配置 GSK 渲染器(关键,否则 GNOME 应用打不开)

启动桌面后,你会发现GNOME 自带的 GTK4 应用(如文件管理器、设置、文本编辑器)可能直接打不开或闪退。这是因为 GTK4 不直接用 Cairo 画界面,中间隔着一层GSK(GTK Scene Kit)。默认情况下 GSK 会按以下顺序挑选渲染器:

  1. Vulkan(在 WSL 上经常是 Mesa 的 d3d12 / Dozen)
  2. OpenGL / GLES(同样经常落到GALLIUM_DRIVER=d3d12)
  3. Cairo(纯 CPU 绘制,不碰 GPU)

WSLg 上会直接段错误(SIGSEGV)。常见原因是:WSL 的 D3D12 驱动不是完整的桌面 OpenGL/Vulkan,缺少 GSK 用到的特性(帧缓冲、DMA-BUF、共享内存纹理)。--devkit嵌套出来的 Wayland 和 WSLg 的wayland-0对 EGL/dmabuf 的支持不一样,GTK4 仍按“有 GPU”去初始化,初始化到一半访问空指针就崩溃。Firefox 自带渲染进程,不走 GSK,所以不受影响。

解决办法是强制 GSK 使用纯 CPU 的 Cairo 渲染器,在~/.bashrc中追加环境变量:

echo'export GSK_RENDERER=cairo'>>~/.bashrc

然后重新加载配置:

source~/.bashrc

之后重新启动 GNOME 桌面,GTK4 应用即可正常打开。

GSK_RENDERER=cairo
GSK_RENDERER=gl

修改gl 需要权限

ls-lhrenderD128 crw-rw----1root render226,128Oct1621:11 renderD128sudousermod-aGrender"$USER"

(不推荐修改)第四步:启用图形加速(出了问题修改)

添加GALLIUM_DRIVER=d3d12环境变量可以启用 D3D12 后端渲染,改善桌面动画效果。但需要注意:启用后 Snap Store(App Center)可能无法启动。

解决方案:为 Snap Store 单独去掉该变量

mkdir-p~/.local/share/applicationscp/var/lib/snapd/desktop/applications/snap-store_snap-store.desktop\~/.local/share/applications/snap-store_snap-store.desktopsed-i's|^Exec=/snap/bin/snap-store %U|Exec=env -u GALLIUM_DRIVER /snap/bin/snap-store %U|'\~/.local/share/applications/snap-store_snap-store.desktop

然后在启动 gnome-session 时加上加速变量:

不推荐使用GALLIUM_DRIVER=d3d12,会出现问题

XDG_CURRENT_DESKTOP=ubuntu:GNOME\XDG_SESSION_TYPE=wayland\GALLIUM_DRIVER=d3d12\gnome-session

设置中Remote Login unlock点击无反应

因为 Polkit 在远程会话(RDP、WSL 桌面等)下对管理员操作有额外限制,认证弹窗无法正常弹出

sudotee/etc/polkit-1/rules.d/50-allow-remote-admin.rules<<'EOF' polkit.addRule(function(action, subject) { if (subject.isInGroup("sudo")) { return polkit.Result.AUTH_ADMIN_KEEP; } }); EOF#重启 polkitsudosystemctl restart polkit#更彻底(推荐)wsl--shutdown

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询