【问题标题】:Is capturing HID keyboard event without root user privilege possible in linux在 linux 中是否可以在没有 root 用户权限的情况下捕获 HID 键盘事件
【发布时间】: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 键码转换为扫描码。

标签: python linux


【解决方案1】:

结论:

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
----操作系统空间----------

  1. 用户按下键盘键
  2. 键盘向 USB 控制器发送一个 hidbp(一种数据包)
  3. USB 控制器接收数据包并发出 irq(Interrupt request)
  4. CPU 响应 irq 并调用由键盘驱动程序设置的 irq 处理程序。 ---有点不确定
  5. irq 处理程序存储数据包或事件,并在内核中对其处理函数调用进行排队并退出。
  6. 队列函数处理事件并将其报告给 include/linux/input.h 中的各种函数,并调用input_sync 将事件写入设备文件,例如/dev/input/event1

---用户空间----

  1. 无论是 xwindow server 还是 android InputDeviceReader 读取表单/dev/input/event*

如果我读到的内容是正确的,那么/dev/input/event* 上游的任何事情都会发生在内核中,并且任务由设备驱动程序处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2014-11-25
    • 2020-10-06
    • 1970-01-01
    • 2010-11-13
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多