当前位置: 首页 > 知识库问答 >
问题:

WSL 2:从Windows 10 Bash Shell运行图形Linux桌面应用程序"错误E233:无法打开显示"[关闭]

岳昊空
2023-03-14

原始关闭原因未解决

如何从Windows10的BashShell运行图形化Linux桌面应用程序?

首先,我安装了Windows Subsystem for Linux(WSL),步骤如下所示:

(1) 已安装Windows 10 Pro内部预览版本19619。

(2) 安装了Ubuntu Linux发行版。

(3)将发行版本从WSL 1更改为WSL 2。

其次,为了从Windows 10的Bash Shell中启用图形化Linux桌面应用程序,我遵循以下步骤,如下所示:

(4) 我安装了一个正在使用Xming的X服务器

(5) 安装基于GTK的vim编辑器作为测试,使用:

sudo apt get install vim gtk

(6)设置我的显示环境变量

导出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

知道为什么会发生这种错误吗?

共有3个答案

东郭源
2023-03-14

除了fquner的回答,

DISPLAY env变量应设置为export DISPLAY=X.X.X.X:0,以将Windows主机的IP地址用作WSL2,并且Windows主机不在同一网络设备中,其中X.X.X.X是IP地址

您的IP地址列在resolv中。针对名称服务器的conf($cat/etc/resolv.conf

或者简单地导出DISPLAY="grep nameserver /etc/resolv.conf|se's/nameserver//": 0"自动加载正确的IP地址。此外,您可以将其添加到. bashrc. zshirc(如果您使用Zsh)

暨嘉
2023-03-14

有同样的问题,所以我尝试了这些其他建议,但最终的工作是允许vcxsrv通过公共防火墙。我知道你没有使用vcxsrv,但也许对你来说也是同样的问题。

安装VcXsrv,然后启用公共防火墙,如下图所示。使用wf打开具有高级安全性的Windows Defender防火墙。msc在命令提示符下运行。然后允许这些图片中的连接。

然后根据本指南针对Windows 10 WSL2运行VcXsrv

通过添加-ac添加参数运行VcXsrv,或者在命令提示符“C:\Program Files\VcXsrv\vcxsrv.exe”中键入此参数: 0-多窗口-剪贴板-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
宓和同
2023-03-14

WSL2中的网络子系统与WSL1中使用的不同。你必须考虑这些差异来访问运行在Windows和Linux上的网络应用程序:

  • 在WSL1中,Linux使用与Windows主机相同的IP地址,然后,您可以使用localhost127.0.0.1
  • 在WSL2中,Linux运行在轻量级虚拟机上,并且具有不同的IP地址。要访问在Windows主机上运行的网络应用程序,您必须使用Windows IP地址。

有许多方法可以确定Windows主机中的IP地址。您可以在WSL Linux中运行以下命令:

  • cat/etc/resolv。conf显示Windows中eth0界面的IP地址

根据Microsoft文档,您可以在/etc/resolv中设置DISPLAY变量来检查名称服务器。conf文件。(@fqquiner和@VPraharsha已经提到了这一点)

export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):0.0

然而,我在使用这个解决方案时遇到了问题,可能是因为我使用的笔记本带有WiFi连接和多个虚拟网络。与前面的解决方案不同,我使用路由来确定Windows IP地址。exe并检查默认网关中使用的接口。

export DISPLAY=$(route.exe print | grep 0.0.0.0 | head -1 | awk '{print $4}'):0.0

您可以在~/. file文件中设置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
 类似资料:
  • 错误如下: 02-11 13:24:31.561 526 2-5262/?E/AndroidRuntime:致命异常:main process:com.example.vicky.project,pid:5262 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.vicky.project/com.example.vicky.pr

  • 问题内容: 我已经在Linux Mint上将jenkins安装为服务。我正在尝试运行以python编写的测试,并且脚本无法运行Firefox。这条线是个问题。 … self.browser = webdriver.Firefox()… 当我以詹金斯用户身份登录时,我无法运行Firefox。得到这个错误: (进程:3758):GLib-CRITICAL **:g_slice_set_config:断

  • 处理命令时发生未知的服务器端错误。原始错误:无法使用默认证书签名。原始错误生成ENOTDIR 我正在尝试使用Appium桌面应用程序启动一个android应用程序。Appium服务器显示以下错误日志;

  • 我正在使用intellij idea ide,当我试图将我的libgdx项目作为桌面应用程序运行时,我得到了以下消息。

  • 问题内容: 我正在使用Eclipse SWT库进行GUI渲染,用Java为桌面编写一个应用程序。我认为SWT帮助Java克服了在桌面上接受的最大障碍:即为Java应用程序提供一致的,响应式的界面,该界面看起来与桌面上其他任何应用程序的界面都一样。但是,我觉得打包应用程序仍然是一个问题。 OS X本机提供了一种将Java应用程序包装在本机应用程序包中的简便机制,但是为Windows / Linux生

  • LOGCAT错误阻止我打开MAP活动并停止工作。