使用Python检测Linux中的按键组合?

时间:2009-02-05 13:03:37

标签: python linux keylogger

我正在尝试捕捉按键,以便在按下给定组合时触发事件。

我一直在寻找有关如何入门的提示,我能找到的最简单的代码片段是Python - 我从here抓取了下面的代码。但是,当我从一个终端运行并点击一些键时,在“按一个键......”语句后没有任何反应。

我是傻瓜吗?任何人都可以解释为什么没有发生任何事情,或建议在Linux上实现这一目标的更好方法(考虑任何语言!)?

import Tkinter as tk

def key(event):
    if event.keysym == 'Escape':
        root.destroy()
    print event.char

root = tk.Tk()
print "Press a key (Escape key to exit):"
root.bind_all('<Key>', key)
# don't show the tk window
root.withdraw()
root.mainloop()

5 个答案:

答案 0 :(得分:3)

如果你不显示窗口,Tk似乎没有得到它。尝试:

import Tkinter as tk

def key(event):
    if event.keysym == 'Escape':
        root.destroy()
    print event.char

root = tk.Tk()
print "Press a key (Escape key to exit):"
root.bind_all('<Key>', key)
# don't show the tk window
# root.withdraw()
root.mainloop()

适合我...

答案 1 :(得分:1)

您正在做的是在“原始”模式下阅读/dev/tty

正常Linux输入是“熟” - 已经为您处理了退格和行结尾。

要在“原始”模式下读取键盘等设备,您需要对IOCTL进行直接的Linux API调用。

请查看http://code.activestate.com/recipes/68397/以获取有关此问题的一些指导。是的,配方是在tcl中,但它提供了如何继续的提示。

答案 2 :(得分:1)

嗯,事实证明使用GNOME时有一个更简单的答案,它根本不涉及任何编程......

http://www.captain.at/howto-gnome-custom-hotkey-keyboard-shortcut.php

Archived on Wayback

只需创建由组合键触发的脚本/可执行文件,并指向您在gconf-editor中创建的'keybinding_commands'条目。

为什么我没想到这个?

答案 3 :(得分:1)

或者(非Python选项)使用XBindKeys

答案 4 :(得分:0)

tkinter'bind'方法仅在tkinter窗口处于活动状态时有效。

如果要绑定在所有桌面上都可以使用的击键组合(全局键/鼠标绑定),则可以使用bindglobal(与pip install bindglobal一起安装)。它的工作方式与标准tkinter的“绑定”完全相同。

示例代码:

import bindglobal
def callback(e):
    print("CALLBACK event=" + str(e))

bg = BindGlobal()
bg.gbind("<Menu-1>",callback)
bg.start()