diff options
Diffstat (limited to 'portato')
-rw-r--r-- | portato/constants.py | 3 | ||||
-rw-r--r-- | portato/helper.py | 19 | ||||
-rw-r--r-- | portato/su.py | 57 |
3 files changed, 76 insertions, 3 deletions
diff --git a/portato/constants.py b/portato/constants.py index f188897..7d2a9d6 100644 --- a/portato/constants.py +++ b/portato/constants.py @@ -20,8 +20,6 @@ These should be set during the installation. @type VERSION: string @var HOME: shortcut to $HOME @type HOME: string -@var SU_COMMAND: command to execute to "su" -@type SU_COMMAND: string @var CONFIG_DIR: The configuration directory. @type CONFIG_DIR: string @@ -58,7 +56,6 @@ APP_ICON = pjoin(ICON_DIR, "portato-icon.png") APP = "portato" VERSION = "9999" HOME = os.environ["HOME"] -SU_COMMAND = "gksu -D 'Portato'" # config CONFIG_DIR = "etc/" diff --git a/portato/helper.py b/portato/helper.py index d3fc70b..5b275d6 100644 --- a/portato/helper.py +++ b/portato/helper.py @@ -151,3 +151,22 @@ def unique_array(s): if x not in u: u.append(x) return u + +def detect_desktop_environment(): + # stolen from wicd :) + + desktop_environment = 'generic' + if os.environ.get('KDE_FULL_SESSION') == 'true': + desktop_environment = 'kde' + elif os.environ.get('GNOME_DESKTOP_SESSION_ID'): + desktop_environment = 'gnome' + #else: # no need for this part as of now + # try: + # info = commands.getoutput('xprop -root _DT_SAVE_MODE') + # if ' = "xfce4"' in info: + # desktop_environment = 'xfce' + # except (OSError, RuntimeError): + # pass + + return desktop_environment + diff --git a/portato/su.py b/portato/su.py new file mode 100644 index 0000000..b87c75b --- /dev/null +++ b/portato/su.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# +# File: portato/su.py +# This file is part of the Portato-Project, a graphical portage-frontend. +# +# Copyright (C) 2006-2009 René 'Necoro' Neumann +# This is free software. You may redistribute copies of it under the terms of +# the GNU General Public License version 2. +# There is NO WARRANTY, to the extent permitted by law. +# +# Written by René 'Necoro' Neumann <necoro@necoro.net> + +from __future__ import with_statement, absolute_import + +import os + +from .constants import APP_ICON +from .helper import detect_desktop_environment + +class SUCommand (object): + def __init__ (self, bin, args): + self.bin = bin + self.args = args + + def cmd (self, cmd): + return [self.bin] + self.args + [cmd] + + def check (self): + for p in os.environ['PATH'].split(":"): + jp = os.path.join(p, self.bin) + if os.access(jp, os.F_OK): + return True + + return False + +class SplitSUCommand (SUCommand): + def cmd (self, cmd): + return [self.bin] + self.args + cmd.split() + +gtksu = SUCommand("gksu", ["-D", "Portato"]) +kdesu = SUCommand("kdesu", ["-t", "-d", "-i", APP_ICON, "-c"]) +ktsuss = SplitSUCommand("ktsuss", ["-m", "Portato"]) + +def detect_su_command (): + desktop_env = detect_desktop_environment() + if desktop_env == "kde": + sus = [kdesu, ktsuss, gtksu] + elif desktop_env == "gnome": + sus = [gtksu, ktsuss, kdesu] + else: + sus = [ktsuss, gtksu, kdesu] + + for s in sus: + if s.check(): + return s + + return None |