当前位置: 首页 > 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 5init是系统初始化进程,其进程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: 0x1Serial number of failed request: 46Current 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 可以查看应用缺失的依赖

相关文章:

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

总结: 交叉编译到 泰山派rk3566跑调海康摄像头的qt应用程序失败了。 X11无效窗口。 移植QT注意 屏幕分辨率不要改。改了执行QT的时候,framebuffer识别不出设备。 命令行安装QT-Creator sudo install 类似的指令安装Qt-Creator时,可能找不到编…...

关于Java 反射的简单易懂的介绍

目录 #0.总览 #1. 类的反射 ①介绍 ②获取 ③作用 获取构造函数: 创建实例: 字段操作: 方法操作: 获取修饰符: #2.总结 #0.总览 反射,官方是这样介绍它的: Reflection is a …...

市场趋势中突破确认的多维度判断方法

波动率突破策略是众多交易者广泛采用的重要交易策略之一。而在这一策略中,准确判断突破是否有效,是决定交易成败的关键环节。仅仅依据单一因素来确认突破,往往会使交易者陷入误判的困境,导致不必要的损失。因此,采用多…...

网络空间安全(2)应用程序安全

前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...

【MyBatis】CRUD、配置解析、ResultMap、分页实现

目录标题 1、Mybatis简介1.1、什么是MyBatis1.2、持久化1.3、持久层1.4、为什么需要MybatisMyBatis的优点 2.1、代码演示搭建实验数据库导入MyBatis相关 jar 包 03、CRUD操作3.1、namespace3.2、select3.3、insert3.4、update3.5、delete 04、MyBatis配置解析4、配置解析4.3、m…...

Linux系统编程之高级信号处理

概述 在前一篇文章中,我们介绍了signal函数、sigaction函数等基本的信号处理方法。在本篇中,我们将介绍信号处理的一些高级用法,包括:阻塞与解除阻塞、定时器等。 阻塞与解除阻塞 有时候,我们不希望某个信号立即被处理…...

深度学习驱动的车牌识别:技术演进与未来挑战

一、引言 1.1 研究背景 在当今社会,智能交通系统的发展日益重要,而车牌识别作为其关键组成部分,发挥着至关重要的作用。车牌识别技术广泛应用于交通管理、停车场管理、安防监控等领域。在交通管理中,它可以用于车辆识别、交通违…...

钉钉快捷免登录 通过浏览器打开第三方系统,

一、钉钉内跳转至浏览器的实现 使用钉钉JSAPI的跳转接口 在钉钉内通过dd.biz.navigation.openLink方法强制在系统浏览器中打开链接。此方法需在钉钉开发者后台配置应用权限,确保应用具备调用该API的资格37。 示例代码: dd.ready(() > {dd.biz.navigat…...

力扣——杨辉三角

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 直接找规律&#xff0c;按照数学的思路来 每一行的列最大索引 < 行索引 实现代码&#xff1a; class Solution {public List<List<Integer>> generate(int numRows) {List<List<In…...

stm32108键C-B全调性_动态可视化乐谱钢琴

108键全调性钢琴 一 基本介绍1 项目简介2 实现方式3 项目构成 二 实现过程0 前置基本外设驱动1 声音控制2 乐谱录入&基础乐理3 点阵屏谱点动态刷新4 项目交互控制5 录入新曲子过程 三 展示&#xff0c;与链接视频地址1 主要功能函数一览2 下载链接3 视频效果 一 基本介绍 …...

mysql之规则优化器RBO

文章目录 MySQL 基于规则的优化 (RBO)&#xff1a;RBO 的核心思想&#xff1a;模式匹配与规则应用RBO 的主要优化规则查询重写 (Query Rewrite) / 查询转换 (Query Transformation)子查询优化 (Subquery Optimization) - RBO 的重中之重非相关子查询 (Non-Correlated Subquery)…...

MySQL数据库——表的约束

1.空属性&#xff08;null/not null&#xff09; 两个值&#xff1a;null&#xff08;默认的&#xff09;和not null&#xff08;不为空&#xff09; 数据库默认字段基本都是字段为空&#xff0c;但是实际开发时&#xff0c;尽可能保证字段不为空&#xff0c;因为数据为空没办法…...

vue2.x 中子组件向父组件传递数据主要通过 $emit 方法触发自定义事件方式实现

在 Vue 2.x 中&#xff0c;子组件向父组件传递数据主要通过 自定义事件 的方式实现。具体步骤如下&#xff1a; 1. 子组件通过 $emit 触发事件 子组件可以使用 $emit 方法触发一个自定义事件&#xff0c;并将数据作为参数传递给父组件。 语法&#xff1a; this.$emit(事件名…...

洛谷 P1102 A-B 数对(详解)c++

题目链接&#xff1a;P1102 A-B 数对 - 洛谷 1.题目分析 2.算法原理 解法一&#xff1a;暴力 - 两层for循环 因为这道题需要你在数组中找出来两个数&#xff0c;让这两个数的差等于定值C就可以了&#xff0c;一层for循环枚举A第二层for循环枚举B&#xff0c;求一下看是否等于…...

python用 PythonNet 从 Python 调用 WPF 类库 UI 用XAML

pythonnet 是pythonhe.net通用的神器不多介绍了. 这次这基本上跟python没有关系了. 和winform一样先导包 import clr clr.AddReference("PresentationFramework.Classic, Version3.0.0.0, Cultureneutral, PublicKeyToken31bf3856ad364e35") clr.AddReference(&…...

C++——list模拟实现

目录 前言 一、list的结构 二、默认成员函数 构造函数 析构函数 clear 拷贝构造 赋值重载 swap 三、容量相关 empty size 四、数据访问 front/back 五、普通迭代器 begin/end 六、const迭代器 begin/end 七、插入数据 insert push_back push_front 八、…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-utils.py

utils.py ultralytics\data\utils.py 目录 utils.py 1.所需的库和模块 2.def img2label_paths(img_paths): 3.def get_hash(paths): 4.def exif_size(img: Image.Image): 5.def verify_image(args): 6.def verify_image_label(args): 7.def visualize_image_ann…...

Linux 内核 RDMA CM 模块分析:drivers/infiniband/core/cma.c

一、引言 随着高性能计算和大数据处理需求的不断增长,远程直接内存访问(RDMA)技术在数据中心和高性能计算领域得到了广泛应用。RDMA 允许数据直接在不同系统的内存之间传输,而无需经过 CPU 和操作系统的干预,从而显著提高了数据传输效率和系统性能。Linux 内核中的 RDMA …...

Flask flash() 消息示例

目录 安装 Flask 入门:Flask flash() 基本示例 进阶:使用 Flask-WTF Flash 登录结果消息 详解:get_flashed_messages() 详解:flash() 消息的完整生命周期 Flask 提供 flash() 用于向 用户传递临时消息,通常用于: • 表单提交成功或失败 • 用户登录、注册、退出提…...

ImGui 学习笔记(三)—— 隐藏主窗口窗口关闭检测

ImGui 的主窗口是平台窗口&#xff0c;默认是可见的&#xff0c;这会影响视觉效果。那么怎么隐藏 ImGui 的主窗口呢&#xff1f; 这很简单&#xff0c;但是需要针对后端做一些修改。 本文仅介绍在 glfwopengl3 和 win32dx11 两种实现上如何修改。 在 win32dx11 实现上&#…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...