【发布时间】:2017-08-16 17:50:30
【问题描述】:
我想要什么
编写一个脚本,读取没有 root 用户权限的 USB 键盘发送的 HID 使用 ID。
目的是映射扫描码/HID id 和生成的文字输入,用于编写键盘配置工具;如果用户使用 dvorak 布局,T 键按下可以输入文字 Y,或者 Z 可以输入文字 ツ。
下面的代码 sn-p 在捕获扫描码方面做得很好(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))
在没有特殊权限的情况下是否可以这样做?
【问题讨论】:
-
这是针对不使用X11的地方? (如果用户正在运行 X 服务器,您将更容易从中获取扫描码)
-
谢谢,我在某处读到 XServer 模糊了扫描码,所以我没有调查它(我试过 pyxhook,它既没有捕获 HID 使用 id 也没有捕获扫描码)。我明天会调查 X。
-
嗯。可能你是对的——我已经很久没有在这个领域工作了。
-
@Charles Duffy 感谢 Charles 的指点,X 核心协议没有提供任何东西,但 XI2 似乎可以做到。遗憾的是,似乎没有 XI2 的 python 库,但对于我想要的,我可以使用通用扫描码到键码转换规则将 X11 键码转换为扫描码。