news 2026/5/11 7:51:53

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/5/11 7:51:08

鸿蒙开发-如何将C++侧接收的PixelMap转换成cv::mat格式

目录1. 解决措施2. 示例代码3. 将arraybuffer转换成cv::mat4. 使用OH_PixelMap_AccessPixels获取PixelMap的内存地址,将这个内存地址中的数据转换为cv::mat的1. 解决措施 将PixelMap转换成cv::mat有两种方法: 将PixelMap的arraybuffer转换成cv::mat。使…

作者头像 李华
网站建设 2026/4/30 23:21:07

四天学会一本书的厦门服务机构是哪家

四天学会一本书:厦门诺辰教育如何助力高效学习在快节奏的现代生活中,高效学习已成为许多人追求的目标。尤其是在知识更新迅速的时代,如何在短时间内掌握一本书的核心内容变得尤为重要。厦门诺辰教育作为一家专注于高效学习方法培训的服务机构…

作者头像 李华
网站建设 2026/5/8 17:44:01

AI在HR数字化中的应用:简历筛选与人才匹配的技术实现

摘要:在HR数字化转型进程中,简历筛选与人才匹配是招聘全流程的核心痛点。传统人工筛选模式效率低下、主观性强,难以适应大规模招聘需求。AI技术的融入为该场景提供了高效解决方案,通过OCR识别、自然语言处理(NLP&#…

作者头像 李华
网站建设 2026/5/11 5:32:10

anything-llm Docker本地部署与源码问答指南

anything-llm Docker本地部署与源码问答指南 在现代软件开发中,面对动辄数百万行的代码库,如何快速理解系统架构、定位关键逻辑、掌握模块交互,已成为开发者日常效率的核心瓶颈。尤其像 Android AOSP、Linux 内核这类大型项目,仅…

作者头像 李华
网站建设 2026/5/3 21:15:57

LobeChat Docker镜像使用技巧:环境变量配置大全

LobeChat Docker镜像使用技巧:环境变量配置大全 在构建现代 AI 聊天应用的实践中,一个常见痛点是:如何快速、安全地将前端界面与后端大模型服务对接,同时兼顾部署灵活性和访问控制?开源项目 LobeChat 正是为解决这一问…

作者头像 李华
网站建设 2026/5/10 11:17:35

语音合成新突破:GPT-SoVITS实现跨语言TTS只需1分钟音频

语音合成新突破:GPT-SoVITS实现跨语言TTS只需1分钟音频 在内容创作日益个性化的今天,越来越多的自媒体人、教育工作者甚至普通用户开始思考一个问题:能不能让AI用我的声音说话? 过去,这听起来像是科幻电影的情节。传统…

作者头像 李华