WSL 2 图形应用程序不会从任务栏(或快捷方式)启动,但只有在从首次从 cmd 打开的 wsl 运行时才会启动

Gui*_*ier 7 windows taskbar windows-subsystem-for-linux wsl2 windows-11

好吧,这就是奇怪的行为。我在任务栏中创建了自己的 WSL 快捷方式,以便能够gnome-terminal通过快捷方式 CTRL+ALT+T 打开 Linux 图形应用程序。该快捷方式在我创建的那天有效,但现在不再有效。

这是位于文件中的快捷方式的命令C:\Users\guill\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Ubuntuwslg ~ gnome-terminal

在这些情况下,该应用程序是否会打开,具体取决于我是否已经从 cmd wsl 第一次打开它:

  • 一旦我登录到 Windows 并且我的计算机有足够的时间来启动并打开启动应用程序,该应用程序此时不会使用快捷方式打开。
  • 然后,如果我首先打开 cmd.exe,然后输入wsl进入 wsl,那么我就会在后台打开 wsl。此时,尝试捷径仍然不行。
  • gnome-terminal然后,如果我在从 cmd 打开的 wsl 命令行会话中输入,则 gnome 终端将正确打开。如果我随后执行键盘快捷键,则 gnome 终端将打开。

请注意,在上面的文本中,每次我说我按下键盘快捷键时,它都会产生与尝试从任务栏中的固定图标打开应用程序相同的结果,反之亦然。wslg ~ gnome-terminal在开始菜单文件夹中包含该命令的那个。

那么这是怎么回事呢?似乎图形应用程序至少需要打开一次才能从开始菜单或键盘快捷键打开它们。我希望 WSL 始终在启动时打开。我还希望 WSL 始终准备好从快捷方式打开应用程序。我现在不知道该怎么办。

我正在考虑在这台计算机上再次安装 Linux。WSL 目前没有达到我的期望。我使用的是 Windows 11。

谢谢!

Not*_*1ds 3

简短回答:

尝试:

wslg ~ dbus-launch gnome-terminal
Run Code Online (Sandbox Code Playgroud)

解释:

一般来说,这似乎不是“图形应用程序”的问题,而是特定应用程序的问题。

例如,如果您xterm以相同的方式安装并将其设置为快捷方式,我想您会发现该快捷方式可以按照您的预期工作,而无需事先从命令行启动。

另一方面,Gnome Terminal(显而易见)是一个 Gnome 应用程序。大多数 Gnome 应用程序至少需要D-Bus 支持,并且许多应用程序需要 Systemd。幸运的是,Gnome 终端只需要 D-Bus。

如果您在新的 WSL 实例中从命令行启动它,您将看到ps -efH它已为您启动了一个用户会话 D-Bus 实例。如果您已gvfs安装(默认情况下不是,尽管它可能是作为 Gnome 终端的依赖项安装的),您还会看到它的守护进程已启动(通过 D-Bus)。

因此,当您随后启动时wslg ~ gnome-terminal,D-Bus 已经在运行并且 Gnome 终端可以正确启动。(注意:实际上比这更复杂一些,因为 Gnome 终端实际上​​是作为客户端-服务器应用程序的一部分启动的,而在这种情况下它是不启动的服务器。)

但是当您尝试通过以下方式直接启动它时:

  • wslg ~ gnome-terminal
  • 或者甚至只是wsl ~ gnome-terminal

...那么在我看来,一个相当不起眼的 WSL 错误开始发挥作用。这可能是 WSL 启动方式的“预期”,但我过去遇到过这种情况,在我看来,WSLinit进程在获取和终止由另一个进程启动的孤立进程方面过于激进在启动期间。

因此,在这种情况下,据我所知(我还没有strace确认),Gnome 终端尝试启动 D-Bus,但它init收获并关闭了它(我认为这是不正确的)。因此,如果没有 D-Bus 运行,Gnome 终端(我相信实际上是服务器)就不会启动。

不过,上面的解决方法D-Bus 会话中显式启动 Gnome 终端,因此一切都按预期进行。