好的,这是奇怪的行为。我在我的任务栏中创建了自己的 WSL 快捷方式,以便能够gnome-terminal
从快捷方式 CTRL+ALT+T 打开例如 linux 图形应用程序。该快捷方式在我创建它的那天就起作用了,但它不再起作用了。
这是位于C:\Users\guill\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Ubuntu
文件中的快捷方式的命令:wslg ~ 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 上。
谢谢!
简短的回答:
尝试:
解释:
一般来说,这似乎不是“图形应用程序”的问题,而是特定应用程序的问题。
例如,如果您以相同的方式安装
xterm
并将其设置为快捷方式,我想您会发现该快捷方式可以正常工作,而无需之前从命令行中启动。另一方面,Gnome Terminal 是(显而易见的)一个 Gnome 应用程序。大多数 Gnome 应用程序至少需要D-Bus 支持,并且许多应用程序需要 Systemd。幸运的是,Gnome Terminal 只需要 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 启动方式的“预期”,但我过去曾遇到过这种情况,在我看来,WSL 的
init
进程在获取和终止由另一个进程启动的孤立进程方面过于激进在启动期间。所以在这种情况下,据我所知(而且我还没有
strace
确认),Gnome Terminal 尝试启动 D-Bus,但init
收割它并关闭它(不正确,我相信)。结果,没有运行 D-Bus,Gnome 终端(实际上是服务器,我相信)不会启动。不过,上面的解决方法是在D-Bus 会话中显式启动 Gnome 终端,所以一切都按预期工作。