news 2026/4/23 16:23:43

WSLg-Ubuntu-Desktop

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WSLg-Ubuntu-Desktop

文章目录

    • 极简说明
    • 详细说明

极简说明

模式:Wslg + gnome-shell + wayland

该方式采用gnome-shell来嵌入式显示桌面内容,gnome-shell又将通过WSLg(Windows扩展的显示组件),在Windows系统内弹出一个窗口来操作gnome-shell。
参考:https://gist.github.com/tdcosta100/7def60bccc8ae32cf9cacb41064b1c0f

注:Ubuntu20、22、24有环境差异,下方操作命令请按照自己安装的子系统版本来选择

  1. 更新软件包(20.04、22.04或24.04)

    sudoaptupdate&&sudoaptupgrade
  2. 安装 Ubuntu-Deskop 环境

    安装ubuntu-desktop后会绑带着安装gnome-session、gnome-shell等基础环境

    • 适用于 Ubuntu 20.04 和 Ubuntu 22.04

      注:acpi-support软件包在Ubuntu 20 & 22 环境下会导致系统异常,该版本安装时需要将软件包排除。必要参数acpi-support-

      sudoaptinstallubuntu-desktop acpi-support-
    • 适用于 Ubuntu 24.04

      sudoaptinstallubuntu-desktop
  3. 前置(兼容性等内容)处理

    wayland模式禁用x11

    • 适用于 Ubuntu 20.04

      sudomkdir/etc/systemd/user/gnome-shell-wayland.service.d/#sudo nano /etc/systemd/user/gnome-shell-wayland.service.d/override.confsudovim/etc/systemd/user/gnome-shell-wayland.service.d/override.conf
    • 适用于 Ubuntu 22.04 和 Ubuntu 24.04

      sudomkdir/etc/systemd/user/org.gnome.Shell@wayland.service.d/#sudo nano /etc/systemd/user/org.gnome.Shell@wayland.service.d/override.confsudovim/etc/systemd/user/org.gnome.Shell@wayland.service.d/override.conf

    编辑器打开后在文件内写入以下内容

    [Service] # 需要有该空行 ExecStart= # --no-x11 指定禁用x11,--nested 指定使用嵌套模式 ExecStart=/usr/bin/gnome-shell --no-x11 --nested
  4. 启动桌面(需要使用非root用户)

    直接执行命令或者,将其保存至.sh均可

    DESKTOP_SESSION=ubuntu\GDMSESSION=ubuntu\GNOME_SHELL_SESSION_MODE=ubuntu\GTK_IM_MODULE=ibus\GTK_MODULES=gail:atk-bridge\IM_CONFIG_CHECK_ENV=1\IM_CONFIG_PHASE=1\QT_ACCESSIBILITY=1\QT_IM_MODULE=ibus\XDG_CURRENT_DESKTOP=ubuntu:GNOME\XDG_DATA_DIRS=/usr/share/ubuntu:$XDG_DATA_DIRS\XDG_SESSION_TYPE=wayland\XMODIFIERS=@im=ibus\MUTTER_DEBUG_DUMMY_MODE_SPECS=1366x768\gnome-session

详细说明

