我有一个在 Ubuntu 中使用 MobaXterm 和 Windows Subsystem for Linux 2 运行带有 GUI 的程序的设置。在我的 .bashrc 中,我用 设置了 DISPLAY 变量export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0
。现在这似乎不适用于我的工作以太网或 Wifi 连接 - 如果我在 Ubuntu 终端中运行像 emacs 这样的程序,它就会挂起,我需要用 Ctrl+C 中断它,然后我得到输出“Display ... unavailable”(其中 ... 是 DISPLAY 的值)。
问题基本上是是否有人知道现在可以使用 MobaXterm 和 WSL2 在 Ubuntu 中使用 GUI 吗?
当我连接到家用 Wifi 时,它确实可以工作,但当我将手机用作热点时则不行。我还可以从 MobaXterm 自己的终端实例(我猜不是运行 Ubuntu)启动 GUI。我在 2020 年中期创建了这个设置,它在我的办公网络上运行至少到 2023 年 12 月 19 日——我有一段时间不需要经常使用这个设置,而且从那时起也没有准确记录我何时成功使用它。我提到这一点,因为这篇文章说 Windows 23H2 更新破坏了他们的 X11 转发,所以问题可能与更新有关,但他们的设置与我的不同,那里提到的修复(使用ip route
或不设置 DISPLAY)对我不起作用。
我已经尝试了网上能找到的所有其他潜在解决方案,但目前都无济于事(通常它们要么很旧,要么被不使用 MobaXterm 的人发现有效)——使用、$(hostname).local:0
输出或根据、或route.exe
给出的 IP 地址显示 DISPLAY 。hostname -I
ifconfig
ip
netshe.exe
如果我将 DISPLAY 设置为明显无效的值,emacs 不会挂起,而是直接进入其“-nw”模式,即只是终端中的文本编辑器。因此,它似乎认识到上述大多数方法返回的地址存在一些不寻常之处,但无法正确使用它们。
考虑到我的家庭网络和工作网络之间的差异以及其他帖子将此视为潜在问题,我想知道这是否是 Windows Defender 防火墙设置的问题,但我没有发现任何明显存在的问题。但我对防火墙设置不太熟悉,所以可能只是没有找到正确的东西。我的工作网络和手机热点在网络和 Internet 设置中都显示为“私人”网络,没有选项可以更改,我还没有查看我的家庭 Wifi 网络是否有明显不同之处。
版本信息:
- Windows 23H2 22631.4317
- WSL2 10.0.22621.1 (WinBuild.160101.0800)(的输出
(get-item C:\windows\system32\wsl.exe).VersionInfo.FileVersion
) - MobaXterm v.20.1 构建 4290
- Ubuntu 20.04
是的,我认为 WSL、MobaXterm 和 Ubuntu 已经很老了,因为我一直在坚持“如果它没坏,就不要升级它”。也许我应该升级这些组件中的一个或多个?但如果有更简单的方法可以做到这一点,或者只需要进行少量升级,我宁愿不冒破坏我的设置的其他方面或不得不重建它的风险。
好的,经过进一步调查,似乎更改 Windows Defender 防火墙设置是正确的解决方法——添加入站规则以允许从分配给 DISPLAY 的地址范围连接到端口 6000,这似乎允许 GUI 工作(对我来说,地址在第一个之前的部分
.
(称之为 X)似乎保持不变,所以我将范围设置为X.0.0.0
)X.255.255.255
。