Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions bin/input-remapper-gtk
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ from inputremapper.daemon import DaemonProxy
from inputremapper.logger import logger, update_verbosity, log_info


def start_processes(ignore_pkexec_errors=False) -> DaemonProxy:
def start_processes() -> DaemonProxy:
"""Start reader-service and daemon via pkexec to run in the background."""
# this function is overwritten in tests
try:
ReaderService.pkexec_reader_service(ingore_errors=ignore_pkexec_errors)
ReaderService.pkexec_reader_service()
except Exception as e:
logger.error(e)
sys.exit(11)
Expand All @@ -60,11 +60,6 @@ if __name__ == '__main__':
help=_('displays additional debug information'),
default=False
)
parser.add_argument(
'-R', '--no-root', action='store_true', dest='no_root',
help=_('allow rejecting root access (by cancelling the pkexec dialog)'),
default=False
)

options = parser.parse_args(sys.argv[1:])
update_verbosity(options.debug)
Expand All @@ -90,8 +85,8 @@ if __name__ == '__main__':

# create the reader before we start the reader-service (start_processes) otherwise
# it can come to race conditions with the creation of pipes
reader_client = ReaderClient(message_broker, _Groups(), ignore_pkexec_errors=options.no_root)
daemon = start_processes(ignore_pkexec_errors=options.no_root)
reader_client = ReaderClient(message_broker, _Groups())
daemon = start_processes()

data_manager = DataManager(
message_broker, GlobalConfig(), reader_client, daemon, GlobalUInputs(), system_mapping
Expand Down
5 changes: 2 additions & 3 deletions inputremapper/gui/reader_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class ReaderClient:
_timeout: int = 5

def __init__(
self, message_broker: MessageBroker, groups: _Groups, ignore_pkexec_errors=False
self, message_broker: MessageBroker, groups: _Groups
):
self.groups = groups
self.message_broker = message_broker
Expand All @@ -88,14 +88,13 @@ def __init__(
self.attach_to_events()

self._read_timeout = GLib.timeout_add(30, self._read)
self.ignore_pkexec_errors = ignore_pkexec_errors

def ensure_reader_service_running(self):
if ReaderService.is_running():
return

logger.info("ReaderService not running anymore, restarting")
ReaderService.pkexec_reader_service(ingore_errors=self.ignore_pkexec_errors)
ReaderService.pkexec_reader_service()

# wait until the ReaderService is up

Expand Down
16 changes: 9 additions & 7 deletions inputremapper/gui/reader_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,20 +136,22 @@ def is_running():
return True

@staticmethod
def pkexec_reader_service(ingore_errors=False):
def pkexec_reader_service():
"""Start reader-service via pkexec to run in the background."""
debug = " -d" if logger.level <= logging.DEBUG else ""
cmd = f"pkexec input-remapper-control --command start-reader-service{debug}"

logger.debug("Running `%s`", cmd)
exit_code = os.system(cmd)
if exit_code == 0:
return

if exit_code != 0:
ex = Exception(f"Failed to pkexec the reader-service, code {exit_code}")
if ingore_errors:
logger.warn(ex)
else:
raise ex
ex = Exception(f"Failed to pkexec the reader-service, code {exit_code}")
if os.environ.get("IGNORE_PKEXEC_ERRORS"):
logger.warn(ex)
return

raise ex

async def run(self):
"""Start doing stuff."""
Expand Down