基于X11协议的Linux快捷键扩展

  • 一、X11协议
  • 二、实例
    • 1. 程序代码
    • 2.Makefile
  • 三、总结

一、X11协议

  • X Window System,简称X或X11,类Unix系统的窗口系统,X11协议是一种C/S的协议。
  • X11相对Wayland比较老旧,但至今其使用范围依然庞大。
  • X.Org建议使用GTK+或Qt进行开发,本文直接使用Xlib C进行演示。

二、实例

1. 程序代码

本例使用宏定义LOG来实现日志记录,运行时捕获释放的Ctrl+Shift+Z来发送一条桌面通知。
主要使用的方法为:
XOpenDisplay:初始化显示
XKeysymToKeycode:获取键值
XGrabKey:绑定按键
XPending:等待事件(阻塞)
XNextEvent:取事件

/********************************************************* https://www.x.org/releases/current/doc/libX11/libX11/libX11.html*******************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <time.h>#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>// 日志记录
#define LOG(format, ...)                                \
{                                                       \printf(format, ##__VA_ARGS__);                      \printf("\n");                                       \char buffer[26];                                    \time_t timeval = time(NULL);                        \struct tm* tm_info = localtime(&timeval);           \strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info); \FILE *log = fopen("log.txt","a");                   \fprintf(log,"%s : "format"\n",buffer,##__VA_ARGS__);\fclose(log);                                        \
}// 按键处理
void handleShortKey(XKeyEvent xkey)
{LOG("%s","Key has been press and release");system("notify-send Hello");
}int main()
{// 初始化Display * display = XOpenDisplay(NULL);if(display == NULL){LOG("Unable to open X display\n");}// 绑定按键XSync(display, 0);for (int screen = 0; screen < ScreenCount (display); screen++){Window grab_window = RootWindow (display, screen);LOG("Current screen %d, current window %ld\n", screen, grab_window);KeyCode customKeyCode = XKeysymToKeycode(display, XK_Z);uint modifiers = ControlMask | ShiftMask;XGrabKey(display, customKeyCode, modifiers,grab_window, False, GrabModeAsync, GrabModeAsync);}XSync(display, 0);// 事件循环while (True){XEvent event;Bool matched = False;while (XPending(display) || (!matched)) {XNextEvent(display, &event);switch (event.type) {case KeyPress:LOG("KeyPress");break;case KeyRelease:LOG("KeyRelease");handleShortKey(event.xkey);matched = True;break;default:break;}}}XCloseDisplay(display);return 0;
}

2.Makefile

all:gcc -Wall *.c -o xHotKeyMgr  -I. -lX11clean:rm -f xHotKeyMgr

三、总结

基于X11协议开发的快捷键管理可以避免热键冲突,使用Xlib开发API相对复杂,难度较大,建议按照官方推荐使用开发套件。

基于X11协议的Linux快捷键管理相关推荐

  1. iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法

    主权项: 1.一种基于IIC协议的Linux操作系统与裸机通信的方法,其特征在于,包括如下步骤:步骤S1,对采用Linux系统的多个硬件和裸机同时挂载在总线上,包括:配置一个主机设备和多个从机设备,每 ...

  2. Linux远程管理协议(RFB、RDP、Telnet和SSH)

    提到远程管理,通常指的是远程管理服务器,而非个人计算机.个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式. 远程管理,实际上就是计算机(服务器)之 ...

  3. 基于pxe技术实现linux自动安装原理,网络安装Linux的技术原理分析及实现

    网络安装Linux的技术原理分析及实现 李怀刚;邱建新 [期刊名称]<计算机应用与软件> [年(卷),期]2006(023)009 [摘要]对自动化Linux网络安装所使用的相关技术原理进 ...

  4. Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

    目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...

  5. 【Linux远程管理】RDP协议远程管理

    RDP(Remote Desk Protocol).远程桌面协议,常用的Windows操作系统的远程桌面管理就就是基于该协议. 而在Linux下,我们也是可以找到开源的rdp server的,这就是x ...

  6. 基于C语言开发Linux平台的协议分析软件

    资源下载地址:https://download.csdn.net/download/sheziqiong/85946240 资源下载地址:https://download.csdn.net/downl ...

  7. linux 7 打开22端口,Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议

    SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专 ...

  8. Linux中基于snmp协议的mrtg安装及使用

    snmp 简介 简单网络管理协议,基于这个协议轮询收集数据,每隔5分钟控制端向被控制端收集MIB数据 如果被控制端突然预警,中断轮询,主动发出警报,通过162端口发出报告 原理 被控制端安装snmp管 ...

  9. Linux远程管理协议相关知识介绍

    一.什么是远程管理 远程管理,实际上就是计算机(服务器)之间通过网络进行数据传输(信息交换)的过程,与浏览器需要 HTTP 协议(超文本传输协议)浏览网页一样,远程管理同样需要远程管理协议的底层支持. ...

最新文章

  1. 图片滤镜算法原理简单讲解
  2. 计算器 abacus 技术文档之二----初步设计
  3. code iban 是有什么组成_EAN-128码和Code-128码的区别
  4. 使用OSHI 检索系统信息,超牛逼、超级秀、超级巴适!!快来看看吧!不然你会后悔的!!666
  5. 【dlib库】进行人脸检测+人脸关键点检测+人脸对齐
  6. mysql限制登录次数_mysql会话控制限制登录次数(connection_control插件)
  7. OpenShift 4 - Pod的亲和性/反亲和性
  8. Python字符串常用操作方法
  9. cmd 命令 之 dir 之 强化使用
  10. expect实现自动通过堡垒机登陆
  11. 学习指南:零基础java入门教程(入门篇)
  12. 30秒让你有效的使用天池实验室资源
  13. 2、网站重构之本地映射外网域名
  14. c语言编译器提示隐式声明,在C中使用“隐式声明功能”警告有什么含义?
  15. Moyqv 唐纳.卡兰 cnsl
  16. 创建office vsto外接程序,开发wps插件,配置启动wps进行调试
  17. 【计算机网络】笔记及考点
  18. JSD-2204-Java语言基础-运算符-分支结构-Day03
  19. 万能PDF格式转换器下载
  20. 爬取链家网站中的租房信息

热门文章

  1. OllyDbg 官网及下载地址
  2. 电子商务之数据库分析(二)
  3. 访问学者申请美国签证的资金证明怎么开?
  4. Andersen Global在莫桑比克扩展业务
  5. C语言课设 航空订票系统
  6. 笔记 | 绝对值不等式
  7. 当BiocManager废了
  8. 借助幕课网的资源重新梳理下PHP基础知识,用以备忘。
  9. 12.2烤仔建工×MetaEstate | K歌之王在元宇宙的秘密据点
  10. 【BOOST C++字串专题11】Boost.Spirit(三)