Как определить, какой оконный менеджер запущен
Есть ли способ (например, команда или переменная окружения) определить, какой оконный менеджер активно работает в текущем сеансе?
16 ответов
Если у вас есть 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
В системах Linux я тестировал переменные среды XDG_CURRENT_DESKTOP а также GDMSESSION и получил следующие результаты.
Вы можете использовать эту строку, чтобы получить вывод:
printf 'Desktop: %s\nSession: %s\n' "$XDG_CURRENT_DESKTOP" "$GDMSESSION"
Ubuntu 18.04 (Ubuntu)
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu
Ubuntu 18.04 (Ubuntu on Wayland)
XDG_CURRENT_DESKTOP=ubuntu:GNOMEGDMSESSION=ubuntu-wayland
Ubuntu 16.04
Единство (7)
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Ubuntu 14.04
Единство с Миром
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Примечание MIR_SERVER_NAME также установлено
MIR_SERVER_NAME=session-$NUMBER
Unity работает без Мира
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
XFCE
XDG_CURRENT_DESKTOP=XFCEGDMSESSION=xfce
Ubuntu 12.04
KDE
XDG_CURRENT_DESKTOP=GDMSESSION=kde-plasma
Единство 3d
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu
Unity 2d
XDG_CURRENT_DESKTOP=UnityGDMSESSION=ubuntu-2d
Гном
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-shell
Гномик Классик
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-classic
Gnome Classic (без эффектов)
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome-fallback
Другие дистрибутивы на основе Ubuntu
Мята 13 (Корица)
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=cinnamon
Монетный двор 16 (издание KDE)
XDG_CURRENT_DESKTOP=KDEGDMSESSION=default
Мята 17 (Корица)
XDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=default
Lubuntu 12.04
XDG_CURRENT_DESKTOP=LXDEGDMSESSION=Lubuntu
Wasta 14.04 / 18.04
XDG_CURRENT_DESKTOP=X-CinnamonGDMSESSION=cinnamon
Wasta 14.04 с помощью рабочего стола Gnome.
XDG_CURRENT_DESKTOP=GNOMEGDMSESSION=gnome
Ubuntu Mate 18.04
XDG_CURRENT_DESKTOP=MATEGDMSESSION=mate
Xubuntu 18.04
XDG_CURRENT_DESKTOP=XFCEGDMSESSION=xubuntu
В терминале типа env чтобы увидеть все переменные среды. Некоторые из них:
XDG_CURRENT_DESKTOP - сообщает, какую среду рабочего стола вы используете
GDMSESSION - Сообщает вам, какую опцию вы выбрали на приветствии lightdm для входа.
Чтобы использовать их, перейдите в терминал и введите:
echo $XDG_CURRENT_DESKTOP
(Будет выводить, например, "Unity", если вы используете 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, так далее..
Я нашел 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
Всего два цента.
$ sudo apt install neofetch
$ neofetch
ht tps://ask-ubuntu.ru/images/883d6ebdb5d51949623e3e567c1ce1118a112953.png
#! /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=' ' --fields=3 | вырезать --delimiter='"' --fields=2
Я также тестировал с KDE, и мой вывод:
а) Графически, с HardInfo: ответ обычно находится в "Операционная система"> "Среда рабочего стола", но если нет, вы можете посмотреть "Переменные среды". HardInfo готов ко всем протестированным дистрибутивам, кроме дистрибутива с KDE, но его можно легко и быстро установить (только 2 пакета в Linux Mint 13).
б) Командная строка, с помощью этой команды: ps -A | egrep -i "gnome|kde|mate|cinnamon|lx|xfce|jwm", Элемент, который появляется в большем количестве строк, должен быть ответом (если есть ничья, то решение с "сессией" должно быть решением).
Ничто из вышеперечисленного на самом деле не помогло мне, я просто хотел узнать, запущен ли Gnome в качестве моего текущего сеанса рабочего стола.
Это то, что сработало, откройте терминал
lsb_release -a
(чтобы проверить, какой вариант или версию я установил на свой компьютер UBUNTU)
ls /usr/bin/*session
(запускает, какой сеанс рабочего стола / среда рабочего стола в настоящее время используется)
gnome-shell --version
(чтобы узнать какая версия gnome установлена)
Этому вопросу 9 лет, но он по-прежнему актуален. На моем Ubuntu 20.04.2 LTS я получаю:
wmctrl -m: GNOME Shell
inxi -Sxx: Desktop = Gnome 3.36.4; wm = гном-оболочка; dm = GDM3 3.36.3
gnome-shell -- версия : 3.36.4
env :GDM_SESSION : ubuntu ; DESKTOP_SESSION: Ubuntu ; XDG_CURRENT_DESKTOP: ubuntu:GNOME ,
НО
xprop... (от ruario): _NET_WM_NAME: GNOME Shell; _GNOME_WM_KEYBINDINGS: Mutter, оболочка GNOME; _MUTTER_VERSION: 3.36.7
и neofetch : de = GNONE; wm = Mutter
Из этого я делаю вывод (но не совсем уверен): GNOME — это менеджер рабочего стола и оболочка GNOME .оконный менеджер (Mutter должен быть следом моих предыдущих версий LTS 16.04 и 18.04).
Вы можете использовать инструмент под названием 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 добавляет информацию о оконном менеджере.
Это возможно благодаря dbus и службе учетных записей (обе по умолчанию в Ubuntu).
$ qdbus --system org.freedesktop.Accounts \
> /org/freedesktop/Accounts/User1000 \
> org.freedesktop.Accounts.User.XSession
ubuntu
Стоит отметить, что я проверил это при входе в систему через lightdm (то есть графический экран входа в систему), он обнаружил классический рабочий стол, такой как черный ящик, и, очевидно, обнаружил Unity. Я подозреваю, что это значение того, что пользователь выбирает на экране входа в качестве сеанса, поэтому немного проще использовать эту проверку для процессов
Одно решение, которое работает через SSH:
$ cat /etc/X11/default-display-manager | xargs basename
lightdm
Среда рабочего стола lxqt (например, Lubuntu >= 18.10)
Один путь открыт
~/.config/lxqt/session.confи найти
[General]
__userfile__=true
window_manager=openbox // <==
скрипт
Следующий скрипт является лучшим ответом на аналогичный вопрос, который я разместил на 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"
Я могу думать только о проверке известных оконных менеджеров в запущенных процессах. Раньше в gconf был ключ, для которого был задан предпочтительный оконный менеджер, но он не рекомендуется с Gnome 2.12.
Итак, если это для целей программирования, я предлагаю вам исследовать все оконные менеджеры linux; некоторые популярные:
- гном-оболочки *
- Compiz
- Metacity
- бормотание
- пила-рыба
Вы должны выполнить проверку для каждого с помощью команды pgrep -l $WINDOW_MANAGER, где $WINDOW_MANAGER Имя менеджера окон, который вы хотите проверить. pgrep Команда проверяет запущенные процессы.
Я не уверен на 100%, считается ли Gnome Shell оконным менеджером; остальные оконные менеджеры я получил из списка в /usr/bin/gnome-wm скрипт. Этот скрипт на самом деле должен быть пригоден для использования (поскольку он присутствует в чистой установке), но в моем случае он пытается запустить compiz который не является моим оконным менеджером по умолчанию (не в моем сеансе Gnome).
РЕДАКТИРОВАТЬ:
Ну, комментарий @Anarci кажется более точным. В моем случае это действительно показывало gnome-shell,