Как определить, какой оконный менеджер запущен

Есть ли способ (например, команда или переменная окружения) определить, какой оконный менеджер активно работает в текущем сеансе?

184
задан 15 April 2013 в 06:52

13 ответов

Это возможно при использовании dbus и службы учетных записей (по умолчанию в Ubuntu).

$ qdbus --system org.freedesktop.Accounts \                                                                
> /org/freedesktop/Accounts/User1000 \                                                                                     
> org.freedesktop.Accounts.User.XSession                                                                                   
ubuntu

Стоит отметить, что я проверил это при входе через lightdm (это графический экран входа в систему), он обнаружил классический рабочий стол, такой как черный ящик, и, очевидно, обнаружил Unity. Я подозреваю, что это значение того, что пользователь выбирает на экране входа в качестве сеанса, поэтому немного проще использовать эту проверку для процессов

0
ответ дан 15 April 2013 в 06:52

Если у вас установлено wmctrl, первая строка вывода команды

    wmctrl -m

покажет вам имя оконного менеджера. Если у вас не установлено wmctrl, используйте следующую команду для его установки:

    sudo apt-get install wmctrl

Примечание, man wmctrl (то есть страница man для wmctrl) говорит частично :

-m Показать информацию об оконном менеджере ...

В моей системе Ubuntu 11.10 / Linux 3.0.0-14-generic # 23-Ubuntu x86_64 / metacity 2.34.1 первая строка вывода из wmctrl -m была: Name: Metacity
[ 1120], в то время как echo $DESKTOP_SESSION показал ubuntu-2d и echo $XDG_CURRENT_DESKTOP показал Unity.

В новой версии Ubuntu 15.10 программного обеспечения Ubuntu desktop на старом ноутбуке первая строка вывода из wmctrl -m была: Name: Compiz
, тогда как значения DESKTOP_SESSION и XDG_CURRENT_DESKTOP были ubuntu и Unity

0
ответ дан 15 April 2013 в 06:52

В системах Linux I переменных тестовой среды XDG_CURRENT_DESKTOP и GDMSESSION и получил следующие результаты.

Можно использовать эту строку для получения вывода:

printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"

Ubuntu 18.04 (Ubuntu)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu

Ubuntu 18.04 (Ubuntu на Уэйленде)

  • XDG_CURRENT_DESKTOP=ubuntu:GNOME
  • GDMSESSION=ubuntu-wayland

Ubuntu 16.04


Единица (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Единица, работающая с Миром

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Обратите внимание, что MIR_SERVER_NAME также установлен

  • MIR_SERVER_NAME=session-$NUMBER

Единица, работающая без Мира

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

3-я единица

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

2-я единица

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Классик Gnome

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Классик Gnome (никакие эффекты)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-fallback

Другие основанные на Ubuntu дистрибутивы


Чеканьте 13 (Корица)

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=cinnamon

Чеканьте 16 (выпуск KDE)

  • XDG_CURRENT_DESKTOP=KDE
  • GDMSESSION=default

Чеканьте 17 (Корица)

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=default

Lubuntu 12.04

  • XDG_CURRENT_DESKTOP=LXDE
  • GDMSESSION=Lubuntu

Васта 14.04 / 18.04

  • XDG_CURRENT_DESKTOP=X-Cinnamon
  • GDMSESSION=cinnamon

Васта 14.04 с помощью рабочего стола Gnome.

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome

Помощник Ubuntu 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu
104
ответ дан 15 April 2013 в 06:52
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t 
0
ответ дан 15 April 2013 в 06:52

Я также тестировал с KDE, и мой вывод таков:

a) Графически, с HardInfo: ответ обычно в «Операционная система»> «Среда рабочего стола», но если нет, вы можете посмотрите на «Переменные среды». HardInfo готов ко всем протестированным дистрибутивам, кроме дистрибутива с KDE, но его можно легко и быстро установить (только 2 пакета в Linux Mint 13).

б) Командная строка, с этой командой: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Элемент, который появляется в нескольких строках, должен быть ответом (если есть ничья, то решение с «сессией» должно быть решением).

0
ответ дан 15 April 2013 в 06:52

Я могу думать только о проверке известных оконных менеджеров в запущенных процессах. Раньше в gconf был ключ, для которого был задан предпочтительный оконный менеджер, но он устарел с Gnome 2.12.

Итак, если это для целей программирования, я предлагаю вам исследовать все оконные менеджеры linux; Некоторые популярные:

  • гном-оболочка *
  • compiz
  • metacity
  • mutter
  • пила
]

Вам нужно будет выполнить проверку для каждого с помощью команды pgrep -l $WINDOW_MANAGER, где $WINDOW_MANAGER - это имя оконного менеджера, для которого вы хотите проверить. Команда pgrep проверяет запущенные процессы.

Я не уверен на 100%, считается ли Gnome Shell оконным менеджером; остальные оконные менеджеры я получил из списка в скрипте /usr/bin/gnome-wm. Этот скрипт на самом деле должен быть пригоден для использования (поскольку он присутствует при чистой установке), но в моем случае он пытается запустить compiz, который не является моим оконным менеджером по умолчанию (не в моем сеансе Gnome).

РЕДАКТИРОВАТЬ:

Ну, комментарий @Anarci кажется более точным. В моем случае это действительно показывало gnome-shell.

0
ответ дан 15 April 2013 в 06:52

Ничего из вышеперечисленного на самом деле не работало для меня, я просто хотел узнать, работал ли у меня Gnome в качестве моего текущего сеанса рабочего стола.

Это то, что сработало, откройте терминал

lsb_release -a