注:Ubuntu20、22、24有环境差异,下方操作命令请按照自己安装的子系统版本来选择
该部分主要参考:

  • X11 + VcXsrv: https://blog.csdn.net/m0_71987651/article/details/146378266
  • gnome-shell + WSLg:https://gist.github.com/tdcosta100/7def60bccc8ae32cf9cacb41064b1c0f
  1. 更新软件包(20.04、22.04或24.04)

    sudoaptupdate&&sudoaptupgrade
  2. 安装 Ubuntu-Deskop 环境

    安装ubuntu-desktop后会绑带着安装gnome-session、gnome-shell等基础环境

    • 适用于 Ubuntu 20.04 和 Ubuntu 22.04

      注:acpi-support软件包在Ubuntu 20 & 22 环境下会导致系统异常,该版本安装时需要将软件包排除。必要参数acpi-support-

      sudoaptinstallubuntu-desktop acpi-support-
    • 适用于 Ubuntu 24.04

      sudoaptinstallubuntu-desktop
  3. 选择显示管理器(可选)

    # Gnome 默认使用的是 gdm3 管理器# 可选,您可以安装 lightdm 或者 kdm 等管理器# 安装 lightdm 命令#sudo apt install lightdm# 安装过程中会提示选择管理器,也可以手动切换#sudo dpkg-reconfigure lightdmsudodpkg-reconfigure gdm3# 重启系统sudoreboot# 查看当前显示管理器cat/etc/X11/default-display-manager
  4. 环境前置处理(WSL环境下需进行操作,在第六步启动桌面时会指定协议)

    X11协议与Wayland协议区别:https://blog.csdn.net/sunyuhua_keyboard/article/details/142792493

    个人测试过程中实验了可成功运行的组合

    • X11 + VcXsrv 【任意用户】
    • Wayland + VcXsrv 【任意用户】
    • Wayland + Wslg 【非管理员】【建议】(极简版使用的便是该组合)
    • X11协议,在WSL中的环境问题

      在WSL环境中,WSL重新启动后,WSL会在对应用户目录下生成wayland-0wayland-0.lock文件。该文件会导致 x11 的错误。
      WSL重启后文件将会恢复,可以考虑禁用wayland
      参考:https://gitlab.gnome.org/GNOME/gnome-session/-/issues/106

      # 查看当前登录用户目录下的 wayland 文件ls-l /run/user/$(id-u)/# 您可以使用重命名的方式来移除该文件的关联mv/run/user/$(id-u)/wayland-0 /run/user/$(id-u)/back_wayland-0mv/run/user/$(id-u)/wayland-0.lock /run/user/$(id-u)/back_wayland-0.lock
    • Wayland协议,在WSL中的环境问题

      在WSL环境中,WSLg会覆盖 /tmp/.X11-unix 目录的x11相关支持文件为只读挂载
      你可以使用两种方式处理该问题。

      • 修复目录

        /usr/bin/umount /tmp/.X11-unix /usr/bin/rm -rf /tmp/.X11-unix /usr/bin/mkdir /tmp/.X11-unix /usr/bin/chmod1777/tmp/.X11-unix /usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0# 如果您使用的是Ubuntu24.04,需要额外处理以下内容/usr/bin/chmod 0777 /mnt/wslg/runtime-dir /usr/bin/chmod 0666 /mnt/wslg/runtime-dir/wayland-0.lock

        【可选】你可以将此命令存储为services服务,让其在WSL启动后自动执行

        sudosystemctl edit --full --force wslg-fix.service

        在编辑框中输入

        [Service] Type=oneshot ExecStart=-/usr/bin/umount /tmp/.X11-unix ExecStart=/usr/bin/rm -rf /tmp/.X11-unix ExecStart=/usr/bin/mkdir /tmp/.X11-unix ExecStart=/usr/bin/chmod 1777 /tmp/.X11-unix ExecStart=/usr/bin/ln -s /mnt/wslg/.X11-unix/X0 /tmp/.X11-unix/X0 # --- Ubuntu24.04需要 --- ExecStart=/usr/bin/chmod 0777 /mnt/wslg/runtime-dir ExecStart=/usr/bin/chmod 0666 /mnt/wslg/runtime-dir/wayland-0.lock # --- Ubuntu24.04部分结束 --- [Install] WantedBy=multi-user.target

        保存之后启用服务

        sudosystemctlenablewslg-fix.service
      • 不使用x11协议【建议】

        为wayland模式默认使用的gnome-shell进行设定使其禁用x11

        • 适用于 Ubuntu 20.04

          sudomkdir/etc/systemd/user/gnome-shell-wayland.service.d/#sudo nano /etc/systemd/user/gnome-shell-wayland.service.d/override.confsudovim/etc/systemd/user/gnome-shell-wayland.service.d/override.conf
        • 适用于 Ubuntu 22.04 和 Ubuntu 24.04

          sudomkdir/etc/systemd/user/org.gnome.Shell@wayland.service.d/#sudo nano /etc/systemd/user/org.gnome.Shell@wayland.service.d/override.confsudovim/etc/systemd/user/org.gnome.Shell@wayland.service.d/override.conf

        再打开的文本编辑器中输入

        [Service] # 需要有该空行 ExecStart= # --no-x11 指定禁用x11,--nested 指定使用嵌套模式 ExecStart=/usr/bin/gnome-shell --no-x11 --nested
  5. 准备显示组件

    • VcXsrv

      通过Win32窗口管理实现X Window System(X11)图形界面显示的工具。
      下载地址:https://github.com/marchaesen/vcxsrv/releases

      1. 下载安装后打开 VcXsrv。

      2. DisplaySetting:单选框可选择显示的样式。Display number 选择 -1 时将会由服务自行选择显示屏幕。

      3. Client Startup:选择 Start no Clinet

      4. Extra Settings:其余位置不做改变。Disable access control需要进行勾选。

      5. 准备完毕后软件将会挂起在后台,等待 gnome 接入时自动显示画面

    • WSLg

      官方说明:https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps
      在当前版本的WSL中开启的WSL-Gui支持,可以让WSL子系统中的图形化界面直接以窗口化模式运行在Windows上。

  6. 启用Ubuntu-Desktop桌面

    以 " \" 空格斜杠分割的多行代码会被组合在一行执行。
    ip route show | grep -i default | awk '{ print $3}'方式适用于 WSL 环境下获取宿主的 Windows 主机IP用于访问
    grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'方式用于获取 DNS 主机,当前版本建议使用上面的方式

    • VcXsrv

      # 对应下面三行的描述:# 获取显示的显示器,当前方案会使用 VcXsrv 接收显示内容# 输出协议,选项还有 Wayland 等等# 使用 gnome 启动# x11 协议DISPLAY=$(iproute show|grep-i default|awk'{ print$3}'):0.0\XDG_SESSION_TYPE=x11\gnome-session# wayland 协议#DISPLAY=$(ip route show | grep -i default | awk '{ print $3}'):0.0 \#XDG_SESSION_TYPE=wayland \#gnome-session

      【可选】您可以将该命令存储至.sh文件,或将变量存储至全局配置(环境变量中),之后仅需要运行gnome-session即可启动桌面,以下是存至环境变量的方式

      sudovi~/.bashrc
      # 在末尾添加如下两行后保存退出 export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0 export XDG_SESSION_TYPE=x11
      # 应用修改source~/.bashrc
    • WSLg

      你可将下述命令存储至.sh文件,如果您想启动WSL时自启动桌面程序,您可以参考 第四步:环境前置处理的 wayland 部分

      DESKTOP_SESSION=ubuntu\GDMSESSION=ubuntu\GNOME_SHELL_SESSION_MODE=ubuntu\GTK_IM_MODULE=ibus\GTK_MODULES=gail:atk-bridge\IM_CONFIG_CHECK_ENV=1\IM_CONFIG_PHASE=1\QT_ACCESSIBILITY=1\QT_IM_MODULE=ibus\XDG_CURRENT_DESKTOP=ubuntu:GNOME\XDG_DATA_DIRS=/usr/share/ubuntu:$XDG_DATA_DIRS\XDG_SESSION_TYPE=wayland\XMODIFIERS=@im=ibus\MUTTER_DEBUG_DUMMY_MODE_SPECS=1366x768\gnome-session
  7. 错误处理(gnome-session执行后)

    • gnome-session 直接关闭

      请查看您修复wayland步骤的ExecStart=/usr/bin/gnome-shell --no-x11 --nested是否填写有误

    • 如果您的终端返回了Terminated

      则表示运行异常,已终止输出,此时您可以查看日志进行调试

      # 查看 systemctl 的服务日志journalctl -xe
      • 日志中提示gnome-session-check-accelerated: no X11 display found

        请按照 X11 修复步骤进行修复

    • 启动后黑屏

      你需要再次重启相应的协议中间件,或切换非管理员用户

      # 使用的是默认协议sudosystemctl restart gdm3# 使用的是 lightdm 协议#sudo systemctl restart lightdm
    • 打开时唤醒了一个全屏白底的Ubuntu错误界面

      第六步配置的显示渠道不可用或者gnome-shell异常。
      请查阅DISPLAY=$(ip route show | grep -i default | awk '{ print $3}'):0.0部分

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:37:21

