我在装有 Debian 发行版的 Windows 11 上运行 WSL2。要使用 GUI 应用,我运行了 VcXsrv XLaunch,并将显示编号设置为 0,多个窗口,不启动客户端,不使用本机 opengl,并禁用访问控制。对于某些应用(例如 Paraview、Firefox),它们的行为与我在 Linux 机器上预期的一样:我的光标图标看起来像 GNOME-y,我可以让窗口全屏,任务栏图标就是它应该有的样子。
对于其他应用程序,例如 Eclipse,窗口的行为方式很奇怪:我的光标图标仍然是 GNOME-y,但我无法移动窗口或使其全屏,任务栏图标是一只企鹅和一只较小的企鹅。同样值得注意的是,Eclipse 是通过 Java 运行的(我认为),而且我在启动它时收到 SLF4J 错误 + GLib-GObject 警告。
我不知道这是 WSL 错误,还是我没有安装正确的显示驱动程序,或者其他原因,但不同的 GUI 应用程序的行为不同,这让我很烦恼。有人能解释为什么会发生这种情况,和/或推荐修复方法吗?
编辑:附加截图来说明我所说的内容:
需要注意的主要一点是,在顶部栏上,Eclipse IDE 只有一个 X——它没有最小化/全屏图标。事实上,我甚至无法拖动窗口,无论如何它都会占据整个屏幕。
Firefox 窗口的行为与其他窗口一样。它有关闭/最小化/全屏图标,当它不处于全屏模式时,我可以拖动窗口。
以下是任务栏上弹出的图标的屏幕截图:
Firefox 使用常规的 Firefox 图标,而 Eclipse IDE 使用 Linux 企鹅作为图标。
也许还值得注意的是,我在我的主 Windows 操作系统以及 WSL 上安装了 Firefox。
答案1
Windows 11 在 WSL2 中基于 Wayland 显示服务器配备了自己的原生 GUI 功能。在 Linux 世界中,目前有两种常用的显示服务器:Wayland(Linux 桌面未来的新亮点)和 X11(从 UNIX 继承的原始显示服务器)。
通过覆盖 X11DISPLAY
变量,您可以告诉任何在 X11 上运行的应用程序使用您的 VcXsrv X11 显示服务器,但 WSL2 上仍然有一个 Wayland 显示服务器,可供支持它的应用程序使用。
除非您覆盖,否则 Ubuntu 上的 Firefox 默认使用 X11,因此它使用您预期的 VcXsrv。通过 Java 运行的 Eclipse 安装支持 Wayland,并且默认情况下使用它来绕过您的 VcXsrv 配置(如任务栏图标上两只企鹅中较小的一只所示)。
使用原生 Microsoft 技术(即默认情况下,而不是通过您自己的 X11 服务)的 WSL2 GUI 应用程序的图标应该显示.desktop
安装到的应用程序文件中配置的任何图标/usr/share/applications
。如果没有指定图标或没有关联.desktop
文件,则 Windows 将默认在任务栏上显示一只大企鹅。所有使用 Microsoft 技术的 WSL2 GUI 应用程序都会显示一只小企鹅来表明它们正在 WSL2 中运行 - 这就是您拥有的原因二企鹅。
您可以从以下两种行动方案中进行选择:
- 您可以使用原生 WSL2 GUI 支持 Wayland 和 X11 应用程序,从而无需设置变量
DISPLAY
,也无需运行自己的 X11 服务器。 - 你可以确保你的 WSL2 环境确实不是设置变量
WAYLAND_DISPLAY
并继续使用您自己的 X11 设置。您可以unset WAYLAND_DISPLAY
在 BASH 中使用以下命令取消设置变量: