linux 使用Xcb监听键盘鼠标输入
前言在现代Linux桌面开发中高效、低延迟的输入事件处理至关重要。XCB作为X11协议的现代化接口不仅提供更优的性能还通过其无状态、异步的设计为输入监听带来了革命性的改进。本文将深入探讨如何使用XCB实现高性能的全局键盘鼠标输入监听构建响应灵敏的桌面应用。X11输入事件系统架构略基础键鼠事件监听XCB原生事件同样不支持键盘鼠标的全局监听因此同样选择通过额外的扩展来实现监听。2.1 键码解析由于XCB库没有提供完整的键盘映射函数而事件KeyCode和修饰符状态与X11完全一样因此直接使用X11的转换函数即可。高级键鼠事件监听3.1 XInput扩展intmain(){xcb_connection_t*connxcb_connect(NULL,NULL);if(xcb_connection_has_error(conn)){fprintf(stderr,XCB连接失败\n);return-1;}xcb_prefetch_extension_data(conn,xcb_input_id);autorecord_extxcb_get_extension_data(conn,xcb_input_id);if(!record_ext||!record_ext-present){fprintf(stderr,XInput 扩展不可用\n);return-1;}autorootxcb_setup_roots_iterator(xcb_get_setup(conn)).data-root;structxcb_input_event_mask_extend{xcb_input_event_mask_t header;unsignedmask;}event_mask{XCB_INPUT_DEVICE_ALL,1,XCB_INPUT_XI_EVENT_MASK_KEY_PRESS|XCB_INPUT_XI_EVENT_MASK_BUTTON_PRESS};xcb_input_xi_select_events(conn,root,1,(constxcb_input_event_mask_t*)event_mask);xcb_flush(conn);while(1){std::unique_ptrxcb_generic_event_tevent(xcb_wait_for_event(conn));if(event-response_type!XCB_GE_GENERIC){continue;}switch(((xcb_ge_generic_event_t*)event.get())-event_type){caseXCB_KEY_PRESS:{autokey_event(xcb_input_key_press_event_t*)event.get();printf( Mouse Button Press \n);printf( Button: %d\n,key_event-detail);printf( Root Coordinates: (%f, %f)\n,key_event-root_x16,key_event-root_y16);}break;caseXCB_BUTTON_PRESS:{autobtn_event(xcb_input_button_press_event_t*)event.get();printf( Key Press \n);printf( Key: %d\n,btn_event-detail);printf( Mask: %d\n,btn_event-mods.effective);}break;}}xcb_disconnect(conn);return0;}3.2 Record扩展intmain(){xcb_connection_t*connectionxcb_connect(NULL,NULL);if(xcb_connection_has_error(connection)){fprintf(stderr,XCB连接失败\n);return-1;}xcb_prefetch_extension_data(connection,xcb_record_id);constxcb_query_extension_reply_t*record_extxcb_get_extension_data(connection,xcb_record_id);if(!record_ext||!record_ext-present){fprintf(stderr,RECORD 扩展不可用\n);return-1;}xcb_record_client_spec_t clientsXCB_RECORD_CS_ALL_CLIENTS;xcb_record_context_t contextxcb_generate_id(connection);xcb_record_range_t range;memset(range,0,sizeof(range));range.device_events.firstXCB_KEY_PRESS;range.device_events.lastXCB_BUTTON_PRESS;xcb_void_cookie_t create_cookiexcb_record_create_context(connection,context,0,1,1,clients,range);xcb_flush(connection);xcb_record_enable_context_cookie_t enable_cookiexcb_record_enable_context(connection,context);std::unique_ptrxcb_record_enable_context_reply_treply;while(1){reply.reset(xcb_record_enable_context_reply(connection,enable_cookie,NULL));uint8_t*dataxcb_record_enable_context_data(reply.get());intlenxcb_record_enable_context_data_length(reply.get());xcb_generic_event_t*event(xcb_generic_event_t*)data;while((uint8_t*)eventdatalen){switch(event-response_type~0x80){caseXCB_BUTTON_PRESS:{autobtn_event(xcb_button_press_event_t*)event;printf( Mouse Button Press \n);printf( Button: %d\n,btn_event-detail);printf( Root Coordinates: (%f, %f)\n,btn_event-root_x,btn_event-root_y);}break;caseXCB_KEY_PRESS:{autokey_event(xcb_key_press_event_t*)event;printf( Key Press \n);printf( Key: %d\n,key_event-detail);printf( Mask: %d\n,key_event-state);}break;}event1;}}xcb_disconnect(connection);return0;}结语虽然XInput和Record都是同步阻塞的但是XInput直接调用xcb_wait_for_event等待事件到来而Record则依赖底层的xcb_wait_for_reply响应请求。由于XInput可以通过xcb_send_event模拟事件来唤醒xcb_wait_for_event而xcb_wait_for_reply目前暂未找到合适的方法因此更推荐使用XInput。

