在 Windows 上使用 WSL2 和 VcXsrv 启动具有多台显示器的图形应用程序的有效方法

在 Windows 上使用 WSL2 和 VcXsrv 启动具有多台显示器的图形应用程序的有效方法

我在 Windows 上使用 WSL2,目前主要用于启动我的自定义 emacs。我启动 emacs 的工作流程有点麻烦。每次启动后,我都必须启动具有多显示器设置的 Xsrv 应用程序。然后打开新的 Windows 终端,打开 Ubuntu 18.04,启动 Xfce4 图形环境。然后,在这个图形环境中启动一个终端,最后使用emacs命令启动 emacs。

正如您所注意到的,要获得可在多台显示器上使用的图形化 emacs 版本,需要执行相当多的步骤。我的问题是如何加速这个过程。现在我的想法是创建一些自动热键脚本并检查是否可以默认使用 WSL2 启动图形会话。如果您能给我一些提示,我将不胜感激。这些想法已经是我能做的最好的了,还是还有其他一些技巧,让我可以通过几个操作运行图形化的 emacs 版本?

答案1

您可以根据您的设置自动启动 VcXsrv。这就是我所做的。

第 1 部分:让 VcXsrv 自动启动

当您运行 vcxsrv 时,它每次都会弹出一个配置屏幕。
当您到达最后一个配置屏幕时,有一个保存它的选项。然后您将创建一个指向该已保存配置的快捷方式并将其置于启动中。 这是超级用户的帖子讨论自动启动 vcxsrv 的不同方法。

第 2 部分:导出您的显示内容

x11 支持将窗口命令“转发”到不同的 IP 地址(和桌面),以允许类似 Windows 远程桌面的功能。在很多/大多数方面都更好。但并非全部。此功能从一开始就存在于 x11 中。

要导出显示,您需要在启动 x11 应用程序之前设置 DISPLAY 环境变量。通常,完成此操作的最佳方法是将导出命令放入 ~/.bashrc 文件中(假设您使用的是 bash),这样就不需要每次都执行此操作。该行看起来像export DISPLAY=<ip_address>:0.0 0.0 指的是您要定位的桌面,但为了避免混淆,只需使用 0.0。

实现此目的的快捷方法是在 bash 终端运行以下命令。

  1. echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
  2. source ~/.bashrc(或者您可以在这里重新启动您的终端)

现在您应该可以启动您想要的任何 x11 应用程序并让它出现在 Windows 中。

我要指出的是,如果您在使用任何特定应用程序时遇到故障,请尝试在 VcXsrv 中禁用 open gl 支持。在禁用此设置之前,我无法启动 VisualStudio Code。

第 3 部分:运行 Linux x11 的 Windows 快捷方式!

  1. 创建 bash.exe(或 wsl.exe)的 Windows 快捷方式。
  2. 在目标:框中的“ .exe”后,添加“-c [x11_thing_to_run]”(对于 wsl.exe,它是 --exec,而不是 -c)
  3. 如果它无法以图形模式启动,请重新将您的 DISPLAY 环境添加到行中.. 像这样bash.exe -c "DISPLAY=127.0.0.1:0.0 xemacs"
  4. 将您的快捷方式重命名为 x11 并为其分配一个超级图标。 在此处输入图片描述

成品 在此处输入图片描述

答案2

Señor CMasMas 的回答在所有方面都是正确的。但如果你使用的是 WSL 2,localhost它将无法工作。至少,在撰写本文时它不起作用。(有传言称 WSL 团队正在努力解决这个问题。)

原因是 WSL 2 将您的 Ubuntu(或其他任何系统)放在单独的(虚拟)机器中,而不是作为 Windows 机器的一部分(就像 WSL 1 一样)。

为了解决这个问题,你需要进行如下计算DISPLAY

export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0

一个好方法是将其放入文件中,然后忘掉它~/.bashrc。但是登录 WSL 需要使用登录 shell,否则将无法运行。

如果你使用链接到bash.exe,这是更简单的路线,我认为,你的命令应该是这样的

 bash.exe -i -c emacs

-i意味着 shell 应该是交互式的,也就是它应该执行完整的登录脚本。

但是只要命令 (emacs) 正在运行,bash 窗口就会一直打开。由于我安装了 Cygwin,所以我利用了它的run命令,它会启动命令然后消失。所以这是我的命令

C:\cygwin64\bin\run.exe bash -i -c emacs

相关内容