Python 在Linux中捕获发送到特定应用程序的密钥

Python 在Linux中捕获发送到特定应用程序的密钥,python,c,linux,linux-kernel,keylogger,Python,C,Linux,Linux Kernel,Keylogger,理想情况下,我希望捕获发送到特定程序(且仅发送到该程序)的密钥,例如矮人堡垒。[然后只向该程序发送击键-这更容易做到] 一种解决方法是在Docker或VM中运行应用程序,并使用类似于[logkeys][1]的方法捕获所有击键,但更可取的是为特定应用程序使用包装器或其他方法 我正在寻找这个问题的解决方案。 我应该使用设备驱动程序吗?(但我如何将其限制为仅限于该应用程序?)或者是否有我应该注意的特定内容,例如Python/C已经有了。。。为什么不直接使用keytrace等 编辑:进一步思考后,这似乎

理想情况下,我希望捕获发送到特定程序(且仅发送到该程序)的密钥,例如矮人堡垒。[然后只向该程序发送击键-这更容易做到]

一种解决方法是在Docker或VM中运行应用程序,并使用类似于
[logkeys][1]
的方法捕获所有击键,但更可取的是为特定应用程序使用包装器或其他方法

我正在寻找这个问题的解决方案。 我应该使用设备驱动程序吗?(但我如何将其限制为仅限于该应用程序?)或者是否有我应该注意的特定内容,例如Python/C已经有了。。。为什么不直接使用
keytrace


编辑:进一步思考后,这似乎是在窗口管理器级别处理的事情-也许这是一种方法。

如果应用程序创建X11窗口,或在X11窗口内运行(例如在终端模拟器中),则可以捕获针对该特定窗口的X11事件

在应用程序运行时,使用
xwininfo
确定窗口的标识符:运行
xwininfo
,单击目标窗口,然后查找

xwininfo: Window id: ...
在输出中

然后运行
xev
,截取发送到目标窗口的事件:

xev -id ... -event keyboard
用上面确定的窗口id替换

结果相当详细,但可以进行后处理:

KeyPress event, serial 18, synthetic NO, window 0x4000003,
    root 0x187, subw 0x0, time 141181493, (369,-10), root:(369,54),
    state 0x0, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 21, synthetic NO, window 0x4000003,
    root 0x187, subw 0x0, time 141181653, (369,-10), root:(369,54),
    state 0x0, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 21, synthetic NO, window 0x4000003,
    root 0x187, subw 0x0, time 141182188, (369,-10), root:(369,54),
    state 0x0, keycode 116 (keysym 0xff54, Down), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
这并不适用于所有X11应用程序,但适用于矮人堡垒


在X11下,窗口管理器不处理单个应用程序的键盘输入。

这收到了否决票——我想知道为什么——a)投票人认为这很微不足道——如果是这样,谁会放弃100美元的奖金?b) 一般来说,这并不令人感兴趣/太具体-考虑到有50K个键盘记录问题-似乎登录到一个程序会非常有趣