wsl2所有有图形界面的程序都打不开,显示This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
-
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"eglfs"
]
},
"archreq": 0,
"className": "QEglFSIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("eglfs")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqlinuxfb.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqlinuxfb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"linuxfb"
]
},
"archreq": 0,
"className": "QLinuxFbIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("linuxfb")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimal.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimal.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimal"
]
},
"archreq": 0,
"className": "QMinimalIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimalegl.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimalegl.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimalegl"
]
},
"archreq": 0,
"className": "QMinimalEglIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("minimalegl")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqoffscreen.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqoffscreen.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"offscreen"
]
},
"archreq": 0,
"className": "QOffscreenIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("offscreen")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqvnc.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqvnc.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"vnc"
]
},
"archreq": 0,
"className": "QVncIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("vnc")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"archreq": 0,
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 331520
}Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/humble/lib/turtlesim/platforms" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so"
qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.
-
您遇到的问题是在尝试在 WSL2(Windows Subsystem for Linux 2)中运行具有图形界面的 Qt 应用程序时,无法初始化 Qt 平台插件。这通常是因为 WSL2 不直接支持图形用户界面(GUI)。尽管 WSL2 改进了对 Linux 内核功能的支持,但它仍然运行在 Windows 的内部,并且没有直接访问 Windows 的图形显示服务器。
错误信息表明 Qt 试图使用
xcb
平台插件(这是用于 X Window System 的插件),但无法连接到显示服务器。在 WSL2 中,没有默认的 X 服务器运行,因此无法显示 GUI。解决方案
-
使用 X Server for Windows:
- 您可以在 Windows 上安装一个 X Server,如 VcXsrv、Xming 或 X410。这些工具允许 Windows 主机作为 X 服务器运行,从而可以显示 Linux GUI 应用程序。
- 安装后,启动 X 服务器,并确保它配置为接受来自 WSL2 的连接。
- 在 WSL2 中,设置
DISPLAY
环境变量以指向 Windows 上的 X 服务器。通常,这可以通过运行export DISPLAY=$(hostname -I | awk '{print $1}'):0.0
来完成(假设 X 服务器运行在默认端口上)。
-
使用 Windows Subsystem for Linux GUI (WSLg):
- 从 Windows 11 版本 21H2 开始,微软引入了 WSLg,它内置了对 GUI 应用程序的支持。如果您的 Windows 版本支持 WSLg,您可以尝试安装或更新到支持 WSLg 的 WSL 版本。
- 确保您的 WSL 发行版是基于 WSLg 的。在 Windows 功能中启用 WSLg 后,您可能需要重新安装或更新您的 Linux 发行版。
-
远程 X11 会话:
- 如果可能,考虑将 GUI 应用程序运行在远程 Linux 服务器上,并通过 SSH 和 X11 转发来显示 GUI。这通常用于开发环境,其中有一个专用的服务器用于运行 GUI 密集型应用程序。
实施步骤示例(使用 VcXsrv)
- 下载并安装 VcXsrv。
- 启动 VcXsrv,在“Extra settings”中选择“Disable access control”。
- 在 WSL2 中,设置 DISPLAY 变量并运行您的 Qt 应用程序:
export DISPLAY=$(hostname -I | awk '{print $1}'):0.0 ./your-qt-application
确保您的防火墙设置允许这种类型的连接,并且您的网络配置不会阻止 WSL2 与 Windows 主机上的 X 服务器通信。
以上为生成回答,仅供参考~
-