Есть ли простая команда Linux, которая скажет мне, что мой менеджер дисплеев?
Я использую Xfce. Разные среды рабочего стола обычно связаны с разными дисплеями?
Есть ли простая команда Linux, которая скажет мне, что мой менеджер дисплеев?
Я использую Xfce. Разные среды рабочего стола обычно связаны с разными дисплеями?
Ответы:
К сожалению, конфигурация отличается для каждого дистрибутива:
Debian / Ubuntu
/etc/X11/default-display-manager
RedHat (должен также применяться к Fedora)
/etc/sysconfig/desktop
OpenSUSE
/etc/sysconfig/displaymanager
cat
.
/usr/bin/xdm
- означает ли это, что xdm - мой менеджер дисплеев?
Нет Диспетчер отображения не обязательно связан с чем-либо еще, работающим на том же X-сервере. Диспетчер отображения запускается до входа в систему; это выбирает системный администратор. Все остальное (оконный менеджер, менеджер сессий, среда рабочего стола и т. Д.) Выбирается пользователем. Диспетчер дисплеев даже не требуется: если вы входите в текстовый режим и запускаете графический интерфейс с помощью startx
, диспетчер дисплеев не задействуется.
Вы можете проверить, какой менеджер дисплеев по умолчанию используется в вашей системе . Это даст правильный ответ только при некоторых общих, но не универсальных предположениях. Если по какой-либо причине вы вручную запустили другой менеджер, этот метод не скажет вам.
Хорошая ставка - узнать идентификатор процесса X-сервера: его родительский процесс, вероятно, является диспетчером отображения, если он есть. Это требует, чтобы ваши клиенты работали на той же машине, что и X-сервер. lsof /tmp/.X11-unix/X${DISPLAY#:}
покажет процесс X-сервера (при условии, что сокеты X живут в /tmp/.X11-unix
).
x=$(lsof -F '' /tmp/.X11-unix/X0); x=${x#p}
ps -p $(ps -o ppid -p $x)
(Объяснение: lsof -F ''
печатает вывод как p1234
. -F
Опция означает машинно-разборчивый формат вывода и ''
означает печатать только PID с буквой p
перед ним. x=${x#p}
Удаляет начальную букву p
. Последняя строка получает PID родителя X-сервера ( ps -o ppid -p $x
) и вызывает, ps
чтобы показать информацию об этом родительском процессе.)
Некоторые дистрибутивы позволяют устанавливать несколько дисплеев дисплеев. Там будет только один работающий, если у вас нет системы на несколько мест. Чтобы вывести список всех установленных пакетов диспетчера отображения в Debian и его производных:
aptitude -F %p search '~i ~P^x-display-manager$'
или же
</var/lib/dpkg/status awk '
/^Package: / {package = $2}
/^Provides: .*x-display-manager/ {print package}'
Если вы используете системный дистрибутив. Эта команда даст имя диспетчера отображения, настроенного в настоящее время, поскольку у вас может быть установлено несколько диспетчера дисплеев.
grep '/usr/s\?bin' /etc/systemd/system/display-manager.service
ВЫХОД будет что-то вроде
ExecStart=/usr/bin/mdm
Похоже, я использую диспетчер отображения мяты.
grep '/usr/bin' /etc/systemd/system/display-manager.service
. (И, строго говоря, поскольку в нем /usr/bin
нет символов, характерных для оболочки, вам не нужно его заключать в кавычки - но это не повредит.)
cat <file> | grep <searchterm>
вместо второй из, grep <searchterm> <file>
когда grepping.
Если вы используете systemd, то
systemctl status display-manager
Будет отображать имя и статус службы активного диспетчера отображения на вашем компьютере.
Имя диспетчера отображения должно быть в DESKTOP_SESSION
echo $DESKTOP_SESSION
возвращает "гном" для меня.
РЕДАКТИРОВАТЬ
Вы правы. Они обсуждают это на bugzilla XFCE, так что это, вероятно, не очень надежно.
$DESKTOP_SESSION
есть unknown
.
Как сказал @Gilles, менеджер дисплеев запустит среду вашего рабочего стола.
Согласно Debian Wiki , в большинстве случаев это заканчивается dm
, за исключением только slim
.
Так что этого должно хватить для большинства потребностей людей:
ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$
Или, конечно, он существует как родительский процесс и не разветвляется (кроме как из системы инициализации):
ps auxf | awk '{print $11}' | \grep -e "^/.*dm$" -e "/.*slim$"
lightdm
. Решение RedHat / Fedora из верхнего ответа не сработало, конфигурация, похоже, изменилась.
В некоторых случаях wmctrl может помочь. Эта утилита совместима со многими оконными менеджерами.
wmcrt -m
должен отображать имя используемого в данный момент оконного менеджера.
Как уже упоминалось, в этой теме много путаницы. Первоначальный вопрос - какой диспетчер отображения, а не менеджер рабочего стола или менеджер окон? В настоящее время я использую Xfwm4, который является оконным менеджером Xfce, и lxdm, который является легким диспетчером отображения X11 (из LXDE, а не Xfce). Вы должны быть в состоянии увидеть, какой менеджер дисплея вы используете через htop. Вы, наверное, давно обнаружили ответ за последние 4 года :)
Вы можете сделать это с помощью стороннего скрипта, называемого screenfetch.
Screenfetch - это bash-скрипт, доступный для Linux, который отображает системную информацию вместе с ASCII-версией дистрибутива Linux. Логотип системы
Установить через менеджер пакетов
sudo apt-get install screenfetch
(при условии, что вы используете Debian)
и просто запустить
screenfetch
в своем терминале
Ссылка на проект https://github.com/KittyKatt/screenFetch
X очень модульный, поэтому, если вы действительно этого хотите, да, вы можете смешивать среды рабочего стола и менеджеры окон. В конце концов, оконный менеджер - это просто способ рисовать окна (это простой вид).
Так что если вы взяли gnome, то метасити раньше был менеджером окон, но теперь его заменил Mutter.
Проблема смешивания заключается в современных средах рабочего стола, рабочий стол и оконный менеджер тесно связаны друг с другом. Слишком много микширования может привести к снижению функциональности.
Как уже упоминалось, $ DESKTOP_SESSION работает, но если вы хотите задать свой сервер X11, вы можете сделать это:
xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2) WM_NAME
Который разлагается на
xprop -root _NET_SUPPORTING_WM_CHECK | cut -d\# -f2
0x1000052
xprop -id 0x1000052 WM_NAME
WM_NAME(STRING) = "xfwm4"
Который получает идентификатор окна, созданного оконным менеджером. В спецификации сказано (http://standards.freedesktop.org/wm-spec/1.3/ar01s03.html):
_NET_SUPPORTING_WM_CHECK, WINDOW/32
The Window Manager MUST set this property on the root window to be the ID
of a child window created by himself, to indicate that a compliant window
manager is active.
Затем вы запрашиваете свойство WM_NAME в указанном окне.
WM_NAME:
The WM_NAME property is an uninterpreted string that the client wants the
window manager to display in association with the window (for example, in
a window headline bar).
_NET_SUPPORTING_WM_CHECK
дает информацию о диспетчере окон, а не о диспетчере отображения. Это даже не всегда работает; в моей системе это свойство имеет идентификатор окна, но у рассматриваемого окна нет имени.