Windows 11(Ubuntu 20.04)上的 WSL2:无法运行 Qt 应用程序,“无法连接到显示器::0”,找到 xcb 模块但未加载

Windows 11(Ubuntu 20.04)上的 WSL2:无法运行 Qt 应用程序,“无法连接到显示器::0”,找到 xcb 模块但未加载

Qt 应用程序可从终端托管的 WSL 运行,但不能从窗口 WSL 运行

我正在尝试在 Windows 11 上安装有 Ubuntu 20.04 的 WSL2 上运行 Qt 应用程序(例如)。xeyes当我启动它(xeyes、Wireshark 或我公司开发的 Qt 软件)时,出现错误:Error: Can't open display: :0

根据软件的不同,错误可以详细如下:

user@PC:~$ wireshark
qt.qpa.xcb: could not connect to display: :0
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found

为了清晰易读,我将以如下方式开始代码行:

  • C:\Users\me> foo是 Windows 终端 (CMD)
  • bash-5.0$ fight是从终端调用 WSL 吗(在同一个窗口中)
  • user@PC:~$WSL 是否从 Windows 11 桌面的单独窗口中启动。它应该是完全相同的事情,但显然不是……

奇怪的是如果我从 CMD 启动 WSL2,就可以运行这些。但不在我的主 WSL 安装中,它是我从 Windows 桌面上的快捷方式启动的。

关于这个话题有很多疑问:这里这里这里。这些解决方案都不适用于我的系统。我的结论是,在启动时,WSL 会更改网络配置。

如何重现

如果我打开终端(Windows 命令邀请)并从那里启动 WSL,它就可以工作:

C:\Users\me> wsl ~ -e bash --norc --noprofile
bash-5.0$ xeyes               # --> xeyes work

但是如果我打开 WSL直接地在 Windows 中,它不起作用。

user@PC:~$ xeyes
Error: Can't open display: :0

奇怪的是,一旦我打开 WSL2,我无法再次从 CMD 托管的 WSL 启动该应用程序。

C:\Users\me> wsl ~ -e bash --norc --noprofile
bash-5.0$ xeyes
Error: Can't open display: :0

我的结论是WSL2 中的某些内容在启动时改变了网络设置

可能的线索

我尝试改变DISPLAY变量。

  • user@PC:~$ export DISPLAY=0.0.0.0--> 同样的错误
  • user@PC:~$ export DISPLAY=0.0.0.0:0--> 运行几分钟,然后出现同样的错误
  • user@PC:~$ export DISPLAY=10.0.0.3(本地 IP)-->同样的错误
  • user@PC:~$ export DISPLAY=10.0.0.3:0--> 运行几分钟,然后出现同样的错误
  • user@PC:~$ export DISPLAY=[route]设置默认路由——>同样的错误

在所有情况下,问题一定不是出在DISPLAY,因为它在 CMD 和 WSL2 中具有相同的默认值。

Windows 桌面上的 WSL:

user@PC:~$ echo $DISPLAY-->:0

从终端进行 WSL:

C:\Users\me> wsl ~ -e bash --norc --noprofile
bash-5.0$ echo $DISPLAY
bash-5.0$ :0

我以为桌面版 WSL 可能会更改网络设置。但两者ifconfigip route show返回完全相同的参数。我的 .bashrc 中也没有任何可以修改它们的内容,至少我是这么认为的。

答案1

我在 Windows 10 上,在 Ubuntu 上使用 WSL2。

尝试以下操作 export QT_QPA_PLATFORM="xcb" sudo apt install libxcb-xinerama0 libqt5x11extras5

相关内容