Ubuntu交叉编译到树莓派上出现qt.qpa.xcb: could not connect to display 的问题解决

本文解决在Ubuntu18.4环境下,使用Qt进行树莓派4B交叉编译时遇到的显示错误。通过调整DISPLAY环境变量值至正确配置,实现正常显示,并提供在树莓派上设置全局DISPLAY变量的方法。

我使用的是Ubuntu18.4,树莓派4B,主机Ubuntu交叉编译到树莓派上,出现以下错误:

qt.qpa.xcb: could not connect to display 
qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/local/qt5pi/plugins/platforms" 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.

本人使用的platform是xcb,不是eglfs,因为eglfs默认是全屏的,坑爹的玩意,搞了我好几天。出现这个问题,并且libxcb.so已经找到了,很是纳闷,参考了一位大神的文章:https://blog.youkuaiyun.com/qq21497936/article/details/79722924。他是在qt的项目管理那,添加了全局变量DISPLAY,并设置为:10.0,但是我的不行,要设置成:0.0才可以显示。

所以各位可以多试试几个参数值,比如从:0.0开始,一直试。

但是这样设置,每个项目都要这样整,干脆在树莓派上,设置一个全局变量:

sudo vim /etc/profile

添加:

export DISPLAY=:0.0,注意这个值是要试出来的

按esc键,然后:wq退出保存

刷新:

source /etc/profile

有疑问可私信

### UbuntuQt 应用程序 'qt.qpa.xcb: could not connect to display' 错误的解决方案 当在远程服务器上运行基于 Qt 的应用程序时,可能会遇到 `qt.qpa.xcb: could not connect to display` 或类似的错误消息。这通常是因为远程服务器无法提供图形化显示支持所致[^1]。 #### 方法一:设置环境变量 QT_QPA_PLATFORM 可以通过修改环境变量来禁用 XCB 插件并切换到无头模式(headless mode)。具体操作如下: 编辑用户的 `.bashrc` 文件: ```bash echo "export QT_QPA_PLATFORM=offscreen" >> ~/.bashrc source ~/.bashrc ``` 此命令会将环境变量 `QT_QPA_PLATFORM` 设置为 `offscreen`,从而允许应用在没有显示器的情况下正常工作[^5]。 --- #### 方法二:注释掉涉及 GUI 显示的代码 如果项目中有调用 OpenCV 的函数(如 `cv.imshow()`),这些函数可能尝试启动窗口以显示图像。然而,在远程服务器环境中,这种行为会导致失败。因此可以考虑注释掉所有与 GUI 显示有关的代码部分[^2]。 例如: ```python import cv2 image = cv2.imread('example.jpg') # 注释掉以下两行代码可避免报错 # cv2.namedWindow("Image", cv2.WINDOW_NORMAL) # cv2.imshow("Image", image) # cv2.waitKey(0) print("Processing completed without displaying images.") ``` 通过这种方式能够有效防止因缺少图形界面而导致的应用崩溃。 --- #### 方法三:安装必要的依赖库 有时该问题可能是由于某些必需的库未被正确安装所引起的。可以在服务器端执行下面这条指令来确保所有的必要组件都已就位: ```bash sudo apt-get update && sudo apt-get install -y libxcb-xinerama0 libxkbcommon-x11-0 ``` 完成之后再次尝试运行您的程序看是否还有同样的警告信息出现[^3]。 --- #### 方法四:调整 tmux 配置或者使用其他工具代替它 对于那些习惯于利用 tmux 来保持长时间作业不断线的人来说,他们也有可能遭遇此类状况。这是因为 tmux 默认情况下不会传递 DISPLAY 变量给子进程的缘故。一种简单的解决办法就是手动导出这个变量之前先确认它的值不是空字符串;另一种则是寻找替代品比如 screen ,后者在这方面表现得更好一些[^4]。 --- ### 总结 以上介绍了四种针对不同情况下的处理措施,分别是更改系统级配置文件使能离屏渲染功能、移除任何试图创建可视化的逻辑片段、补充缺失的基础软件包以及重新审视多路复用器的工作方式。希望其中至少有一种能满足实际需求!
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值