基于X11协议的Linux快捷键管理
基于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快捷键管理相关推荐
- iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法
主权项: 1.一种基于IIC协议的Linux操作系统与裸机通信的方法,其特征在于,包括如下步骤:步骤S1,对采用Linux系统的多个硬件和裸机同时挂载在总线上,包括:配置一个主机设备和多个从机设备,每 ...
- Linux远程管理协议(RFB、RDP、Telnet和SSH)
提到远程管理,通常指的是远程管理服务器,而非个人计算机.个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式. 远程管理,实际上就是计算机(服务器)之 ...
- 基于pxe技术实现linux自动安装原理,网络安装Linux的技术原理分析及实现
网络安装Linux的技术原理分析及实现 李怀刚;邱建新 [期刊名称]<计算机应用与软件> [年(卷),期]2006(023)009 [摘要]对自动化Linux网络安装所使用的相关技术原理进 ...
- Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享
目录 为什么系统软件人员要深入了解cache? cache一致性协议 神马是MESI协议? MESI的操作 MESI状态图 演示:初始化状态为I的cache line 当本地CPU的缓存行状态为I时, ...
- 【Linux远程管理】RDP协议远程管理
RDP(Remote Desk Protocol).远程桌面协议,常用的Windows操作系统的远程桌面管理就就是基于该协议. 而在Linux下,我们也是可以找到开源的rdp server的,这就是x ...
- 基于C语言开发Linux平台的协议分析软件
资源下载地址:https://download.csdn.net/download/sheziqiong/85946240 资源下载地址:https://download.csdn.net/downl ...
- linux 7 打开22端口,Linux(例如CentOS 7)打开TCP 22端口,基于SSH协议
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定:SSH 为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专 ...
- Linux中基于snmp协议的mrtg安装及使用
snmp 简介 简单网络管理协议,基于这个协议轮询收集数据,每隔5分钟控制端向被控制端收集MIB数据 如果被控制端突然预警,中断轮询,主动发出警报,通过162端口发出报告 原理 被控制端安装snmp管 ...
- Linux远程管理协议相关知识介绍
一.什么是远程管理 远程管理,实际上就是计算机(服务器)之间通过网络进行数据传输(信息交换)的过程,与浏览器需要 HTTP 协议(超文本传输协议)浏览网页一样,远程管理同样需要远程管理协议的底层支持. ...
最新文章
- 图片滤镜算法原理简单讲解
- 计算器 abacus 技术文档之二----初步设计
- code iban 是有什么组成_EAN-128码和Code-128码的区别
- 使用OSHI 检索系统信息,超牛逼、超级秀、超级巴适!!快来看看吧!不然你会后悔的!!666
- 【dlib库】进行人脸检测+人脸关键点检测+人脸对齐
- mysql限制登录次数_mysql会话控制限制登录次数(connection_control插件)
- OpenShift 4 - Pod的亲和性/反亲和性
- Python字符串常用操作方法
- cmd 命令 之 dir 之 强化使用
- expect实现自动通过堡垒机登陆
- 学习指南:零基础java入门教程(入门篇)
- 30秒让你有效的使用天池实验室资源
- 2、网站重构之本地映射外网域名
- c语言编译器提示隐式声明,在C中使用“隐式声明功能”警告有什么含义?
- Moyqv 唐纳.卡兰 cnsl
- 创建office vsto外接程序,开发wps插件,配置启动wps进行调试
- 【计算机网络】笔记及考点
- JSD-2204-Java语言基础-运算符-分支结构-Day03
- 万能PDF格式转换器下载
- 爬取链家网站中的租房信息