Qt应用程序工作在终端托管的WSL,而不是窗口WSL。
我试图在Windows11上运行一个Qt应用程序,比如xeyes
,在WSL2上运行Ubuntu20.04,当我启动它时(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终端bash-5.0$ fight
是从终端调用的(在同一个窗口中)user@PC:~$
是从Windows 11开始的,从桌面开始的,在一个单独的窗口中。应该是完全一样的,但显然不是.奇怪的是,如果我从CMD启动I,那么WSL2可以运行这些代码。但不是在我的主要WSL安装中,我是从Windows桌面上的快捷方式开始的。
关于这个问题有很多问题:这里,这里,这里。所有的解决方案都不适合我的系统。我的看法是,在启动时,WSL会改变网络配置.
如果我打开终端(Windows命令invite)并从那里启动WSL,它可以工作:
C:\Users\me> wsl ~ -e bash --norc --noprofile
bash-5.0$ xeyes # --> xeyes work
但是,如果我直接从Windows打开WSL,它就不能工作。
user@PC:~$ xeyes
Error: Can't open display: :0
奇怪的是,<#>once我打开了WSL 2,我不能再次从CMD托管的WSL启动应用程序。
C:\Users\me> wsl ~ -e bash --norc --noprofile
bash-5.0$ xeyes
Error: Can't open display: :0
我的结论是,something在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会改变网络设置。但是ifconfig
和ip route show
都返回完全相同的参数。我的.bashrc中也没有任何东西可以修改它们,至少我认为是这样。
发布于 2023-03-22 05:23:45
我在Windows 10上,WSL2在Ubuntu上。
尝试下面的export QT_QPA_PLATFORM="xcb"
sudo apt install libxcb-xinerama0 libqt5x11extras5
https://askubuntu.com/questions/1428981
复制相似问题