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


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


151
2017-10-26 20:39


происхождения




ответы:


Если у вас есть 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
в то время как 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


126
2018-01-05 07:57



К сожалению, это не работает над ssh, даже если X11 включен. - Sridhar-Sarnobat
@ Sridhar-Sarnobat на ubuntu 15.04, работает ssh -Y {host} 'wmctrl -m' возвращает некоторые значения (например, «Имя: Compiz» и несколько N / A), но имеет смысл, что ssh будет иметь ограниченную информацию о диспетчере окон. - michael
на debian работает корица, это не работает. вывод wmctrl -m - это имя: Mutter (Muffin), а $ XDG_CURRENT_DESKTOP = X-Cinnamon - Floyd
На Xubuntu Wily работает Window Maker 0.95.6 - wmctrl сообщает N / A для всех записей. GDMSESSION настроен на wmaker-common, но XDG_CURRENT_DESKTOP не установлен вообще. - Mei
@Mei, у вас есть Window Maker, работающий на любых других системах, которые вы можете сравнить? Кроме того, сделайте одно из wmctrl -d (Список всех настольных компьютеров, управляемых диспетчером окон) или wmctrl -l (Список окон, управляемых оконным менеджером) работает нормально на Xubuntu Wily с помощью Window Maker? - James Waldby - jwpat7


В системах Linux я тестировал переменные среды 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 on Wayland)

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

Ubuntu 16.04


Единство (7)

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Ubuntu 14.04


Unity работает с Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Примечание. Также установлено значение MIR_SERVER_NAME

  • MIR_SERVER_NAME=session-$NUMBER

Unity работает без Mir

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

XFCE

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xfce

Ubuntu 12.04


KDE

  • XDG_CURRENT_DESKTOP=
  • GDMSESSION=kde-plasma

Unity 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Unity 2d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu-2d

Гном

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-shell

Gnome Classic

  • XDG_CURRENT_DESKTOP=GNOME
  • GDMSESSION=gnome-classic

Gnome Classic (без эффектов)

  • 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

Wasta 14,04

  • XDG_CURRENT_DESKTOP=X-Cinnamon 
  • GDMSESSION=cinnamon

Wasta 14.04 с использованием рабочего стола Gnome.

  • XDG_CURRENT_DESKTOP=GNOME 
  • GDMSESSION=gnome

Ubuntu Mate 18.04

  • XDG_CURRENT_DESKTOP=MATE
  • GDMSESSION=mate

Xubuntu 18.04

  • XDG_CURRENT_DESKTOP=XFCE
  • GDMSESSION=xubuntu

84
2017-12-10 20:38



Монетный двор 13 (Корица): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = корицей - rik-shaw
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu - rik-shaw
Как насчет $ DESKTOP_SESSION? В качестве резервного решения :) - Savvas Radevic
Что делать, если я не использую GDM? - Robert Siemer
И дальше он не отвечает, что оконный менеджер Я использую! - Robert Siemer


В терминальном типе env для просмотра всех переменных среды. Некоторые из них:

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

GDMSESSION - Сообщает вам, какой вариант вы выбрали из lightdm greeter для входа в систему.

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

echo $XDG_CURRENT_DESKTOP

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

или

echo $GDMSESSION  

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

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

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

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

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


40
2017-10-26 21:57



Они просто говорят мне имя сеанса и среду рабочего стола. Например, он говорит «GNOME», который представляет собой среду рабочего стола, которая может использовать Metacity, Mutter, Compiz или другие оконные менеджеры. В нем говорится «gnome-classic», который является именем сеанса, нет такого оконного менеджера с таким именем. - Anonymous
Вот так. Найдена команда, которая может помочь в списке процессов. pgrep. Попал в эту часть, по крайней мере, он показывает вам имя оконного менеджера, если он найден. Попытка проверить, могу ли я добавить их все вместе. Ваш вопрос очень хороший, так как Ubuntu 11.10 немного смущает с помощью Compiz (или mutter, если в Gnome 3.x), было бы неплохо указать фактический диспетчер окон, который используется в Unity. - Luis Alvarado♦
$XDG_CURRENT_DESKTOP это текущая среда рабочего стола, а не диспетчер окон. - Ken Sharp


я нашел 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}]

20
2018-04-22 04:59





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

8
2018-05-15 06:19



Можете ли вы объяснить, как это работает? Кроме того, я думаю, что вам не хватает ) в конце. - Louis Matthijssen
@LouisMatthijssen 1. xprop -root -notype отображает все свойства корневого окна (и опускает типы для упрощения синтаксического анализа), вывод отправляется на awk через трубу; 2. awk инструкция $1=="_NET[blah]CK:"{print $5}' сравнивает первый столбец каждой строки ввода, который он получил через трубу с заданной строкой, и если он находит совпадение, он запускает код в скобках, который печатает пятый столбец из этой строки - просто так происходит (полностью случайно, я уверен) быть идентификатором атома «_NET_SUPPORTING_WM_CHECK»; 3. Затем этот идентификатор используется снова, чтобы получить свойства диспетчера Windows с xprop -id - cprn


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

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

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


3
2018-04-15 22:51



XFCE также имеет несколько gnome-... процессов (и kde ударил kdevtmpfs) - Xen2050


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

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

lsb_release -a

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

ls /usr/bin/*session

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

gnome-shell --version 

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


1
2017-07-07 16:26





Следующий сценарий стал лучшим ответом на аналогичный вопрос, который я отправил на 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"

-1
2018-02-24 17:42





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

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

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


-1
2018-04-03 07:54