Python 在linux中是否可以在没有root用户权限的情况下捕获HID键盘事件 我想要什么
编写一个脚本,读取usb键盘在没有root用户权限的情况下发送的内容 其目的是映射扫描码/HID id和用于编写键盘配置工具的结果文字输入;如果用户使用的是dvorak布局,则T键可输入文字Y,或Z键可输入文字ツ. 下面的代码片段在捕获扫描代码方面做得很好(usb键盘发送hid使用id,但它仍然捕获扫描代码),但需要/dev/input/*的读取权限,这并不理想Python 在linux中是否可以在没有root用户权限的情况下捕获HID键盘事件 我想要什么,python,linux,Python,Linux,编写一个脚本,读取usb键盘在没有root用户权限的情况下发送的内容 其目的是映射扫描码/HID id和用于编写键盘配置工具的结果文字输入;如果用户使用的是dvorak布局,则T键可输入文字Y,或Z键可输入文字ツ. 下面的代码片段在捕获扫描代码方面做得很好(usb键盘发送hid使用id,但它仍然捕获扫描代码),但需要/dev/input/*的读取权限,这并不理想 from evdev import * dev = InputDevice('/dev/input/event5') print(d
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事件中找不到我需要的东西:
将X11键码转换回扫描码的可能性只有一半
不详细,但我在这里对其进行了说明:
至于捕获/dev/input/event*
上游的键盘事件,没有一些权限是不可能的
python中的XI2支持很差,使用它似乎需要使用C库或编写X客户机库。python3xlib的最新版本确实支持它,但至少我找不到文档,理解二进制数据并不容易
关键事件生成链:
这篇博文有一些关于键盘事件生成过程的细节:----操作系统空间----------------
input\u sync
将事件写入设备文件,如/dev/input/event1
李>
---用户空间--
/dev/input/event*
/dev/input/event*
上游的任何事情都会在内核中发生,任务由设备驱动程序处理。结论:
X输入扩展2(XI2)提供对RawEvents的访问;虽然我在RawKeyPress事件中找不到我需要的东西:
将X11键码转换回扫描码的可能性只有一半
不详细,但我在这里对其进行了说明:
至于捕获/dev/input/event*
上游的键盘事件,没有一些权限是不可能的
python中的XI2支持很差,使用它似乎需要使用C库或编写X客户机库。python3xlib的最新版本确实支持它,但至少我找不到文档,理解二进制数据并不容易
关键事件生成链:
这篇博文有一些关于键盘事件生成过程的细节:----操作系统空间----------------
input\u sync
将事件写入设备文件,如/dev/input/event1
李>
---用户空间--
/dev/input/event*
如果我读的是正确的,并且读的是正确的,那么
/dev/input/event*
上游的任何事情都会在内核中发生,任务由设备驱动程序处理。这是针对X11未使用的地方?(如果用户运行的是X服务器,您可以更轻松地从中获取扫描代码)谢谢,我在某个地方读到XServer隐藏了扫描代码,因此我没有研究过它(我尝试过pyxhook,它既没有捕获HID使用id,也没有捕获扫描代码)。我明天会调查X的。可能你是对的——我已经很久没有在这方面做过工作了。@Charles Duffy感谢Charles的指点,X核心协议没有提供任何东西,但XI2似乎可以做到这一点。遗憾的是,似乎没有针对XI2的python库,但为了满足我的需要,我可以使用通用的扫描码到键码转换规则将X11键码转换为扫描码?(如果用户运行的是X服务器,您可以更轻松地从中获取扫描代码)谢谢,我在某个地方读到XServer隐藏了扫描代码,因此我没有研究过它(我尝试过pyxhook,它既没有捕获HID使用id,也没有捕获扫描代码)。我明天会调查X的。可能你是对的——我已经很久没有在这方面做过工作了。@Charles Duffy感谢Charles的指点,X核心协议没有提供任何东西,但XI2似乎可以做到这一点。遗憾的是,似乎没有针对XI2的python库,但为了满足我的需要,我可以使用通用的扫描码到键码转换规则将X11键码转换为扫描码。