在Linux下删除/重写/生成键盘事件
我想在
Linux下交付,拦截并生成键盘(make / break)事件,然后才能将它们传送到任何应用程序.更确切地说,我想检测关键事件流中的模式,并能够根据检测到的模式丢弃/插入事件到流中.
我在SO上看过一些相关的问题,但是: >要么他们只处理如何获得关键事件(关键记录器等),而不是如何操纵他们的传播(他们只听,但不拦截/生成). 小型DSL 我解释下面的问题,但为了使它更紧凑和易懂,首先是一个小的DSL定义. > A_:用于制作(按)键A. 问题描述 好吧,所以使用这种表示法,这里是我想要检测的模式以及我想在处理链中传递的事件. > A_,A ^ – > [A_,A ^]:探索.见上文,请注意发送发生在A ^上. (原则上,它是一个简单的状态机,可以在关键事件上实现,可以生成(多个)关键事件作为输出). 补充说明 >解决方案必须在打字速度上工作. 可能的解决方案和问题 所以基本问题是如何实现这一点. 我已经使用被动抓取(XGrabKey)和XSendEvent在窗口管理器中实现了一个解决方案.遗憾的是,被动抓取在这种情况下不起作用,因为它们在上面的第二种模式中没有正确捕获B ^.原因是转换的抓斗在A ^上结束并且不继续到B ^.如果仍然保持,则新的抓取转换为捕获B,但仅在约1秒后.否则,将普通B ^发送到应用程序.这可以用xev验证. 我可以将我的实现转换为使用主动抓取(XGrabKeyboard),但是如果窗口管理器一直在键盘上有活跃的抓取,我不确定对其他应用程序的影响. X文档将活动抓取称为侵入式并且是为短期使用而设计的.如果有人有这方面的经验并且长期积极争夺没有重大缺点,那么我认为这是一个解决方案. 除了窗口管理器(作为X客户端运行)之外,我愿意查看其他关键事件处理层.键盘驱动程序或映射是可能的,只要我可以用它们解决上述问题.这也意味着解决方案不必是单独的应用程序.我很高兴有一个驱动程序或内核模块为我做这个.请注意,我从未做过任何内核或驱动程序编程,所以我会很感激一些好的资源. 感谢您的任何指示! 解决方法
使用XInput2使设备(键盘)浮动,然后在设备上监视KeyPress和KeyRelease事件,使用XTest重新生成KeyPress& KeyRelease事件.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |