diff -Naur orig/evdev/util.py v0.4.7/evdev/util.py --- orig/evdev/util.py 2015-06-12 16:31:46.532994729 -0500 +++ v0.4.7/evdev/util.py 2015-06-12 16:32:59.489933840 -0500 @@ -3,15 +3,53 @@ import os import stat import glob +import subprocess from evdev import ecodes from evdev.events import event_factory +su = False + + +def get_su_binary(): + global su + if su is not False: + return su + + su_files = ['/sbin/su', '/system/bin/su', '/system/xbin/su', '/data/local/xbin/su', + '/data/local/bin/su', '/system/sd/xbin/su', '/system/bin/failsafe/su', + '/data/local/su'] + su = None + + for fn in su_files: + if os.path.exists(fn): + try: + cmd = [fn, '-c', 'id'] + output = subprocess.check_output(cmd) + except Exception: + pass + else: + if 'uid=0' in output: + su = fn + break + + return su + + +def fix_permissions(nodes): + su = get_su_binary() + if su: + cmd = 'chmod 666 ' + ' '.join(nodes) + print cmd + subprocess.check_call(['su', '-c', cmd]) + + def list_devices(input_device_dir='/dev/input'): '''List readable character devices in ``input_device_dir``.''' fns = glob.glob('{}/event*'.format(input_device_dir)) + fix_permissions(fns) fns = list(filter(is_device, fns)) return fns