|
|
|
@ -27,6 +27,7 @@ import grp
|
|
|
|
|
import sys
|
|
|
|
|
import argparse
|
|
|
|
|
import logging
|
|
|
|
|
import psutil
|
|
|
|
|
|
|
|
|
|
from keymapper.logger import logger, update_verbosity, log_info, add_filehandler
|
|
|
|
|
from keymapper.config import config
|
|
|
|
@ -99,7 +100,10 @@ def communicate(options, daemon):
|
|
|
|
|
group = groups.find(key=options.device)
|
|
|
|
|
|
|
|
|
|
if group is None:
|
|
|
|
|
logger.error('Unknown device "%s"', options.device)
|
|
|
|
|
logger.error(
|
|
|
|
|
'Device "%s" is unknown or not an appropriate input device',
|
|
|
|
|
options.device
|
|
|
|
|
)
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
return group
|
|
|
|
@ -139,7 +143,7 @@ def communicate(options, daemon):
|
|
|
|
|
daemon.autoload(timeout=10)
|
|
|
|
|
else:
|
|
|
|
|
group = require_group()
|
|
|
|
|
logger.info('Autoloading %s', options.device)
|
|
|
|
|
logger.info('Asking daemon to autoload for %s', options.device)
|
|
|
|
|
daemon.autoload_single(group.key, timeout=2)
|
|
|
|
|
|
|
|
|
|
if options.command == START:
|
|
|
|
@ -183,6 +187,43 @@ def internals(options):
|
|
|
|
|
os.system(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main(options):
|
|
|
|
|
if options.debug:
|
|
|
|
|
update_verbosity(True)
|
|
|
|
|
add_filehandler('/var/log/key-mapper-control')
|
|
|
|
|
|
|
|
|
|
if options.version:
|
|
|
|
|
log_info()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
logger.debug('Call for "%s"', sys.argv)
|
|
|
|
|
|
|
|
|
|
if options.command == AUTOLOAD and len(psutil.users()) == 0:
|
|
|
|
|
# No user logged in, this is probably happening during boot time and got
|
|
|
|
|
# triggered by udev. There is no need to try to inject anything if the
|
|
|
|
|
# service doesn't know where to look for a config file. This avoids a lot
|
|
|
|
|
# of confusing service logs. And also avoids potential for problems when
|
|
|
|
|
# key-mapper-control stresses about evdev, dbus and multiprocessing already
|
|
|
|
|
# while the system hasn't even booted completely.
|
|
|
|
|
logger.warn('Skipping autoload command without a logged in user')
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if options.command is not None:
|
|
|
|
|
if options.command in INTERNALS:
|
|
|
|
|
internals(options)
|
|
|
|
|
elif options.command in COMMANDS:
|
|
|
|
|
from keymapper.daemon import Daemon
|
|
|
|
|
daemon = Daemon.connect(fallback=False)
|
|
|
|
|
communicate(options, daemon)
|
|
|
|
|
else:
|
|
|
|
|
logger.error('Unknown command "%s"', options.command)
|
|
|
|
|
else:
|
|
|
|
|
utils(options)
|
|
|
|
|
|
|
|
|
|
if options.command:
|
|
|
|
|
logger.info('Finished')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
|
parser.add_argument(
|
|
|
|
@ -230,28 +271,4 @@ if __name__ == '__main__':
|
|
|
|
|
help='Print the version and exit', default=False
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
options = parser.parse_args(sys.argv[1:])
|
|
|
|
|
|
|
|
|
|
if options.debug:
|
|
|
|
|
update_verbosity(True)
|
|
|
|
|
add_filehandler('/var/log/key-mapper-control')
|
|
|
|
|
|
|
|
|
|
if options.version:
|
|
|
|
|
log_info()
|
|
|
|
|
else:
|
|
|
|
|
logger.debug('Call for "%s"', sys.argv)
|
|
|
|
|
|
|
|
|
|
if options.command is not None:
|
|
|
|
|
if options.command in INTERNALS:
|
|
|
|
|
internals(options)
|
|
|
|
|
elif options.command in COMMANDS:
|
|
|
|
|
from keymapper.daemon import Daemon
|
|
|
|
|
daemon = Daemon.connect(fallback=False)
|
|
|
|
|
communicate(options, daemon)
|
|
|
|
|
else:
|
|
|
|
|
logger.error('Unknown command "%s"', options.command)
|
|
|
|
|
else:
|
|
|
|
|
utils(options)
|
|
|
|
|
|
|
|
|
|
if options.command:
|
|
|
|
|
logger.info('Finished')
|
|
|
|
|
main(parser.parse_args(sys.argv[1:]))
|
|
|
|
|