(чтобы проверить, какой вариант или версию я установил на своем компьютере с UBUNTU)

ls /usr/bin/*session

(запускает сессию рабочего стола / настольная среда, используемая в настоящее время)

gnome-shell --version 

(чтобы узнать, какая версия gnome установлена)

0
ответ дан 15 April 2013 в 06:52

Я нашел pstree, чтобы помочь.

Установка

sudo apt-get install pstree

выход

Это то, что я получил.

 ├─lightdm─┬─Xorg───2*[{Xorg}]
 │         ├─lightdm─┬─gnome-session─┬─bluetooth-apple───2*[{bluetooth-apple}]
 │         │         │               ├─compiz─┬─sh───gtk-window-deco───2*[{gtk-window-deco}]
 │         │         │               │        └─5*[{compiz}]
 │         │         │               ├─deja-dup-monito───2*[{deja-dup-monito}]
 │         │         │               ├─gnome-fallback-───2*[{gnome-fallback-}]
 │         │         │               ├─gnome-screensav───2*[{gnome-screensav}]
 │         │         │               ├─gnome-settings-───2*[{gnome-settings-}]
 │         │         │               ├─nautilus───2*[{nautilus}]
 │         │         │               ├─nm-applet───2*[{nm-applet}]
 │         │         │               ├─polkit-gnome-au───2*[{polkit-gnome-au}]
 │         │         │               ├─ssh-agent
 │         │         │               ├─telepathy-indic───2*[{telepathy-indic}]
 │         │         │               ├─update-notifier───2*[{update-notifier}]
 │         │         │               ├─vino-server───2*[{vino-server}]
 │         │         │               ├─zeitgeist-datah───{zeitgeist-datah}
 │         │         │               └─3*[{gnome-session}]
 │         │         └─{lightdm}
 │         └─2*[{lightdm}]
0
ответ дан 15 April 2013 в 06:52

В терминале введите env, чтобы увидеть все переменные среды. Вот некоторые из них:

XDG_CURRENT_DESKTOP - Сообщает вам, какую среду рабочего стола вы используете

GDMSESSION - Сообщает вам, какую опцию вы выбрали из lightdm приветствовать, чтобы войти.

Чтобы использовать их, перейдите в терминал и введите:

echo $XDG_CURRENT_DESKTOP

(будет выводить, например, «Unity», если вы используете Unity)

или

echo $GDMSESSION  

(Выводит, например, «ubuntu», если вы выбрали ubuntu в логине, или «ubuntu-2d», если вы выбрали его в логине.)

У вас есть другие, если вы посмотрите ближе на вывод из env, таких как DESKTOP_SESSION и COMPIZ_CONFIG_PROFILE

Так как то, что вы ищете, это имя того, что используется Window Manager, единственный способ увидеть, как получить это, посмотрев в список процессов. Для этого есть команда под названием pgrep ( Wikipedia ). Я сделал следующее, чтобы получить имя, так как параметр -l добавляет идентификатор процесса:

pgrep -l compiz |cut -d " " -f2, поскольку процесс выполняется одним и тем же пользователем, нет необходимости добавлять префикс sudo. Затем вы можете использовать это для создания сценария, который выполняет действие на основе диспетчера окон.

Чтобы искать другие типы, просто измените слово compiz на другое, например mutter, kwin и т. Д.

0
ответ дан 15 April 2013 в 06:52

Сценарий

Следующий скрипт является лучшим ответом на аналогичный вопрос, который я разместил на unix.se . Он также прекрасно работает с Unity и LXDE.

if [ "$XDG_CURRENT_DESKTOP" = '' ]
then
  desktop=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
else
  desktop=$XDG_CURRENT_DESKTOP
fi

desktop=${desktop,,}  # convert to lower case
echo "$desktop"
0
ответ дан 15 April 2013 в 06:52
#! /bin/bash
#  (GPL3+) Alberto Salvia Novella (es20490446e.wordpress.com)


windowManagerName () {
    window=$(xprop -root -notype)
    identifier=$(echo "${window}" | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}')
    attributes=$(xprop -id "${identifier}" -notype -f _NET_WM_NAME 8t)

    echo "${attributes}" |
        grep "_NET_WM_NAME = " |
        cut --delimiter=' ' --fields=3 |
        cut --delimiter='"' --fields=2
}


windowManagerName

Или в одной строке:

$ id= (xprop - базируются-notype | awk '1$ == "_NET_SUPPORTING_WM_CHECK": {печатают 5$} '); xprop - идентификатор "$ {идентификатор}"-notype-f _NET_WM_NAME 8 т | grep "_NET_WM_NAME = "| сокращение - разделитель ='' - fields=3 | сокращение - разделитель = '"' - fields=2

1
ответ дан 22 November 2019 в 22:46

Можно использовать названный инструмент inxi. Это может быть получено из Репозиториев Ubuntu:

sudo apt install inxi

или от GitHub: https://github.com/smxi/inxi

Просто выполните команду следующим образом:

inxi -Sx
System:    Host: blackhole Kernel: 5.1.15-050115-lowlatency x86_64 bits: 64 compiler: gcc v: 8.3.0
           Desktop: i3 4.16.1-178-g31c0f1b8 Distro: Ubuntu 19.04 (Disco Dingo)

Отметьте Desktop: i3 часть. В моем случае менеджер окон, который я использую, i3.

Опция -S информация о системе дисплеев и x добавляет информация о менеджере окон.

0
ответ дан 22 November 2019 в 22:46

Всего два цента.

$ sudo apt install neofetch
$ neofetch

enter image description here

7
ответ дан 19 March 2020 в 17:10

Другие вопросы по тегам:

Похожие вопросы: