Відповіді:
Якщо ви 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
ssh -Y {host} 'wmctrl -m'
повертають деякі значення (наприклад, "Ім'я: Compiz" та кілька N / A), але має сенс, що ssh
інформація про менеджера вікон буде обмежена.
wmctrl -d
(Перерахуйте всі настільні комп’ютери, якими керує менеджер вікон), або wmctrl -l
(Перелічити вікна, якими керує менеджер вікон) справно працювати на Xubuntu Wily з програмою Window Maker?
У системах Linux я тестував змінні оточення XDG_CURRENT_DESKTOP
і GDMSESSION
і отримав наступні результати.
Ви можете використовувати цей рядок, щоб отримати вихід:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=ubuntu:GNOME
GDMSESSION=ubuntu-wayland
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
Примітка також встановлено MIR_SERVER_NAME
MIR_SERVER_NAME=session-$NUMBER
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xfce
XDG_CURRENT_DESKTOP=
GDMSESSION=kde-plasma
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu
XDG_CURRENT_DESKTOP=Unity
GDMSESSION=ubuntu-2d
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-shell
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-classic
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome-fallback
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=KDE
GDMSESSION=default
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=default
XDG_CURRENT_DESKTOP=LXDE
GDMSESSION=Lubuntu
XDG_CURRENT_DESKTOP=X-Cinnamon
GDMSESSION=cinnamon
XDG_CURRENT_DESKTOP=GNOME
GDMSESSION=gnome
XDG_CURRENT_DESKTOP=MATE
GDMSESSION=mate
XDG_CURRENT_DESKTOP=XFCE
GDMSESSION=xubuntu
У термінальному типі, 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
і т.д ..
$XDG_CURRENT_DESKTOP
це поточне середовище робочого столу, а не менеджер вікон.
Я знайшов 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}]
xprop -id $(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}') -notype -f _NET_WM_NAME 8t
)
кінець.
xprop -root -notype
відображає всі властивості кореневого вікна (і випускає типи для легшого розбору), вихід надсилається awk
через pipe; 2. awk
Інструкція $1=="_NET[blah]CK:"{print $5}'
порівнює перший стовпець кожного ряду вхідного сигналу, який він отримав через трубу, із заданим рядком, і якщо він знайде відповідність, він запускає код у дужках, який друкує п'ятий стовпець із цього рядка - так буває (цілком випадково, Б'юсь об заклад) - ідентифікатор атома "_NET_SUPPORTING_WM_CHECK"; 3. цей ідентифікатор знову використовується для отримання властивостей Windows Manager зxprop -id
Я також тестував KDE і мій висновок такий:
а) Графічним способом, з HardInfo: відповідь, як правило, знаходиться в "Операційній системі"> "Навколишньому середовищі робочого столу", але якщо ні, ви можете звернутися до "Змінні середовища". HardInfo готовий до всіх перевірених дистрибутивів, крім одного з KDE, але його можна легко та швидко встановити (лише 2 пакети в Linux Mint 13).
б) з командного рядка з допомогою наступної команди: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm"
. Елемент, який відображається в декількох рядках, повинен бути відповіддю (якщо є малюнок, то пункт із "сеансом" повинен бути рішенням).
gnome-...
процесів (і kde kdevtmpfs
)
Ніщо з вищезазначеного насправді не працювало для мене, я просто хотів знати, чи був у мене Gnome запуск як мого поточного сеансу на робочому столі.
Це те, що спрацювало, відкрити термінал
lsb_release -a
(щоб перевірити, який аромат чи версію я встановив на своїй машині UBUNTU)
ls /usr/bin/*session
(запускає сеанс робочого столу / середовище робочого столу, який зараз використовується)
gnome-shell --version
(щоб дізнатися, яка версія gnome встановлена)
#! /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
Це можливо для dbus та служби обліку (обидва за замовчуванням в Ubuntu).
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Варто зазначити, що я перевірив це за допомогою входу через lightdm (тобто графічний екран входу), він виявив класичний робочий стіл, як blackbox, і, очевидно, виявляє Unity. Я підозрюю, що це значення того, що користувач вибирає на екрані входу як сеанс, тому використовувати цю перевірку процесів трохи легше
Наступний сценарій привів як кращий відповідь на аналогічний питання , який я розмістив над на 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"
Ви можете використовувати інструмент під назвою 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
інформацію про систему та додає інформацію про менеджер вікон.
Я можу лише думати про перевірку відомих менеджерів вікон у запущених процесах. Раніше в gconf був ключ, який був призначений бажаному менеджеру вікон, але його застаріло з часу Gnome 2.12.
Отже, якщо це призначено для цілей програмування, я пропоную вам провести дослідження для всіх менеджерів вікон Linux; деякі популярні:
Вам слід запустити чек для кожного з командою pgrep -l $WINDOW_MANAGER
, де $WINDOW_MANAGER
ім'я менеджера вікон, який ви хочете перевірити. У pgrep
команді перевіряє для запущених процесів.
Я не на 100% впевнений, чи вважають Gnome Shell менеджером вікон; решту менеджерів вікон я отримав зі списку /usr/bin/gnome-wm
сценарію. Цей сценарій насправді повинен бути корисним (з моменту його чистого встановлення), але в моєму випадку він намагається запустити, compiz
який не є моїм менеджером вікон за замовчуванням (не в моєму сеансі Gnome).
Редагувати:
Ну коментар @Anarci здається більш точним. У моєму випадку це було показано gnome-shell
.
pgrep -l "compiz|metacity|mutter|kwin|sawfish|fluxbox|openbox|xmonad"
$DISPLAY
його оточення).