代码重构艺术的技术文章大纲

什么是代码重构定义代码重构及其核心目标 重构与重写的区别 重构的常见场景(技术债、性能优化、可维护性提升)重构的基本原则www.yunshengzx.com保持功能不变性 小步修改与频繁测试 遵循SOLID原则 利用设计模式优化结构常见的重构技术重命名变量/方法&am…

作者头像 李华
网站建设 2026/4/23 13:36:38

Qwen-Image深度解析:20B参数国产图像生成模型

Qwen-Image深度解析:20B参数国产图像生成模型 在广告设计师熬夜修改海报文案的深夜,在教育机构为一本讲义配图焦头烂额时,在跨境电商卖家需要快速产出本地化视觉素材的清晨——一个共同的痛点浮现:我们有了强大的AIGC工具&#x…

作者头像 李华
网站建设 2026/4/23 13:36:36

开源聊天界面新秀LobeChat全面上手评测

开源聊天界面新秀 LobeChat 全面上手评测 在大模型技术席卷全球的今天,我们早已不再惊讶于 AI 能写诗、编程或回答复杂问题。真正让人头疼的是:如何把强大的模型能力,变成一个用户愿意天天用的产品? 你可能已经试过直接调用 OpenA…

作者头像 李华
网站建设 2026/4/23 12:25:57

八大排序之:冒泡排序、快速排序和堆排序

1.冒泡排序1.1 基本概念冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个算法的名称由来是因为越小的元素会经由交换慢慢"浮&qu…

作者头像 李华
网站建设 2026/4/23 13:38:48

Echart y轴纵坐标设置最小刻度值 minInterval

splitNumber: 10, *****坐标轴的分割段数 minInterval: 1 *****自动计算坐标轴最小间隔,例:设置成1,刻度没有小数 maxInterval: 20’‘, *****自动计算坐标轴最大间隔yAxis: {type: "value",min: 0,minInterval: 1, // 保证刻度为整…

作者头像 李华
网站建设 2026/4/23 12:10:33

LobeChat能否诊断程序bug?开发者调试助手

LobeChat能否诊断程序bug?开发者调试助手 在现代软件开发中,一个常见的场景是:你盯着终端里一行晦涩的 Python 错误堆栈,TypeError: NoneType object is not iterable,却一时想不起哪里漏了返回值。查文档、搜 Stack …

作者头像 李华