编写一个脚本,读取没有root用户权限的HID使用ID usb键盘发送的内容。
目的是映射扫描码/ HID id以及用于编写键盘配置工具的结果文字输入;如果用户使用dvorak布局或者Z可以输入文字ツ,则按键可以输入文字Y.
下面的代码片段在捕获扫描码方面做得很好(usb键盘发送隐藏使用ID,但它仍然捕获扫描码),但需要/ 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))
无论如何都没有特殊权限吗?
答案 0 :(得分:4)
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*
上游的键盘事件,没有一些权限就不可能。
在python中对XI2的支持很差并且使用它似乎需要使用C库或编写X客户端库。最新版本的python3-xlib确实支持它,但至少我找不到文档并理解二进制数据并不容易。
此博客文章提供了有关键盘事件生成过程的一些详细信息:https://seasonofcode.com/posts/internal-input-event-handling-in-the-linux-kernel-and-the-android-userspace.html
---- os space -------------
input_sync
将事件写入设备文件,例如/dev/input/event1
。 ---用户空间----
/dev/input/event*
如果我读到的是正确的并且已经正确阅读,/dev/input/event*
上游的任何内容都会在内核中发生,任务由设备驱动程序处理。