在ubuntu系统中,如何让其按下物理关机键时,系统不处理,但qt程序能检测到关机键按下的事件,并处理信号
要让 Ubuntu 系统在按下物理关机键时,系统不直接处理该事件,但让你的 Qt 程序能够检测到并处理关机键的按下事件,可以参考以下步骤:
1. 禁用系统对关机键的默认处理
Ubuntu 系统默认会捕获电源键的按下事件并执行关机操作。首先你需要禁用系统对该事件的默认响应:
打开文件 /etc/systemd/logind.conf:
找到(或添加)以下行,并将默认的 poweroff 改为 ignore:
HandlePowerKey=ignore
保存文件并退出编辑器。
2. 在 Qt 程序中捕获电源键事件
在禁用了系统对关机键的默认响应后,你可以在 Qt 程序中捕获电源键的事件。
Qt 本身不直接提供对硬件电源键事件的监听,但你可以通过监听 Linux 输入设备(如 /dev/input/event*)来捕获按键事件。使用 evdev 或其他低级别的输入事件库可以帮助你监听这些硬件事件。
一个常见的方案是使用 libevdev 库来读取设备事件。以下是集成步骤的简要说明:
2.1 安装依赖库
确保安装了 libevdev 库:
sudo apt-get install libevdev-dev
2.2 Qt 程序中使用 libevdev 监听电源键
你可以在 Qt 程序中通过 libevdev 来监听事件。以下是一个基本示例代码:
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
#include <libevdev/libevdev.h>
#include <fcntl.h>class PowerKeyListener : public QThread {Q_OBJECT
public:void run() override {struct libevdev *dev = NULL;int fd = open("/dev/input/event0", O_RDONLY|O_NONBLOCK); // 替换为电源键的事件文件if (fd < 0) {qWarning() << "无法打开设备文件";return;}int rc = libevdev_new_from_fd(fd, &dev);if (rc < 0) {qWarning() << "初始化 libevdev 失败";return;}qDebug() << "设备名:" << libevdev_get_name(dev);while (true) {struct input_event ev;rc = libevdev_next_event(dev, LIBEVDEV_READ_FLAG_NORMAL, &ev);if (rc == 0 && ev.type == EV_KEY && ev.code == KEY_POWER) {if (ev.value == 1) {emit powerKeyPressed();}}QThread::msleep(50); // 降低轮询频率}libevdev_free(dev);close(fd);}signals:void powerKeyPressed();
};int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);PowerKeyListener listener;QObject::connect(&listener, &PowerKeyListener::powerKeyPressed, [](){qDebug() << "电源键按下!";});listener.start();return a.exec();
}
2.3 确定电源键设备文件
不同设备的电源键事件文件可能不同,通常位于 /dev/input/event*。你可以使用 evtest 工具来找到电源键对应的事件文件:
安装 evtest:
sudo apt-get install evtest
运行 evtest 并选择电源键设备:
sudo evtest
观察哪个 /dev/input/eventX 文件与电源键按下对应,然后将此文件路径应用到你的 Qt 程序中。
相关文章:
在ubuntu系统中,如何让其按下物理关机键时,系统不处理,但qt程序能检测到关机键按下的事件,并处理信号
要让 Ubuntu 系统在按下物理关机键时,系统不直接处理该事件,但让你的 Qt 程序能够检测到并处理关机键的按下事件,可以参考以下步骤: 1. 禁用系统对关机键的默认处理 Ubuntu 系统默认会捕获电源键的按下事件并执行关机操作。首先你…...
先进制造aps专题二十六 基于强化学习的人工智能ai生产排程aps模型简介
基于强化学习的人工智能ai生产排程模型简介 人工智能ai能不能做生产排程? 答案是肯定的。 ai的算法分两类,一类是学习,一类是搜索。 而生产排程问题,它是一个搜索问题,本质上,它和下围棋是一样的 我们…...
各领域/行业硬件一览表
专班硬件装备制造agv小车、机械臂、PDA、服务器、大屏、扭矩传感器、温湿度检测仪、粉尘传感器、陀螺仪传感器、3D打印设备、在线质量检测仪器、新能源水表、电表、气表、汽表、服务器、大屏、温度传感器、压力传感器、光照度传感器、RTU医药化工温湿度传感器、压力传感器、流量…...
机器学习-SVM
线性感知机分类 支持向量机 线性感知机(Perceptron) 感知机是线性二值分类器。 注意:什么是线性?线性分割面就是,就是在分割面中,任意两个的连线也在分割面中,这个分割面,就是线…...
翻译器在线翻译:开启多语言交流新时代
随着国际交流、商务合作、文化交融以及互联网的飞速发展,人们对于跨越语言鸿沟的需求日益迫切。翻译工具成为了我们必备的一个工具,这篇文章我们一起来探讨一些好用的翻译器在线翻译工具吧。 1.在线福昕翻译 链接直达>>https://fanyi.pdf365.cn/…...
网络编程(10)——json序列化
十、day10 今天学习如何使用jsoncpp将json数据解析为c对象,将c对象序列化为json数据。jsoncp经常在网络通信中使用,也就是服务器和客户端的通信一般使用json(可视化好);而protobuf一般在服务器之间的通信中使用 json…...
基于FreeRTOS的STM32多功能手表设计
在智能穿戴设备迅速发展的今天,多功能手表因其便携性和实用性而受到广泛关注。本项目旨在设计一款基于FreeRTOS操作系统的STM32多功能手表,通过实时多任务处理,实现时间显示、多级菜单、万年历、模拟手电筒、温湿度显示、电子闹钟和设置等功能…...
18.Linux-配置DNF仓库
DNF仓库产生背景 在现实的场景中,我们经常要安装一些软件包,但由于现场不提供网络。 需要使用光盘或文件下载的方式去安装。 对于linux有两种离线安装方式:二进制文件安装和源码安装 其中二进制文件是比较简单的安装方式,不同的l…...
GeoPB:高效处理地理空间数据的Protobuf解决方案
在地理信息系统(GIS)和地理空间数据处理的领域,数据的交换和存储格式至关重要。随着技术的不断发展,如何高效、安全地处理和转换地理空间数据成为了一个核心问题。本文将详细介绍GeoPB——一个基于Protobuf(Protocol B…...
华为仓颉语言入门(6):if条件表达式
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 仓颉语言中的 if 表达式用于根据条件的值来决定是否执行相关代码逻辑。if 表达式有三种形式:单分支的 if 表达式、双分支的 if 表达式和嵌套的 if 表达式。 单分支的 if 表达式 单分支的 …...
openlayers中一些问题的解决方案
一、使用地图时可能会出现的需求 1、定位:需要将地图的中心视野,定位到研究区域的中心点; 2、地图蒙版:只研究特定区域,将其他部分区域用蒙层遮罩,突显重点; 3、变色:设置整体的地图…...
java通过redis完成幂等性操作
4 幂等 产生 “重复数据或数据不一致”( 假定程序业务代码没问题 ),绝大部分就是发生了重复的请求,重复请求是指"同一个请求因为某些原因被多次提交"。导致这个情况会有几种场景: 微服务场景,在…...
48 旋转图像
解题思路: \qquad 这道题同样需要用模拟解决,原地算法要求空间复杂度尽量小,最好为 O ( 1 ) O(1) O(1)。模拟的关键是找到旋转的内在规律,即旋转前后的位置坐标的变化规律。 \qquad 正方形矩阵类似洋葱,可以由不同大小…...
TDengine 签约青山钢铁,实现冶金全流程质量管控智能化
在不锈钢生产领域,企业面临着信息孤岛和数据分散的挑战,尤其在冶炼、连铸和轧钢等关键工艺以及能源管理上,这种现象导致生产要素(人、机、料、法、环)的分析管理模型难以全面、深入地实施。为了应对这一挑战࿰…...
__pycache__文件夹
__pycache__ 文件夹是 Python 在运行时自动生成的目录,用于存储已编译的字节码文件。这些字节码文件以 .pyc 扩展名结尾,用于加速程序的启动时间,因为不需要每次运行时都重新编译源代码。 主要特点 自动生成:__pycache__ 文件夹…...
利用 Local Data 导入文件到 OceanBase 的方法
背景 在很多传统方法中,数据的传输常依赖于csv格式。为了提高传输效率,属于同一张表的多个csv文件往往会被打包成gz文件进行传输。 当gz文件从上游传递到下游后,为了将其中的csv数据导入数据库,一种直接的做法是: 1…...
改变安全策略的五大实践
随着网络威胁形势的加剧,网络安全计划必须不断发展以保护组织的使命。 为了管理这种持续的网络安全发展,应遵循五项关键的安全计划变更管理实践: 1. 识别并吸引受安全风险影响的业务利益相关者 随着新的网络安全风险被发现,受影…...
在MacOS上安装MongoDB数据库
一、安装方法 1.1 安装包安装 首先,打开MongoDB 官网下载安装包,下载链接:https://www.mongodb.com/try/download/community。 根据自己的系统环境自行选择下载的版本。将下载好的 MongoDB 安装包解压缩,并将文件夹名改为 mon…...
负载均衡--会话保持失败原因及解决方案(五)
会话保持失败可能由多种因素导致,以下是一些主要原因及其解释: 一、服务器及网络问题 服务器故障: 服务器出现故障或不稳定,导致无法正确处理会话信息。这可能是由于硬件故障、网络问题或软件错误等引起的。网络问题:…...
24 Vue3之集成TailwindCSS
Tailwind CSS Tailwind CSS是一个由js编写的CSS 框架 他是基于postCss 去解析的 官网地址Tailwind CSS 中文文档 - Tailwind CSS - 只需书写 HTML 代码,无需书写 CSS,即可快速构建美观的网站。 | TailwindCSS中文文档 | TailwindCSS中文网 对于PostCSS…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