相关新闻

无人机视角农村房屋建筑损伤长植物返潮裂缝检测数据集VOC+YOLO格式1304张5类别

无人机视角农村房屋建筑损伤长植物返潮裂缝检测数据集VOC+YOLO格式1304张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1304标注数量(xml文件个数):1304标注数量(txt文件个数):1304标注类别…

2026/7/6 5:37:00 阅读更多 →
ManageEngine在阿联酋设立数据中心强化数据主权承诺

ManageEngine在阿联酋设立数据中心强化数据主权承诺

ManageEngine,作为Zoho Corporation旗下的企业IT管理部门,通过在阿联酋(UAE)推出数据中心,进一步强化了对中东地区的长期承诺。此举旨在解决日益增长的数据主权、监管合规和网络安全方面的担忧。ManageEngine首席执行官…

2026/7/6 5:43:09 阅读更多 →
真香警告!RAG技术让大模型“知识库“实时更新,小白也能变大神

真香警告!RAG技术让大模型“知识库“实时更新,小白也能变大神

一、引言:大模型的“致命痛点”,RAG来救场 1.1大模型的“尴尬时刻”:我们都遇到过的坑 家人们,用大模型的时候,是不是经常被这几个问题搞崩溃? 问它 2025 年的最新热点,它像个 “穿越者”&am…

2026/7/6 5:44:40 阅读更多 →

最新新闻

PyTorch 2.x 模型量化实战:3种模式(动态/静态/QAT)精度与速度对比

PyTorch 2.x 模型量化实战:3种模式(动态/静态/QAT)精度与速度对比

PyTorch 2.x 模型量化实战:动态/静态/QAT模式精度与速度深度评测在移动端和边缘计算场景中,模型部署常面临算力与内存的双重约束。PyTorch 2.x提供的量化工具链能将FP32模型压缩为INT8格式,实现4倍存储节省和2-4倍推理加速。本文将基于ResNet…

2026/7/7 7:03:54 阅读更多 →
Day 003:Prompt 不是玄学,写好工业级 Agent 指令的稳定框架

Day 003:Prompt 不是玄学,写好工业级 Agent 指令的稳定框架

系列: 100 天系统学习 AI Agent 开发 当前阶段: 01 - Agent 基础与环境搭建 今日目标: 彻底搞懂 Agent System Prompt 的核心骨架(角色、目标、边界、工具规则、输出格式、异常处理)。 标签: AI Agent 大模…

2026/7/7 7:01:54 阅读更多 →
LED关键参数实战选型指南:5个核心指标决定照明质量与寿命

LED关键参数实战选型指南:5个核心指标决定照明质量与寿命

LED关键参数实战选型指南:5个核心指标决定照明质量与寿命1. 光通量与发光效率:照明效果的经济学光通量(单位:流明,lm)是衡量LED光源总发光量的基础指标。在商业照明项目中,我们曾遇到一个典型案…

2026/7/7 7:01:54 阅读更多 →
QQ音乐解析技术深度解析:逆向工程与API架构设计

QQ音乐解析技术深度解析:逆向工程与API架构设计

QQ音乐解析技术深度解析:逆向工程与API架构设计 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic 技术挑战与行业痛点 在数字音乐版权保护日益严格的今天,音乐平台API接口的封闭性给开发…

2026/7/7 6:55:51 阅读更多 →
06 Lottery Ticket Hypothesis 详解:稀疏子网络为何能中奖?

06 Lottery Ticket Hypothesis 详解:稀疏子网络为何能中奖?

一、论文基本信息 论文名称:The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks 作者:Jonathan Frankle, Michael Carbin 会议:ICLR 2019 论文链接:https://openreview.net/forum?idrJl-b3RcF7 arXiv 链…

2026/7/7 6:53:51 阅读更多 →
腾讯云TBDS面向AI时代的多模态智算平台,助力企业AI转型

腾讯云TBDS面向AI时代的多模态智算平台,助力企业AI转型

// TBDS 多模智算平台系列 //随着多模态大模型快速演进,企业在AI基础设施层面面临异构算力管理复杂、数据处理链路冗长、训练推理资源割裂浪费等核心挑战。腾讯云TBDS基于Ray构建多模态数据智算平台,支持GPU/CPU等异构资源统一调度,把多模数…

2026/7/7 6:53:51 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