Какова моя текущая среда рабочего стола?

Как я могу узнать, что моя среда рабочего стола использует Python? Мне нравится, что результатом является gnome или KDE или иначе.

4 ответа

Протестировано в Ubuntu 9.10:

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

Изменить: Как уже упоминалось в комментариях ниже, этот подход не будет работать для нескольких ОС. Остальные два ответа предоставляют обходные пути.


Я использую это в одном из моих проектов:

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


Иногда люди запускают сочетание настольных сред. Сделайте приложение app-agnostic с помощью xdg-utils; это означает использование xdg-open для открытия файла или URL-адреса, используя xdg-user-dir DOCUMENTS, чтобы найти папку документов, xdg-email для отправки электронной почты и т.д.


Вы можете попробовать следующее:

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

И прочитайте здесь обсуждение: http://ubuntuforums.org/showthread.php?t=1139057

licensed under cc by-sa 3.0 with attribution.