63 lines
1.8 KiB
Python
63 lines
1.8 KiB
Python
from Xlib.display import Display
|
|
import Xlib
|
|
from Xlib import X
|
|
import Xlib.XK
|
|
import sys
|
|
import signal
|
|
import time
|
|
display = None
|
|
root = None
|
|
|
|
def handle_event(event):
|
|
print "handle!"
|
|
if (event.type == X.KeyRelease):
|
|
send_key("x")
|
|
|
|
# from http://shallowsky.com/software/crikey/pykey-0.1
|
|
def send_key(emulated_key):
|
|
shift_mask = 0 # or Xlib.X.ShiftMask
|
|
window = display.get_input_focus()._data["focus"]
|
|
keysym = Xlib.XK.string_to_keysym(emulated_key)
|
|
keycode = display.keysym_to_keycode(keysym)
|
|
event = Xlib.protocol.event.KeyPress(
|
|
time = int(time.time()),
|
|
root = root,
|
|
window = window,
|
|
same_screen = 0, child = Xlib.X.NONE,
|
|
root_x = 0, root_y = 0, event_x = 0, event_y = 0,
|
|
state = shift_mask,
|
|
detail = keycode
|
|
)
|
|
window.send_event(event, propagate = True)
|
|
event = Xlib.protocol.event.KeyRelease(
|
|
time = int(time.time()),
|
|
root = display.screen().root,
|
|
window = window,
|
|
same_screen = 0, child = Xlib.X.NONE,
|
|
root_x = 0, root_y = 0, event_x = 0, event_y = 0,
|
|
state = shift_mask,
|
|
detail = keycode
|
|
)
|
|
window.send_event(event, propagate = True)
|
|
|
|
def main():
|
|
# current display
|
|
global display,root
|
|
display = Display()
|
|
root = display.screen().root
|
|
|
|
# we tell the X server we want to catch keyPress event
|
|
root.change_attributes(event_mask = X.KeyPressMask|X.KeyReleaseMask)
|
|
# just grab the "1"-key for now
|
|
root.grab_key(10, 0, True,X.GrabModeSync, X.GrabModeSync)
|
|
|
|
signal.signal(signal.SIGALRM, lambda a,b:sys.exit(1))
|
|
signal.alarm(10)
|
|
while 1:
|
|
event = display.next_event()
|
|
print "event"
|
|
handle_event(event)
|
|
display.allow_events(X.AsyncKeyboard, X.CurrentTime)
|
|
|
|
if __name__ == '__main__':
|
|
main() |