编写一个脚本来读取HID usage ids usb键盘在没有root用户权限的情况下发送的内容。在
其目的是映射scancode/HID id和生成的文本输入,以便编写键盘配置工具;如果用户使用的是dvorak布局,则按T键可以输入文本Y,或者Z可以输入文本ツ。在
下面的代码片段在捕获scancode方面做得很好(usb键盘发送hid用法id,但它仍然捕获scancode),但是需要/dev/input/*的读取权限,这并不理想。在
from evdev import *
dev = InputDevice('/dev/input/event5')
print(dev)
for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
print(categorize(event))
在没有特殊权限的情况下,还有什么可以做的吗?在
结论:
X输入扩展2(XI2)提供对RawEvents的访问;尽管我在RawKeyPress事件中找不到我需要的东西:Capture XI2 RawKeyPress event and interpreting it with python
将X11键码转换回扫描码的可能性是一半。在
不详细,但我在这里的注释:How to translate X11 keycode back to scancode or hid usage id reliably
至于捕获
/dev/input/event*
上游的键盘事件,没有某些权限是不可能的。在XI2在python中的支持很差
,使用它似乎需要使用C库或编写X客户机库。最新版本的python3xlib确实支持它,但至少我找不到文档,理解二进制数据并不容易。在关键事件生成链:
这篇博文有一些关于键盘事件生成过程的细节:https://seasonofcode.com/posts/internal-input-event-handling-in-the-linux-kernel-and-the-android-userspace.html
操作系统空间-
input_sync
将事件写入设备文件,如/dev/input/event1
。在-用户空间
/dev/input/event*
如果我读到的是正确的,并且读得对,
/dev/input/event*
的任何上游都会在内核中发生,任务由设备驱动程序处理。在相关问题 更多 >
编程相关推荐