BER*_*RKO 22 windows ubuntu xming xserver windows-subsystem-for-linux
如何从 Windows 10 的 Bash Shell 运行图形 Linux 桌面应用程序?
首先,我按照此处所示的步骤安装了适用于 Linux 的 Windows 子系统 (WSL) ,如下所示:
(1) 安装了 Windows 10 Pro Insider Preview Build 19619。
(2) 安装了 Ubuntu Linux 发行版。
(3) 将发行版本从 WSL 1 更改为 WSL 2。
其次,使从Windows 10的bash shell的Linux图形桌面应用程序,我也跟着下面的步骤如图所示位置如下:
(4) 我安装了一个X Server,它是Xming
(5) 安装基于 GTK 的图形 vim 编辑器作为测试使用:
sudo apt-get install vim-gtk
(6) 设置我的显示环境变量
export DISPLAY=:0
(7) 启动应用程序
gvim
但是,这并没有使应用程序午餐,我收到以下错误:
E233: cannot open display
Press ENTER or type command to continue
E852: The child process failed to start the GUI
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
知道为什么会发生此错误吗?
Jai*_*ime 38
WSL2 中的网络子系统与 WSL1 中使用的不同。您必须考虑访问在 Windows 和 Linux 上运行的网络应用程序的差异:
localhost
或127.0.0.1
有多种方法可以确定 Windows 主机中的 IP 地址。您可以在 WSL Linux 中运行以下命令:
cat /etc/resolv.conf
eth0
在 Windows 中显示接口的 IP 地址ipconfig.exe
显示 Windows 主机中的所有 IP 配置route.exe print
显示 Windows 主机中的网络路由配置基于微软的文档,你可以设置DISPLAY变量,检查nameserver
中/etc/resolv.conf
的文件。(@fqquiner和@VPraharsha已经提到了这一点)
export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0
Run Code Online (Sandbox Code Playgroud)
但是,我在使用此解决方案时遇到了问题,可能是因为我使用带有 WiFi 连接和多个虚拟网络的笔记本电脑。我没有使用以前的解决方案,而是使用route.exe
并检查默认网关中使用的接口来确定 Windows IP 地址。
export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
Run Code Online (Sandbox Code Playgroud)
.profile
您可以在~/.profile
文件中设置 DISPLAY 变量。我使用了以下代码:
# set DISPLAY to use X terminal in WSL
# in WSL2 the localhost and network interfaces are not the same than windows
if grep -q WSL2 /proc/version; then
# execute route.exe in the windows to determine its IP address
DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0
else
# In WSL1 the DISPLAY can be the localhost address
if grep -q icrosoft /proc/version; then
DISPLAY=127.0.0.1:0.0
fi
fi
Run Code Online (Sandbox Code Playgroud)
Saj*_*Saj 19
遇到了同样的问题,所以我尝试了这些其他建议,但最终起作用的是允许 vcxsrv 通过公共防火墙。我知道您没有使用 vcxsrv 但也许这对您来说也是同样的问题。
安装 VcXsrv 然后像这些图片一样启用公共防火墙。在命令提示符下使用 wf.msc 打开具有高级安全性的 Windows Defender 防火墙。然后允许像这些图片中的连接。
[
然后从本指南为 Windows 10 WSL2运行VcXsrv
通过添加 -ac 附加参数运行 VcXsrv 或在命令提示符“C:\Program Files\VcXsrv\vcxsrv.exe”中键入:0 -multiwindow -clipboard -wgl -ac
然后在你的 WSL2 终端中输入这个
export DISPLAY_NUMBER="0.0"
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):$DISPLAY_NUMBER
export LIBGL_ALWAYS_INDIRECT=1
# OPTIONAL Set the keyboard layout to US
setxkbmap -layout us
setsid emacs
exit
Run Code Online (Sandbox Code Playgroud)
Not*_*1ds 15
使用比最初提出问题时可用的最新信息更新我的答案。但请记住,由于这个问题在 Stack Overflow 上是封闭的且偏离主题,因此最终这里的答案可能会变得过时,因为无法发布新的答案。我建议查看“超级用户”或“询问 Ubuntu”,了解有关此主题的更多主题和尚未解决的问题。未来总是有可能出现更好的答案。
现有的一些问题供参考:
考虑到这一点,以下信息目前主要是从我的超级用户对上述问题的回答中复制的。
有(至少)三个选择:
随着 WSL 1.0.0(WSL via Microsoft Store 应用程序)的发布,Windows 10 和 Windows 11 用户都可以完全访问 WSLg,这允许 Linux GUI 应用程序(X 或 Wayland)直接在 WSL2 上运行,无需额外配置。在 1.0.0 之前,此功能仅限于 Windows 11 用户。
Windows 10 用户需要使用以.2311
或更高版本结尾的版本,这目前意味着安装KB5020030。如果您的内部版本号的最后四位数字低于 2311,请确保您的 Windows 是最新的,然后在可选更新中查找 KB5020030 。
在最新的 Windows 10 或 Windows 11 系统上,可以:
从Microsoft Store安装 WSL或...
wsl --install
# or, if already installed
wsl --update
# confirm 1.0.0 or later via:
wsl --version
Run Code Online (Sandbox Code Playgroud)
harrymc 提供的一种传统替代方案是安装第三方 X 服务器。我不会重复有关如何执行此操作的信息,因为该答案已经涵盖了该信息,尽管我会说这export DISPLAY=$(hostname).local:0
通常会起作用,并且更简洁。正如我在这个答案中详细介绍的那样,这使用了 mDNS 。
最后,如果您想在 WSL 下运行 Linux桌面,您可能需要考虑 RDP。您可以xrdp
使用 Windows 远程桌面连接安装并访问 Linux 桌面。请参阅此询问 Ubuntu 答案中的步骤。请注意,尽管xfce
答案包含有关运行 Gnome 桌面等更复杂的东西的更多详细信息,但这确实是必要的。
添加到 fquinner 的答案,
您的DISPLAY env 变量应设置为export DISPLAY=X.X.X.X:0
使用 Windows 主机的 IP 地址,因为 WSL2 和 Windows 主机不在同一网络设备中,其中 XXXX 是 IP 地址
并且您的 IP 地址列在resolv.conf 中针对名称服务器 ( $ cat /etc/resolv.conf
)
或者只是export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"
自动加载正确的 IP 地址。此外,您可以将此添加到.bashrc
或.zshrc
(如果您使用 Zsh)
这里有一个故障排除部分,用于在 wsl2 上调试 X11:
https://github.com/cascadium/wsl-windows-toolbar-launcher/blob/master/README.md#troubleshooting
端口转发与 WSL1 不同 - 您的 Linux 服务可以通过 Windows 的 localhost 访问,但反之则不再成立。
因此,您需要使用 Windows 主机的内部 IP 并调整防火墙以允许 WSL 网络通过。
归档时间: |
|
查看次数: |
65284 次 |
最近记录: |