当前位置: 首页 > news >正文

泰山派RK3566移植QT,动鼠标时出现屏幕闪烁

总结:

        交叉编译到 泰山派rk3566跑调海康摄像头的qt应用程序失败了。

        X11无效窗口。

移植QT注意

        屏幕分辨率不要改。改了执行QT的时候,framebuffer识别不出设备。

命令行安装QT-Creator

        sudo install 类似的指令安装Qt-Creator时,可能找不到编译套件。

        需要再执行 sudo apt-get install qt5-default 来安装核心库、工具和头文件(开发环境)。

关于闪烁问题

显示管理器和显示服务器

        在 Linux 系统中,屏幕撕裂问题可能与显示服务器的渲染方式有关。

        GDM(GNOME Display Manager)是 GNOME 桌面环境的默认显示管理器(注意,泰山派RK3566的Ubuntu默认是lightDM作为显示管理器),它负责启动用户登录界面和管理用户会话。

        GDM 支持两种主要的显示服务器技术:Xorg(x11) 和 Wayland。

        Light 支持Xorg和 Mir,不支持直接运行在Wayland上,但是支持通过启动Wayland会话间接运行Wayland。

尝试关闭Wayland,强制使用Xorg显示服务器(在lightdm管理器条件下)

关于Wayland,

        测试了修改/etc/gdm3/custom.conf 文件,取消了

[daemon]
# Uncomment the line below to force the login screen to use Xorg
# WaylandEnable=false

        的注释。

        也就是关闭Wayland,强制使用 Xorg。

结果:

        发现无需登录,直接进入桌面了。但执行Qt程序仍然出现屏幕闪烁、撕裂

使用GDM而非lightDM(不强制使用Xorg)

参考

泰山派 RK3566 在Ubuntu系统下运行QT程序屏幕撕裂以及framebuffer冲突的解决方法_rk3566 framebuffer-CSDN博客

#重新运行gdm3配置脚本,然后手动选择、设置gdm3为默认显示管理器
sudo dpkg-reconfigure gdm3

        发现闪烁问题确实没有了。

        重启后没进入默认的桌面,通过ssh远程连接执行qt程序还是比较丝滑。

测试:

        发现修改了GDM3的配置文件/etc/gdm3/custom.conf 文件,取消了 WaylandEnable=false的注释后,执行 qt程序无法正常渲染图形。

        可能的原因是 环境变量  /etc/profile中没有正常export环境变量 export QT_QPA_PLATFORM=xcb。

        x11是显示服务器,xcb插件是接口,用于与x11服务器进行通信。

        经测试发现的确如此,我设置的是 linuxfb接口。linuxfb无需与x11服务器进行通信

屏幕撕裂原因

        系统桌面的应用和QT应用会有冲突。

        可能是QT界面和debian桌面系统抢占framebuffer导致。

解决方案:

       1. 关闭Linux桌面,用命令行启动Linux,这时运行qt程序就不会有问题。

       2. 不用交叉编译,直接在arm板上装编译环境,然后编译源程序。

关于Qt 4和Qt 5的环境变量区别:

  • Qt 4:使用-qws参数启动QWS服务器。

  • Qt 5:通过QT_QPA_PLATFORM环境变量选择平台插件(如offscreenlinuxfb等)

下面这俩

#关闭桌面
sudo init 3

#重启桌面
sudo init 5

init是系统初始化进程,其进程ID为1
init n代表切换运行级别到n
运行级别 0:关机(halt)。
运行级别 1:单用户模式(single-user mode),通常用于系统维护。
运行级别 2:多用户模式,但没有网络服务。
运行级别 3:多用户模式,带网络服务(multi-user mode with networking)。这是大多数服务器的默认运行级别。
运行级别 4:未定义,通常保留给用户自定义。
运行级别 5:图形用户界面(GUI)模式,通常用于桌面系统。
运行级别 6:重启(reboot)。

移植海康摄像头图像采集

        配置好运行环境后,报错

lckfb@192:~/work/RemoteControlDemo/build-RemoteControl-ARM_kits-Debug$ sudo ./RemoteControl 
hpr tls index{2}
*******XOpenDisplay Fail ******* 
loop[2] find 2 mac and 4 ip
Login failed, error code: 1
Login failed
段错误

        1、提示无法连接到x11服务器。

        这一步是因为海康SDK需要使用x11窗口管理器渲染视频流

        2、登录失败。

        这一步因为忘记配置本机ipv4的地址,导致和摄像头网口通信不成功导致。

