我正在运行 Windows 10 计算机,最近安装了适用于 Linux 的 Windows 子系统。这通常会创建一个没有“显示”环境的终端。似乎可以使用 Tmux 来获取多个终端,但这不允许您使用任何类型的图形显示。
我想通过 Windows Subsystem for Linux 打开 Linux 浏览器,例如 Firefox。
我尝试了建议这里,但我只收到错误:
no DISPLAY environment variable specified
答案1
请参阅 Ubuntu 维基运行图形应用程序。
您需要安装在 Windows 上要启动的 X 服务器从 Windows 供 WSL 图形应用程序使用。
您可以使用 X410、VcXsrv、MobaXTerm、Cygwin/C、Xming、Cygwin X 和 vcXsrv 中的任一个。
如果图形应用程序无法自动连接到正在运行的 X 服务器,请在启动应用程序之前将以下命令粘贴到终端,或者在每次登录时将它们添加到进行设置~/.bashrc
:
export DISPLAY=:0 # in WSL 1
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
export LIBGL_ALWAYS_INDIRECT=1
另一篇有用的文章是 在 Linux 上的 Windows 子系统上运行图形程序。
答案2
添加一个包含比最初提出问题时更新的信息的答案,主要是因为我将这个问题/答案链接到其他重复的问题(这里和在 Stack Overflow 上,这通常是一个离题问题)。
至少有三种选择:
随着 WSL 1.0.0(通过 Microsoft Store 应用程序访问 WSL)的发布,Windows 10 和 Windows 11 用户都可以完全访问 WSLg,这使得 Linux GUI 应用程序(X 或 Wayland)无需额外配置即可直接在 WSL2 上运行。在 1.0.0 之前,此功能仅限于 Windows 11 用户。
Windows 10 用户需要使用以
.2311
或更高结尾的版本,目前这意味着安装KB5020030。如果您的版本号的最后四位数字低于 2311,请确保您的 Windows 是最新的,然后在可选更新。一旦安装了最新的 Windows 10 或 Windows 11 系统,你就可以从其Microsoft Store 页面或者 ...
wsl --install # or, if already installed wsl --update # confirm 1.0.0 or later via: wsl --version
harrymc 提供了一个传统的替代方案,即安装第三方 X 服务器。我不会重复有关如何安装的信息,因为该答案中已经介绍过了,不过我会说这
export DISPLAY=$(hostname).local:0
通常会起作用,而且更简洁。这将使用 mDNS,我将在这个答案。最后,如果你想运行 Linux桌面在 WSL 下,您可能需要考虑 RDP。您可以安装
xrdp
并使用 Windows 远程桌面连接访问 Linux 桌面。请参阅我的操作步骤这个 Ask Ubuntu 答案。请注意,只有 才是xfce
真正必要的,尽管答案包含了有关运行 Gnome Desktop 等更复杂程序的更多细节。
答案3
移除所有导出显示启动文件中的设置!
不再需要了。
使用最新的 WSL(Windows 10 Build 19044+ 或 Win 11),系统可以解决这个问题。
我重复。
您不再需要导出 DISPLAY 变量!
在阅读官方文档(链接在 MOMO 的答案中)之前,我尝试了其他人发布的所有自动设置 DISPLAY 值的奇特方法,但都不起作用。
背景故事
我和很多和我一样的人都使用非默认名称服务器,因此我无法使用该技巧来引用我的本地系统。相反,我在 /etc/hosts 中有一个 IPv6 localhost 的静态值。
# This is to always have a named host address for servers on WSL, like sshd
# Usually I use 127.0.0.1 instead.
::1 wsl
在 Windows 中也是一样 c:\Windows\System32\drivers\etc\hosts
然后我有像这样在 ~/.bashrc 中设置 DISPLAY 变量。
export DISPLAY=wsl:0.0
当测试两者时雷鸟和鼠标垫开始好。
但如果我尝试开始Firefox/Firefox-esr我无法访问 DISPLAY。
$ firefox-esr
Error: cannot open display: wsl:0.0
基本上,雷鸟绝不关心 DISPLAY 被设置成什么。也许这就是它对我有用的原因。它甚至在变量曾是设置为错误的IP。
但现在,不手动设置 DISPLAY 变量,firefox 运行良好!
有关我的 Windows 10 系统的信息。
$ uname -a
Linux pappa 5.15.79.1-microsoft-standard-WSL2 #1 SMP Wed Nov 23 01:01:46 \
UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
> wsl --version
WSL-version: 1.0.3.0
Kernelversion: 5.15.79.1
WSLg-version: 1.0.47
MSRDC-version: 1.2.3575
Direct3D-version: 1.606.4
DXCore-version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows: 10.0.19045.2364
> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
Debian Stopped 2
NVIDIA Geforce GTX 1070, driver 527.56
我测试过的应用程序。
$ thunderbird --version
Thunderbird 102.6.1
$ mousepad --version
Mousepad 0.5.8
$ firefox --version
Mozilla Firefox 108.0.1
$ firefox-esr --version
Mozilla Firefox 102.6.0esr
即使像 GIMP 这样繁重的程序也能运行良好。
$ gimp --version
GNU Image Manipulation Program version 2.10.30
最后...
$ set | grep DISPLAY
DISPLAY=:0
WAYLAND_DISPLAY=wayland-0
答案4
sudo nano /etc/wsl.conf
并输入:
[boot]
systemd=true
如果忽略这个细节,我们就会得到错误!!:
错误:无法与服务器通信:发布“http://localhost/v2/snaps/firefox”:拨号 unix /run/snapd.socket:连接:没有此文件或目录
什么时候
sudo snap 安装 Firefox