Есть ли простая команда Linux, которая скажет мне, что мой менеджер дисплеев?


58

Есть ли простая команда Linux, которая скажет мне, что мой менеджер дисплеев?

Я использую Xfce. Разные среды рабочего стола обычно связаны с разными дисплеями?


1
В Википедии есть довольно хорошая статья на эту тему: en.wikipedia.org/wiki/X_display_manager_%28program_type%29
Let_Me_Be

Ответы:


46

К сожалению, конфигурация отличается для каждого дистрибутива:

Debian / Ubuntu

/etc/X11/default-display-manager

RedHat (должен также применяться к Fedora)

/etc/sysconfig/desktop

OpenSUSE

/etc/sysconfig/displaymanager

1
Да, почему вы говорите мне о конфигурации ...?
ptrcao

2
@ptrcao Потому что он определяет, какой менеджер отображения вы используете.
Let_Me_Be

1
Предположим, я не знаю, что такое мой менеджер дисплеев, и я хочу выяснить это с помощью терминала. Как бы я это сделал?
ptrcao

3
@ptrcao Вы бы заглянули в эти файлы. Либо открыв их в вашем любимом редакторе, либо просто делаю cat.
Let_Me_Be

1
В нем только одна строка: /usr/bin/xdm- означает ли это, что xdm - мой менеджер дисплеев?
ptrcao

23

Нет Диспетчер отображения не обязательно связан с чем-либо еще, работающим на том же 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}'

18

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

grep '/usr/s\?bin' /etc/systemd/system/display-manager.service

ВЫХОД будет что-то вроде

ExecStart=/usr/bin/mdm

Похоже, я использую диспетчер отображения мяты.


3
Вы представили классический пример бесполезного использования кошки - это совершенно приемлемо, и даже предпочтительнее, скажем так grep '/usr/bin' /etc/systemd/system/display-manager.service. (И, строго говоря, поскольку в нем /usr/binнет символов, характерных для оболочки, вам не нужно его заключать в кавычки - но это не повредит.)
G-Man говорит: «Восстановите Монику»

6
«бесполезное использование кошки» всегда несколько относительно. Я предпочитаю редактировать последнюю строку cat <file> | grep <searchterm>вместо второй из, grep <searchterm> <file>когда grepping.
sjas

1
Этот ответ должен быть первым, который вы увидите, так как большинство пользователей, имеющих такой тип вопросов, сегодня используют системные дистрибутивы. Благодарю. Это помогло мне.
Adergaard

3
@ allsyed В моем файле нет / usr / bin, в нем есть / usr / sbin. Linux-Mint 18
Prvt_Yadav

2
В моем случае (Centos 7) я должен написать | grep '/ usr / sbin'
Davide

16

Если вы используете systemd, то

systemctl status display-manager

Будет отображать имя и статус службы активного диспетчера отображения на вашем компьютере.


С Debian 9 это единственный, который работал на меня. Другие методы systemd ничего не возвращали.
mickeyf_supports_Monica

10

Имя диспетчера отображения должно быть в DESKTOP_SESSION

echo $DESKTOP_SESSION

возвращает "гном" для меня.

РЕДАКТИРОВАТЬ
Вы правы. Они обсуждают это на bugzilla XFCE, так что это, вероятно, не очень надежно.


@frabjous: А как насчет GDM и KDM? Они тоже менеджеры отображения или просто менеджеры входа?
ptrcao

Должно быть, я случайно удалил комментарий frabjous чуть выше, потому что, как я помню, он заметил, что Gnome - это среда рабочего стола, а не менеджер дисплеев. Эта тема изобилует путаницей ...
ptrcao

Это дает информацию о ... сеансе рабочего стола, который, скорее всего, будет тем же, что и среда рабочего стола, но может быть совсем другим, если вы не используете среду рабочего стола или у вас особая конфигурация. На машине, где я пишу это, $DESKTOP_SESSIONесть unknown.
Жиль "ТАК - перестать быть злым"

+1, echo $ DESKTOP_SESSION также возвращает мне гнома ... но, может быть, это работает только для гнома?
Тревор Бойд Смит

Если это работает только для gnome, эта команда поможет вам вывести «да, у вас есть Gnome или нет, у вас нет gnome». Когда вопрос хочет узнать больше, чем это.
Тревор Бойд Смит

2

Как сказал @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$" 

1
Это единственное решение, которое сработало для меня. Выяснил, что мой Fedora 23 минимальный с надстройкой LXDE (не LXDE Spin) работает lightdm. Решение RedHat / Fedora из верхнего ответа не сработало, конфигурация, похоже, изменилась.
Даниэль Санер


0

Как уже упоминалось, в этой теме много путаницы. Первоначальный вопрос - какой диспетчер отображения, а не менеджер рабочего стола или менеджер окон? В настоящее время я использую Xfwm4, который является оконным менеджером Xfce, и lxdm, который является легким диспетчером отображения X11 (из LXDE, а не Xfce). Вы должны быть в состоянии увидеть, какой менеджер дисплея вы используете через htop. Вы, наверное, давно обнаружили ответ за последние 4 года :)


На самом деле никогда не делал ... На самом деле совсем отказался от Linux и перешел на темную сторону: D
ptrcao

0

Вы можете сделать это с помощью стороннего скрипта, называемого screenfetch.

Screenfetch - это bash-скрипт, доступный для Linux, который отображает системную информацию вместе с ASCII-версией дистрибутива Linux. Логотип системы

Установить через менеджер пакетов sudo apt-get install screenfetch(при условии, что вы используете Debian)

и просто запустить screenfetch в своем терминале

Ссылка на проект https://github.com/KittyKatt/screenFetch


-1

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). 

@frabjous: Xfwm4 - оконный менеджер Xfce. Это то же самое, что менеджер дисплеев?
ptrcao

@Mathieu Вы говорите о менеджерах окон, а не о дисплеях.
Let_Me_Be

@Let_Me_Be Да, но в большинстве случаев ваш оконный менеджер привязан к вашему диспетчеру отображения ... Как часто вы используете оконный менеджер gnome с kde и наоборот? И это на самом деле работает, потому что gdm / kdm / независимо от того, что вы можете выбрать свой менеджер дисплея, то есть чтение файла конфигурации, как вы упомянули, не работает, если вы не используете предоставленный по умолчанию ...
Матье

_NET_SUPPORTING_WM_CHECKдает информацию о диспетчере окон, а не о диспетчере отображения. Это даже не всегда работает; в моей системе это свойство имеет идентификатор окна, но у рассматриваемого окна нет имени.
Жиль "ТАК - перестань быть злым"

@Mathieu Это зависит от распределения. Обычно, когда вы устанавливаете KDE-версию дистрибутива, вы получаете KDM, а когда вы используете версию Gnome, вы получаете GDM. Но то, что вы увидите все больше и больше, - это официальная поддержка только одного диспетчера дисплея (обычно более легкий вариант, чем GDM / KDM).
Let_Me_Be

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.