解决:

考虑到x11渲染视频流的问题,尝试使用x11

        如果你需要在无桌面环境下运行 Qt 程序,可以通过 startx 启动一个最小化的 X11 环境,然后运行 Qt 程序。(该方法我尚未尝试)

        例如:

        startx -- /usr/bin/your_qt_application

        我直接使用泰山派默认的 lightdm管理器 + x11服务器,

        报错:

hpr tls index{2}
loop[2] find 2 mac and 5 ip
libGL error: failed to create dri screen
libGL error: failed to load driver: rockchip
libGL error: failed to create dri screen
libGL error: failed to load driver: rockchip
X Error of failed request: BadWindow (invalid Window parameter)
  Major opcode of failed request: 8 (X_MapWindow)
  Resource id in failed request: 0x1
  Serial number of failed request: 46
  Current serial number in output stream: 47
循环[2] 找到2个MAC地址和5个IP地址
libGL错误:无法创建dri屏幕
libGL错误:无法加载驱动:rockchip
libGL错误:无法创建dri屏幕
libGL错误:无法加载驱动:rockchip
X错误:请求失败:BadWindow(无效的窗口参数)
  请求失败的主要操作码:8(X_MapWindow)
  请求失败中的资源ID:0x1
  请求失败的序列号:46
  输出流中的当前序列号:47

        

x11和Xorg的关系

        X11 是一个网络透明的图形窗口系统协议,用于在计算机之间传输图形和用户输入(如鼠标和键盘操作)。是客户端-服务器架构。

        Xorg是基于x11协议的一种实现。

ubuntu当前显示管理器和显示服务器

1. 检查当前使用的显示服务器(X11 或 Wayland)

echo $XDG_SESSION_TYPE

2. 检查当前使用的显示管理器(LightDM 或 GDM3)

cat /etc/X11/default-display-manager

        我通过ssh连接开发板,查看当前的显示服务器,结果显示的是tty。

        表示当前的会话是一个终端会话,而不是图形会话。

名词解释

        DPI     缩放比例

        无边框透明背景透明窗口,随着缩放比例非整数倍数放大时的画面发生了露底、撕裂问题。

        根源在于Qt中的窗口,是不支持小数位的。

        升级QT6解决。

        ldd  ./application 可以查看应用缺失的依赖

相关文章:

  • 微信支付V3平台证书切换成公钥遇到的问题。【无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥】【 Illegal base64 character 2d】
  • 【CCF CSP-J 2023】一元二次方程
  • U-Net 与深度学习的完美结合:图像分割的高效解决方案
  • Windows 环境下配置多个不同版本的 Maven
  • Vue3+Vite创造路由
  • Kubernetes的Ingress 资源是什么?
  • 【综合实验】
  • docker修改镜像默认存储路径(基于页面迁移)
  • 跟着 Lua 5.1 官方参考文档学习 Lua (2)
  • 【HarmonyOS NEXT】获取正式应用签名证书的签名信息
  • 基于 Spring Boot + 微信小程序的短文写作竞赛管理系统设计与实现(源码+文档)
  • 《Python在数据可视化中的应用与实践》
  • 在nodejs中使用ElasticSearch(一)安装,使用
  • css主题色修改后会多出一个css吗?css怎么定义变量?
  • C++ day2
  • JVM深入理解
  • 网络安全技术pat实验 网络安全 实验
  • floodfill算法系列一>衣橱整理
  • GPT-SoVITS更新V3 win整合包
  • iOS进程增加内存上限的接口
  • 迪卡侬回应出售中国业务30%股份传闻:始终扎根中国长期发展
  • 日菲同意扩大安全合作,外交部:反对任何在本地区拉帮结派的做法
  • “铁血防守”制造8年最快丢球,恐惧中的阿森纳什么也做不了
  • 中青旅:第一季度营业收入约20.54亿元,乌镇景区接待游客数量同比减少6.7%
  • 巴西外长维埃拉:国际形势日益复杂,金砖国家必须发挥核心作用
  • 电话费被私改成48元套餐长达数年,投诉后移动公司退补600元话费