我已经使用 WSL2 有一段时间了,我想通过运行 X 服务器而不是在要求苛刻的虚拟机上运行 Ubuntu 来从中获得最大的收益,所以我一直在遵循有关如何在 wsl 中安装 gnome 并在 X 服务器上运行它的指南。(https://gist.github.com/Ta180m/e1471413f62e3ed94e72001d42e77e22)
WSL Version: 1.1.3.0
Kernel Version: 5.15.90.1
WSLg Version: 1.0.49
MSRDC Version: 1.2.3770
Direct3D Version: 1.608.2-61064218
DXCore Version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows Version: 10.0.19045.2604
Ubuntu Version: 22.04.1 LTS
问题是,在配置好一切、安装 gnome 并编辑我的 bashrc 文件后,桌面环境在另一个窗口而不是已经在运行的 X 服务器上运行,并且显然会弹出一个巨大的白屏并弹出错误窗口。我尝试过对 xfce 进行同样的操作,但它仍然在另一个窗口上运行。
有什么解决办法吗?
答案1
从多个层面、出于多种原因,这都将是困难的。
首先,正如 @Bodo 在评论中提到的那样,该指南已经过时了。 WSL 现在包含两项在指南最初编写时不可用的内容:
- Systemd 支持(无需使用第三方脚本)
- WSLg,它允许您无需使用第三方 X 服务器(如 VcXsrv)即可运行 X/Wayland 应用程序。
但即使有了这两样东西,运行 Gnome并不容易在 WSL 下出现这种情况有以下几个原因:
Gnome 需要安装大量“硬件”,并使用 Systemd 服务来管理它们。WSL 在容器(不是虚拟机,至少不是直接的)中运行,无法直接访问硬件(无论是物理硬件还是虚拟硬件)。
WSL 在通过 RDP/Rails 向 Windows 公开的 Wayland/XWayland/Weston 会话中运行 GUI 应用程序。这使得运行单独的窗口管理器变得困难,因为窗口管理器集成在 Weston 中,并且无法替换,只能嵌套。
WSLg 为 Xwayland 和 Wayland 设置显示的一些其他细微差别。
我上面链接的问题中有一个关于如何做到这一点的答案,但在我看来,结果仍然不是“可用于生产”。我已经尝试过两次发布我自己的答案,这些答案要么更简单,要么比现有的答案有所改进,但由于我遇到的各种问题,即使我认为它们有效,我还是不得不两次删除它们。
我强烈建议,至少目前,继续在虚拟机中运行 Ubuntu 桌面,而不是 WSL。