What is my current desktop environment?

前端 未结 4 1039
南笙
南笙 2020-12-31 23:39

How can I get to know what my desktop environment is using Python? I like the result to be gnome or KDE or else.

相关标签:
4条回答
  • 2020-12-31 23:52

    Sometimes people run a mix of desktop environments. Make your app desktop-agnostic using xdg-utils; that means using xdg-open to open a file or url, using xdg-user-dir DOCUMENTS to find the docs folder, xdg-email to send e-mail, and so on.

    0 讨论(0)
  • 2021-01-01 00:00

    I use this in one of my projects:

        def get_desktop_environment(self):
            #From http://stackoverflow.com/questions/2035657/what-is-my-current-desktop-environment
            # and http://ubuntuforums.org/showthread.php?t=652320
            # and http://ubuntuforums.org/showthread.php?t=652320
            # and http://ubuntuforums.org/showthread.php?t=1139057
            if sys.platform in ["win32", "cygwin"]:
                return "windows"
            elif sys.platform == "darwin":
                return "mac"
            else: #Most likely either a POSIX system or something not much common
                desktop_session = os.environ.get("DESKTOP_SESSION")
                if desktop_session is not None: #easier to match if we doesn't have  to deal with caracter cases
                    desktop_session = desktop_session.lower()
                    if desktop_session in ["gnome","unity", "cinnamon", "mate", "xfce4", "lxde", "fluxbox", 
                                           "blackbox", "openbox", "icewm", "jwm", "afterstep","trinity", "kde"]:
                        return desktop_session
                    ## Special cases ##
                    # Canonical sets $DESKTOP_SESSION to Lubuntu rather than LXDE if using LXDE.
                    # There is no guarantee that they will not do the same with the other desktop environments.
                    elif "xfce" in desktop_session or desktop_session.startswith("xubuntu"):
                        return "xfce4"
                    elif desktop_session.startswith("ubuntu"):
                        return "unity"       
                    elif desktop_session.startswith("lubuntu"):
                        return "lxde" 
                    elif desktop_session.startswith("kubuntu"): 
                        return "kde" 
                    elif desktop_session.startswith("razor"): # e.g. razorkwin
                        return "razor-qt"
                    elif desktop_session.startswith("wmaker"): # e.g. wmaker-common
                        return "windowmaker"
                if os.environ.get('KDE_FULL_SESSION') == 'true':
                    return "kde"
                elif os.environ.get('GNOME_DESKTOP_SESSION_ID'):
                    if not "deprecated" in os.environ.get('GNOME_DESKTOP_SESSION_ID'):
                        return "gnome2"
                #From http://ubuntuforums.org/showthread.php?t=652320
                elif self.is_running("xfce-mcs-manage"):
                    return "xfce4"
                elif self.is_running("ksmserver"):
                    return "kde"
            return "unknown"
    
        def is_running(self, process):
            #From http://www.bloggerpolis.com/2011/05/how-to-check-if-a-process-is-running-using-python/
            # and http://richarddingwall.name/2009/06/18/windows-equivalents-of-ps-and-kill-commands/
            try: #Linux/Unix
                s = subprocess.Popen(["ps", "axw"],stdout=subprocess.PIPE)
            except: #Windows
                s = subprocess.Popen(["tasklist", "/v"],stdout=subprocess.PIPE)
            for x in s.stdout:
                if re.search(process, x):
                    return True
            return False
    
    0 讨论(0)
  • 2021-01-01 00:04

    Tested in Ubuntu 9.10:

    >>> import os
    >>> os.environ.get('DESKTOP_SESSION')
    'gnome'
    

    Edit: As mentioned in comments below, this approach will not work for more some OSes. The other two answers provide workarounds.

    0 讨论(0)
  • 2021-01-01 00:08

    You might try this:

    def detect_desktop_environment():
        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:
            try:
                info = getoutput('xprop -root _DT_SAVE_MODE')
                if ' = "xfce4"' in info:
                    desktop_environment = 'xfce'
            except (OSError, RuntimeError):
                pass
        return desktop_environment
    

    And read the discussion here: http://ubuntuforums.org/showthread.php?t=1139057

    0 讨论(0)
提交回复
热议问题