Як визначити, який менеджер вікон працює


179

Чи є спосіб (наприклад, командна чи змінна середовище) визначити, який менеджер вікон є тим, хто активно працює в поточному сеансі?

Відповіді:


145

Якщо ви 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


4
На жаль, це не працює над ssh, навіть якщо ввімкнено X11.
Шрідхар Сарнобат

1
@ Sridhar-Sarnobat в ubuntu 15.04, запущені дані ssh -Y {host} 'wmctrl -m'повертають деякі значення (наприклад, "Ім'я: Compiz" та кілька N / A), але має сенс, що sshінформація про менеджера вікон буде обмежена.
Майкл

на дебіанах, що працюють під корицею, це не працює. вихід wmctrl -m - Ім'я: Mutter (Muffin), а $ XDG_CURRENT_DESKTOP = X-Cinnamon
Floyd

На Xubuntu Wily працює Window Maker 0.95.6 - wmctrl повідомляє N / A для всіх записів. GDMSESSION встановлений як звичайний wmaker, але XDG_CURRENT_DESKTOP взагалі не встановлений.
Май

@Mei, чи працює у вас Window Maker у будь-якій іншій системі, яку ви можете порівняти? Крім того, чи будь-який із wmctrl -d(Перерахуйте всі настільні комп’ютери, якими керує менеджер вікон), або wmctrl -l(Перелічити вікна, якими керує менеджер вікон) справно працювати на Xubuntu Wily з програмою Window Maker?
Джеймс Уолдбі - jwpat7

101

У системах 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 на Wayland)

  • 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

Єдність 3d

  • XDG_CURRENT_DESKTOP=Unity
  • GDMSESSION=ubuntu

Єдність 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

Васта 14.04 / 18.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

4
М’ята 13 (Кориця): XDG_CURRENT_DESKTOP = GNOME, GDMSESSION = кориця
rik-shaw

1
Lubuntu 12.04: XDG_CURRENT_DESKTOP = LXDE, GDMSESSION = Lubuntu
rik-shaw

Що щодо $ DESKTOP_SESSION? Як резервне рішення :)
Саввас Радевич

1
Що робити, якщо я не використовую GDM?
Роберт Сімер

6
І далі це не відповідає, який менеджер вікон я використовую!
Роберт Сімер

42

У термінальному типі, envщоб побачити всі змінні середовища. Деякі з них:

XDG_CURRENT_DESKTOP - повідомляє, яке середовище робочого столу ви використовуєте

GDMSESSION - повідомляє, який варіант ви вибрали з привітання lightdm для входу.

Щоб їх використовувати, перейдіть до терміналу і введіть:

echo $XDG_CURRENT_DESKTOP

(Виведе, наприклад, "єдність", якщо ви використовуєте Unity)

або

echo $GDMSESSION  

(Виводиться, наприклад, "ubuntu", якщо ви вибрали ubuntu для входу або "ubuntu-2d", якщо ви вибрали його для входу.)

У вас є інші , якщо придивитися , на виході , envяк DESKTOP_SESSION і COMPIZ_CONFIG_PROFILE

Оскільки те, що ти шукаєш - це ім'я того, що використовується Менеджер вікон, єдиний спосіб я бачу, як це отримати, переглядаючи список процесів. Для цього існує команда під назвою pgrep( Вікіпедія ). Я зробив наступне, щоб отримати ім'я, оскільки параметр -l додає ідентифікатор процесу:

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

Для пошуку інших типів, просто змінити слово compizдо іншого , як mutter, kwinі т.д ..


2
Ті просто кажуть мені ім'я сесії та середовище робочого столу. Наприклад, там написано "GNOME" - це середовище робочого столу, яке може використовувати Metacity, Mutter, Compiz або інших менеджерів вікон. У ньому написано "gnome-classic", що є назвою сеансу, немає такого менеджера вікон із цим ім'ям.
Анонім

1
Ось так. Знайдено команду, яка може допомогти зі списком процесів. pgrep. Перейшов до цієї частини, принаймні, вона показує ім'я менеджера вікон, якщо його знайдено. Спробую перевірити, чи можу я додати їх усіх туди разом. Ваше запитання дуже добре, оскільки Ubuntu 11.10 трохи заплутається, використовуючи Compiz (Або муркотіть, якщо Gnome 3.x), тому було б непогано вказати на фактичний менеджер вікон, який використовується в Unity.
Луїс Альварадо

