How can I get to know what my desktop environment is using Python? I like the result to be gnome or KDE or else.
如何才能了解我的桌面环境使用Python的内容?我喜欢结果是gnome或KDE或者其他。
4 个解决方案
#1
7
Tested in Ubuntu 9.10:
在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.
编辑:正如下面的评论中提到的,这种方法不适用于更多的操作系统。另外两个答案提供了解决方法。
#2
13
I use this in one of my projects:
我在我的一个项目中使用它:
def get_desktop_environment(self):
#From http://*.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
#3
4
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
并阅读此处的讨论:http://ubuntuforums.org/showthread.php?t = 1139057
#4
4
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.
有时人们会混合使用桌面环境。使用xdg-utils使您的应用程序与桌面无关;这意味着使用xdg-open打开文件或URL,使用xdg-user-dir DOCUMENTS查找docs文件夹,xdg-email发送电子邮件,等等。
#1
7
Tested in Ubuntu 9.10:
在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.
编辑:正如下面的评论中提到的,这种方法不适用于更多的操作系统。另外两个答案提供了解决方法。
#2
13
I use this in one of my projects:
我在我的一个项目中使用它:
def get_desktop_environment(self):
#From http://*.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
#3
4
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
并阅读此处的讨论:http://ubuntuforums.org/showthread.php?t = 1139057
#4
4
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.
有时人们会混合使用桌面环境。使用xdg-utils使您的应用程序与桌面无关;这意味着使用xdg-open打开文件或URL,使用xdg-user-dir DOCUMENTS查找docs文件夹,xdg-email发送电子邮件,等等。