如何使用Python检查正在运行的窗口管理器?

如何使用Python检查正在运行的窗口管理器?,python,gnome,kde,Python,Gnome,Kde,我想检查用户正在使用哪个窗口管理器(如GNOME或KDE等)。我该怎么做?你不能。没有一个中心位置可以让程序注册自己说“嗨,我是窗口管理员” 例如,我正在跑步。我只需在我的~/.xsession文件中调用xmonad,以及一些其他程序,就可以在登录时启动它。您无法真正检测到这一点。因为您显然在使用linux,所以可以使用或 如果您详细介绍了要检测它的“原因”,某人可能会有更好的想法。您的可能副本可以检查用户使用这些windows管理器时通常正在运行的特定进程。我还没有真正检查过这一点,所以是评论

我想检查用户正在使用哪个窗口管理器(如GNOME或KDE等)。我该怎么做?你不能。没有一个中心位置可以让程序注册自己说“嗨,我是窗口管理员”


例如,我正在跑步。我只需在我的
~/.xsession
文件中调用
xmonad
,以及一些其他程序,就可以在登录时启动它。您无法真正检测到这一点。

因为您显然在使用linux,所以可以使用或


如果您详细介绍了要检测它的“原因”,某人可能会有更好的想法。您的可能副本可以检查用户使用这些windows管理器时通常正在运行的特定进程。我还没有真正检查过这一点,所以是评论而不是回答。我只是想到了一些事情,窗口管理器就像其他任何程序一样,对吗?所以它在进程列表中,例如,我正在运行GNOME,我得到了一个名为“GNOME会话”的进程。因此,我可以检查该进程是否正在运行,以便知道用户使用GNOME。无论如何,你不能同时运行两个或多个WM,对吗?@Jay:当然,如果你有所有窗口管理器的列表,我想你可以。但是有很多不同的。您无法制定通用解决方案。请参阅
xnest
Xephyr
startx--:1
,了解“不能同时运行两个或多个WM”的假设不正确的原因。
import subprocess

def get_wm():

    output = subprocess.run(['wmctrl', '-m'], text=True,
                        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    if output.stderr:
        return(output.stderr)
    else:
        return(output.stdout)

print(get_wm())