Как я могу проверить с помощью Python, какой оконный менеджер запущен?

Я хочу проверить, какой оконный менеджер использует пользователь (например, GNOME или KDE и т. д.). Как мне это сделать?


person Jay    schedule 26.07.2010    source источник
comment
Если вы расскажете, почему вы хотите его обнаружить, у кого-то может быть идея получше.   -  person viraptor    schedule 26.07.2010
comment
возможный дубликат Найти имя оконного менеджера X   -  person Greg Hewgill    schedule 26.07.2010
comment
Возможно, вы сможете проверить определенные процессы, которые обычно выполняются, когда пользователь использует любой из этих оконных менеджеров. Я действительно не проверял это, поэтому комментарий вместо ответа.   -  person Maiku Mori    schedule 26.07.2010


Ответы (2)


Вы не можете. Нет центрального места, где программа регистрируется, чтобы сказать «привет, я оконный менеджер».

Например, я запускаю xmonad. Я просто запускаю это, вызывая xmonad в моем файле ~/.xsession вместе с парой других программ, чтобы он запускался при входе в систему. Вы не можете обнаружить это.

person Daniel Egeberg    schedule 26.07.2010
comment
Я только что подумал о том, что оконный менеджер такой же, как и любая другая программа, верно? Итак, в списке процессов, например, я запускаю GNOME, и у меня есть процесс под названием «gnome-sessions». Так что я мог бы проверить, запущен ли этот процесс, чтобы знать, что пользователь использует GNOME. Вы не можете запускать 2 или более WM одновременно, верно? - person Jay; 26.07.2010
comment
@Jay: Конечно, если у вас есть список всех оконных менеджеров, я думаю, вы могли бы. Хотя есть много разных. Вы не можете сделать общее решение. - person Daniel Egeberg; 26.07.2010
comment
См. xnest или Xephyr или startx -- :1 причины, по которым ваше предположение о невозможности запуска двух или более WM одновременно неверно. - person sarnold; 26.07.2010

Поскольку вы, очевидно, используете Linux, вы можете использовать wmctrl -m или inxi-Sxx.

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())
person Honest Abe    schedule 11.09.2019