卸载 ubuntu-wsl2-systemd-script,使用 WSLg 图形用户界面

在 Windows 上使用 Linux 开发环境,最好的做法是使用 WSL2。在 WSL 和早期的 WSL2 版本中,并不支持图形用户界面。因此如果想要使用 GUI 程序,需要自行解决。具体方法可以参考之前的一篇博客 Win10 系统安装 Linux 子系统教程(WSL2 + Ubuntu 20.04 + Gnome 桌面 )

好消息是在新版的 WSL2 中,支持在 Windows 上运行 Linux GUI 应用程序(X11 和 Wayland),提供了完全集成的桌面体验,从而使得 Linux GUI 应用程序在 Windows 上使用起来原生且自然。

在这里插入图片描述
先决条件:

  • Linux GUI 应用仅受 WSL 2 支持
  • 需要使用 Windows 10 版本 19044+ 或 Windows 11 才能使用此功能。
  • 已安装适用于 vGPU 的驱动程序

全新安装 - 以前没有安装 WSL

如果电脑上还未安装过 WSL 或 WSL2,则安装过程非常简单,需要一行命令:

> wsl --install

按照提示安装完成之后,就可开始在 WSL 上使用 Linux GUI 应用了。

现有 WSL 安装

如果已在计算机上安装 WSL,可以运行更新命令来更新到包含 Linux GUI 支持的最新版本。
(1)打开 windows terminal 或 PowerShell
(2)输入 WSL 更新命令:

> wsl --update

(3)关闭并重启 WSL,更新才能生效

> wsl --shutdown

卸载 ubuntu-wsl2-systemd-script

如果电脑上已经安装了 WSL2,且通过 ubuntu-wsl2-systemd-script 方法支持了 GUI 应用,则可以卸载该脚本,转为使用新版 WSL2 中自带的 WSLg 图形用户界面。
卸载方法:
(1)运行下面的卸载脚本

#!/bin/bash
#sudo apt update -yqqqq
echo "Uninstalling ubuntu-wsl2-systemd-hack"
sudo rm -f /usr/sbin/start-systemd-namespace
sudo rm -f /usr/sbin/enter-systemd-namespace
sudo sed -i "s/#\ Start\ or\ enter\ a\ PID\ namespace\ in\ WSL2\nsource\ \/usr\/sbin\/start-systemd-namespace\n//g" /etc/bash.bashrc
sudo sed -i "s/#\ Start\ or\ enter\ a\ PID\ namespace\ in\ WSL2\nsource\ \/usr\/sbin\/start-systemd-namespace\n//g" /etc/zsh/zsh.zshrc

(2)注释或删掉 /etc/bash.bashrc/etc/zsh/zsh.zshrc(如果安装了zsh)中的这行内容

# Start or enter a PID namespace in WSL2
# source /usr/sbin/start-systemd-namespace

(3)更新 WSL2

> wsl --update

更新完之后的版本,类似如下

> wsl --version
WSL 版本: 2.2.4.0
内核版本: 5.15.153.1-2
WSLg 版本: 1.0.61
MSRDC 版本: 1.2.5326
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26091.1-240325-1447.ge-release
Windows 版本: 10.0.22635.3785

(4)sudo vim /etc/wsl.conf,将该文件中的下面两行内容取消注释

[boot]
systemd=true

这样就会在 WSL2 启动时自动开启 systemd,这是运行 GUI 所必需的。

ubuntu-wsl2-systemd-script 脚本所做的事情就是为了开启 systemd,而在新版的 WSL2 中,只需要修改配置文件中的这两行就可以了。

(5)关闭并重启 WSL2

> wsl --shutdown

(6)测试 systemd 命令
在 WSL2 终端中输入 systemctl命令,你会发现是可用的

> systemctl
UNIT                                                                                                           
dev-fuse.device                                                                                                   
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-381af4ce\x2deca0\x2d4d03\x2dad5e\x2dcfbd8dca0e70-net-eth0.de>
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-8fd241fc\x2db084\x2d4f91\x2db7b6\x2d1d45e5200e20-pcib084:00->
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-8fd241fc\x2db084\x2d4f91\x2db7b6\x2d1d45e5200e20-pcib084:00->
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0-host0-targe>
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0-host0-targe>
sys-devices-LNXSYSTM:00-LNXSYBUS:00-ACPI0004:00-VMBUS:00-fd1d2cbd\x2dce7c\x2d535c\x2d966b\x2deb5f811c95f0-host0-targe>
sys-devices-platform-serial8250-tty-ttyS0.device                                                                   
sys-devices-platform-serial8250-tty-ttyS1.device                                                                   
sys-devices-platform-serial8250-tty-ttyS2.device                                                                   
sys-devices-platform-serial8250-tty-ttyS3.device
...

使用 Linux GUI

现在,在 WSL2 中可以直接使用 GUI 程序了。例如,在终端中输入

> gedit

会直接打开 gedit文本编辑器。

如果输出警告(gedit:1488): GLib-GIO-CRITICAL **: 11:17:48.552: g_dbus_proxy_new: assertion 'G_IS_DBUS_CONNECTION (connection)' failed,可以通过sudo apt-get purge fcitx-module-dbus命令来解决。

其它所有 GUI 程序(包括 OpenGL)都可以用这种方法直接打开。

参考链接

在适用于 Linux 的 Windows 子系统上运行 Linux GUI 应用

Is there a way to undo this? #87

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值