ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c-在Linux上使用X11抢占特定键上的事件

2019-11-05 16:01:31  阅读:229  来源: 互联网

标签:linux c-4 x11


我正在用C编写一个程序,以在运行Linux发行版的MacBook Pro上从OS X实现键盘背光功能.到目前为止,它会在启动时打开背光,并且如果在20秒钟内未注册任何键盘和鼠标事件,它将关闭背光,当然,在注册事件时会再次打​​开背光.我需要程序做的下一件事是捕获键盘上的背光上/下键的按键,但是我不确定该如何处理.

我目前正在使用XScreenSaverQueryInfo来获取键盘和鼠标事件的空闲时间,因此使用X11 API的方法是可以的.我做了很多谷歌搜索,但还没有找到我确定要继续的方法.我发现的许多方法存在的问题是,它们使用键码来标识键,但是我认为这不是可行的解决方案,因为该程序应适用于任何可用的键盘布局.

对我应该使用的方法和API有任何想法吗?什么才是最好的?

问候,

解决方法:

正常的方法是使用XGrabKey().它使用键码,但是您不会对键码进行硬编码,可以通过XKeysymToKeycode()获得.为了更正确,您还希望在获得MappingNotify(XMappingEvent)时重做抓取. (请注意,MappingNotify,而不是MapNotify.)如果这些键没有键符-可能不是旧的X版本上的键符,但是希望新的X.org版本有一个键符-那么您只需对键码进行硬接线即可.它不会非常健壮或可移植,但可能适用于具有相同硬件模型的Linux上的每个人.

请准备好全局获取键,因此,如果您尝试XGrabKey()并且其他东西已经获取了该键,您将收到X错误-默认情况下退出该程序. XGrabKey()的另一个怪癖是它使用精确的修饰符集来获取键.例如,要同时使用NumLock和不使用NumLock,都需要抓取两次.查看Global Hotkey with X11/Xlib

在普通的Linux安装程序中(如果您想在上游项目中获得类似的功能),桌面环境不希望有很多单独的应用程序在争夺按键并出错.因此,将有一些中央协调点,例如窗口管理器或特殊的守护程序可能会执行所有键绑定,并根据需要将命令转发给其他进程.因此,如果您尝试将功能默认集成到发行版中,那么您可能希望考虑修补处理此类特殊键的相同上游代码.

要注意的另一件事是Xkb API,它复杂得多. Xkb有一些可以弯腰的方式来获取密钥,但是我不知道采用这种方式有什么好处.

标签:linux,c-4,x11
来源: https://codeday.me/bug/20191105/1996047.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有