如何从X11监视键盘事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从X11监视键盘事件相关的知识,希望对你有一定的参考价值。
我知道其中有一些,但很多答案总是有很多但是,你不应该这样做。
我要做的是有一个后台程序,可以监视来自X11
的键盘事件。这是在一个嵌入式设备上,它将有一个主要的应用程序基本上运行在像kiosk模式。我们希望有一个后台应用程序管理一些事情,可能是一个后门钩。但这个应用程序通常不会有焦点。
我不能使用主应用程序,因为如果主应用程序失败,或者做一些开发类型的东西绕过主应用程序,它部分存在故障保护。
我发现的最好的问题是几年前,所以我不确定它是如何更新的。使用Windows非常容易。
X KeyPress/Release events capturing irrespective of Window in focus
答案
这样做的正确方法是使用Xlib。使用这个库你可以编写如下代码:
while (1) {
XNextEvent(dis, &report);
switch (report.type) {
case KeyPress:
if (XLookupKeysym(&report.xkey, 0) == XK_space) {
fprintf (stdout, "The space bar was pressed.
");
}
break;
}
}
/*This event loop is rather simple. It only checks for an expose event. XNextEvent waits for an event to occur. You can use other methods to get events, which are documented in the manual page for XNextEvent.*/
/*Now you will learn how to check if an event is a certain key being pressed. The first step is to put case KeyPress: in your switch for report.type. Place it in a similar manner as case Expose.*/
您也可以在映射到键盘的特殊设备文件上使用poll或select。在我的情况下是/dev/input/event1
。
如果您对映射到键盘的特殊文件有疑问,请阅读文件qazxsw poi(搜索单词qazxsw poi)。
在这里您有另一个感兴趣的链接:/var/log/Xorg.0.log
以上是关于如何从X11监视键盘事件的主要内容,如果未能解决你的问题,请参考以下文章