From 5604e9e18a9dad9b0d689fbceafd080dedb42c98 Mon Sep 17 00:00:00 2001 From: sezanzeb Date: Mon, 28 Dec 2020 00:25:32 +0100 Subject: [PATCH] fixing pkexec in some distros --- keymapper/paths.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/keymapper/paths.py b/keymapper/paths.py index c014c8fc..455c3fd5 100644 --- a/keymapper/paths.py +++ b/keymapper/paths.py @@ -25,6 +25,7 @@ import os import shutil import getpass +import pwd from keymapper.logger import logger @@ -32,20 +33,30 @@ from keymapper.logger import logger def get_user(): """Try to find the user who called sudo.""" try: - user = os.getlogin() + return os.getlogin() except OSError: # failed in some ubuntu installations and in systemd services + pass + + try: + user = os.environ['USER'] + except KeyError: + # possibly the systemd service. no sudo was used + return getpass.getuser() + + if user == 'root': + try: + return os.environ['SUDO_USER'] + except KeyError: + # no sudo was used + pass + try: - user = os.environ['USER'] - if user == 'root': - try: - user = os.environ.get('SUDO_USER', user) - except KeyError: - # no sudo was used - pass + pkexec_uid = int(os.environ['PKEXEC_UID']) + return pwd.getpwuid(pkexec_uid).pw_name except KeyError: - # possibly the systemd service. no sudo was used - user = getpass.getuser() + # no pkexec was used or the uid is unknown + pass return user