$XDG_CURRENT_DESKTOPце поточне середовище робочого столу, а не менеджер вікон.
Кен Шарп

24

Я знайшов 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}]

1
це мене влаштувало там зі своєю власною системою buildroot.
jc__

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

1
Чи можете ви пояснити, як це працює? Крім того, я думаю, що ти пропускаєш )кінець.
Луї Маттійссен

@LouisMatthijssen 1. xprop -root -notypeвідображає всі властивості кореневого вікна (і випускає типи для легшого розбору), вихід надсилається awkчерез pipe; 2. awkІнструкція $1=="_NET[blah]CK:"{print $5}'порівнює перший стовпець кожного ряду вхідного сигналу, який він отримав через трубу, із заданим рядком, і якщо він знайде відповідність, він запускає код у дужках, який друкує п'ятий стовпець із цього рядка - так буває (цілком випадково, Б'юсь об заклад) - ідентифікатор атома "_NET_SUPPORTING_WM_CHECK"; 3. цей ідентифікатор знову використовується для отримання властивостей Windows Manager зxprop -id
cprn

4

Я також тестував KDE і мій висновок такий:

а) Графічним способом, з HardInfo: відповідь, як правило, знаходиться в "Операційній системі"> "Навколишньому середовищі робочого столу", але якщо ні, ви можете звернутися до "Змінні середовища". HardInfo готовий до всіх перевірених дистрибутивів, крім одного з KDE, але його можна легко та швидко встановити (лише 2 пакети в Linux Mint 13).

б) з командного рядка з допомогою наступної команди: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm". Елемент, який відображається в декількох рядках, повинен бути відповіддю (якщо є малюнок, то пункт із "сеансом" повинен бути рішенням).


У XFCE також є декілька gnome-...процесів (і kde kdevtmpfs)
Xen2050

2

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

Це те, що спрацювало, відкрити термінал

lsb_release -a

(щоб перевірити, який аромат чи версію я встановив на своїй машині UBUNTU)

ls /usr/bin/*session

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

gnome-shell --version 

(щоб дізнатися, яка версія gnome встановлена)


1
#! /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 -root -notype | awk '$ 1 == "_ NET_SUPPORTING_WM_CHECK:" {print $ 5}'); xprop -id "$ {id}" -notype -f _NET_WM_NAME 8t | grep "_NET_WM_NAME =" | вирізати --delimiter = '' - поля = 3 | вирізати --delimiter = '"' - поля = 2


0

Це можливо для dbus та служби обліку (обидва за замовчуванням в Ubuntu).

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

Варто зазначити, що я перевірив це за допомогою входу через lightdm (тобто графічний екран входу), він виявив класичний робочий стіл, як blackbox, і, очевидно, виявляє Unity. Я підозрюю, що це значення того, що користувач вибирає на екрані входу як сеанс, тому використовувати цю перевірку процесів трохи легше


0

Сценарій

Наступний сценарій привів як кращий відповідь на аналогічний питання , який я розмістив над на 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

Ви можете використовувати інструмент під назвою 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інформацію про систему та додає інформацію про менеджер вікон.


-3

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

Отже, якщо це призначено для цілей програмування, я пропоную вам провести дослідження для всіх менеджерів вікон Linux; деякі популярні:

  • gnome-shell *
  • compiz
  • метацити
  • бурмотіти
  • пиляння

Вам слід запустити чек для кожного з командою pgrep -l $WINDOW_MANAGER, де $WINDOW_MANAGERім'я менеджера вікон, який ви хочете перевірити. У pgrepкоманді перевіряє для запущених процесів.

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

Редагувати:

Ну коментар @Anarci здається більш точним. У моєму випадку це було показано gnome-shell.


1
Здається, pgrep підтримує регулярний вираз, тому можна використовувати візерунок з чергуваннями. pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
Анонім

1
Цього недостатньо: що робити, якщо користувач проводить кілька X сеансів з різними менеджерами? Потрібно, принаймні, перевірити, чи працює керування вікон на екрані, який вас цікавить (це можна зробити, вивчивши $DISPLAYйого оточення).
Жиль

Ubuntu 18.04 LTS Робочий стіл: Unity: Unity7: ubuntu Сесія: єдність
користувач2584621
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.