import ctypes, sys
x11 = ctypes.CDLL('libX11.so.6')
xtst = ctypes.CDLL('libXtst.so.6')
x11.XOpenDisplay.restype = ctypes.c_void_p
x11.XOpenDisplay.argtypes = [ctypes.c_char_p]
x11.XFlush.argtypes = [ctypes.c_void_p]
xtst.XTestFakeKeyEvent.argtypes = [ctypes.c_void_p, ctypes.c_uint, ctypes.c_int, ctypes.c_ulong]
display = x11.XOpenDisplay(None)
if not display: raise RuntimeError('No X11 display')
codes = [int(code) for code in sys.argv[1:]]
for code in codes: xtst.XTestFakeKeyEvent(display, code, True, 0)
for code in reversed(codes): xtst.XTestFakeKeyEvent(display, code, False, 0)
x11.XFlush(display)
