我在 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 终端运行以下命令。
echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
source ~/.bashrc
(或者您可以在这里重新启动您的终端)
现在您应该可以启动您想要的任何 x11 应用程序并让它出现在 Windows 中。
我要指出的是,如果您在使用任何特定应用程序时遇到故障,请尝试在 VcXsrv 中禁用 open gl 支持。在禁用此设置之前,我无法启动 VisualStudio Code。
第 3 部分:运行 Linux x11 的 Windows 快捷方式!
答案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