From 2fa2c2d385cd5198075db808d4964abf03b24154 Mon Sep 17 00:00:00 2001 From: Asura Date: Sun, 26 Jun 2022 18:19:38 -0700 Subject: [PATCH] fix(pynput): Use fake input to solve lock screen problems --- pynput_service.py | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/pynput_service.py b/pynput_service.py index 24edcc1f9..90b8741ce 100644 --- a/pynput_service.py +++ b/pynput_service.py @@ -17,30 +17,14 @@ class MyController(Controller): :param event: The *X* keyboard event. :param int keysym: The keysym to handle. """ + keysym = self._keysym(key) + keycode = self._display.keysym_to_keycode(keysym) - event = Xlib.display.event.KeyPress if is_press \ - else Xlib.display.event.KeyRelease - - origin_keysym = self._keysym(key) - keycode = self._display.keysym_to_keycode(origin_keysym) - - with display_manager(self._display) as dm, self.modifiers as modifiers: - # Under certain cimcumstances, such as when running under Xephyr, - # the value returned by dm.get_input_focus is an int - window = dm.get_input_focus().focus - send_event = getattr( - window, - 'send_event', - lambda event: dm.send_event(window, event)) - send_event(event( - detail=keycode, - state=self._shift_mask(modifiers), - time=0, - root=dm.screen().root, - window=window, - same_screen=0, - child=Xlib.X.NONE, - root_x=0, root_y=0, event_x=0, event_y=0)) + with display_manager(self._display) as dm: + Xlib.ext.xtest.fake_input( + dm, + Xlib.X.KeyPress if is_press else Xlib.X.KeyRelease, + keycode)