文章目录
- 极简说明
- 详细说明
极简说明
模式:Wslg + gnome-shell + wayland
该方式采用gnome-shell来嵌入式显示桌面内容,gnome-shell又将通过WSLg(Windows扩展的显示组件),在Windows系统内弹出一个窗口来操作gnome-shell。
参考:https://gist.github.com/tdcosta100/7def60bccc8ae32cf9cacb41064b1c0f
注:Ubuntu20、22、24有环境差异,下方操作命令请按照自己安装的子系统版本来选择
更新软件包(20.04、22.04或24.04)
sudoaptupdate&&sudoaptupgrade安装 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
前置(兼容性等内容)处理
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启动桌面(需要使用非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
更新软件包(20.04、22.04或24.04)
sudoaptupdate&&sudoaptupgrade安装 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
选择显示管理器(可选)
# Gnome 默认使用的是 gdm3 管理器# 可选,您可以安装 lightdm 或者 kdm 等管理器# 安装 lightdm 命令#sudo apt install lightdm# 安装过程中会提示选择管理器,也可以手动切换#sudo dpkg-reconfigure lightdmsudodpkg-reconfigure gdm3# 重启系统sudoreboot# 查看当前显示管理器cat/etc/X11/default-display-manager环境前置处理(WSL环境下需进行操作,在第六步启动桌面时会指定协议)
X11协议与Wayland协议区别:https://blog.csdn.net/sunyuhua_keyboard/article/details/142792493
个人测试过程中实验了可成功运行的组合- X11 + VcXsrv 【任意用户】
- Wayland + VcXsrv 【任意用户】
- Wayland + Wslg 【非管理员】【建议】(极简版使用的便是该组合)
X11协议,在WSL中的环境问题
在WSL环境中,WSL重新启动后,WSL会在对应用户目录下生成
wayland-0和wayland-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.lockWayland协议,在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
准备显示组件
VcXsrv
通过Win32窗口管理实现X Window System(X11)图形界面显示的工具。
下载地址:https://github.com/marchaesen/vcxsrv/releases下载安装后打开 VcXsrv。
DisplaySetting:单选框可选择显示的样式。Display number 选择 -1 时将会由服务自行选择显示屏幕。
Client Startup:选择 Start no Clinet
Extra Settings:其余位置不做改变。Disable access control需要进行勾选。
准备完毕后软件将会挂起在后台,等待 gnome 接入时自动显示画面
WSLg
官方说明:https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps
在当前版本的WSL中开启的WSL-Gui支持,可以让WSL子系统中的图形化界面直接以窗口化模式运行在Windows上。
启用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~/.bashrcWSLg
你可将下述命令存储至.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
错误处理(
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部分