import uinput from pythonosc import dispatcher from pythonosc import osc_server keylist = [ "KEY_A", "KEY_B", "KEY_C", "KEY_D", "KEY_E", "KEY_F", "KEY_G", "KEY_H", "KEY_I", "KEY_J", "KEY_K", "KEY_L", "KEY_M", "KEY_N", "KEY_O", "KEY_P", "KEY_Q", "KEY_R", "KEY_S", "KEY_T", "KEY_U", "KEY_V", "KEY_W", "KEY_X", "KEY_Y", "KEY_Z", "KEY_1", "KEY_2", "KEY_3", "KEY_4", "KEY_5", "KEY_6", "KEY_7", "KEY_8", "KEY_9", "KEY_0", "KEY_MINUS", "KEY_EQUAL", "KEY_YEN", "KEY_LEFTBRACE", "KEY_RIGHTBRACE", "KEY_SEMICOLON", "KEY_APOSTROPHE", "KEY_BACKSLASH", "KEY_COMMA", "KEY_DOT", "KEY_SLASH", "KEY_BACKSLASH", "KEY_F1", "KEY_F2", "KEY_F3", "KEY_F4", "KEY_F5", "KEY_F6", "KEY_F7", "KEY_F8", "KEY_F9", "KEY_F10", "KEY_F11", "KEY_F12", "KEY_ESC", "KEY_TAB", "KEY_CAPSLOCK", "KEY_LEFTSHIFT", "KEY_LEFTCTRL", "KEY_LEFTMETA", "KEY_LEFTALT", "KEY_BACKSPACE", "KEY_ENTER", "KEY_RIGHTSHIFT", "KEY_RIGHTCTRL", "KEY_RIGHTALT", "KEY_SPACE", "KEY_MUHENKAN", "KEY_HENKAN", "KEY_KATAKANAHIRAGANA" ] events = "events_list = (\n" for key in keylist: events += (f" uinput.{key},\n") events += ")" events_list = "" exec(f"{events}") def key_to_key(key): for k in keylist: if k == key: return key return "" def key_emit(dev:uinput.Device,key,state): device.emit(key, state) def print_handler(unused_addr, *args): print(f"Received message:{unused_addr} {args}") def key_handler(addr, *args): if addr[0] != "/": return addr = addr[1:] if key_to_key(addr) == "": return exec(f"key_emit(device,uinput.{addr},int(args[0]))") device = uinput.Device(events_list) handlers = [ ("/*",print_handler), ("/KEY*",key_handler), ] if __name__ == "__main__": dispatcher = dispatcher.Dispatcher() for addr, func in handlers: dispatcher.map(addr, func) ip = "127.0.0.1" port = 7777 server = osc_server.ThreadingOSCUDPServer((ip, port), dispatcher) print(f"Serving on {ip}:{port}") server.serve_forever()