Чи є проста команда Linux, яка підкаже мені, що таке мій менеджер дисплеїв?


59

Чи є проста команда 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>час прив’язки.
sjas

1
Ця відповідь повинна бути першою, яку ви побачите, оскільки більшість користувачів, які сьогодні мають подібні запитання, мають системні дистрибутиви. Дякую. Це мені допомогло.
Adergaard

3
@allsyed у моєму файлі немає / usr / bin, він має / usr / sbin. Linux-Mint 18
Prvt_Yadav

2
У моєму випадку (Centos 7) я повинен писати | grep '/ usr / sbin'
Девід

16

Якщо ви використовуєте systemd, значить

systemctl status display-manager

Відобразить ім'я та стан активної служби диспетчера дисплеїв на вашій машині.


З Debian 9 це єдиний, хто працював на мене. Інші системні методи нічого не повернули.
mickeyf

10

Назва диспетчера дисплея повинна містити DESKTOP_SESSION

echo $DESKTOP_SESSION

повертає для мене «гном».

РЕДАКТИВ
Ви праві. Вони збираються назад і вперед , на що XFCEs Bugzilla так що , ймовірно, не дуже надійні.


@frabjous: А як щодо gdm та kdm? Вони також відображають менеджерів або просто менеджери для входу?
ptrcao

Я, мабуть, випадково видалив коментар frabjous трохи вище, тому що я пам'ятаю, що він зауважив, що Gnome - це середовище робочого столу, а не менеджер дисплеїв. Ця тема рясніє плутаниною ...
ptrcao

Це дає інформацію про… сеанс робочого столу, який, ймовірно, буде тим же самим, що і на робочому середовищі, але може бути зовсім іншим, якщо ви не використовуєте робоче середовище або маєте своєрідну конфігурацію. На машині, де я це пишу, $DESKTOP_SESSIONє unknown.
Жил 'ТАК - перестань бути злим'

+1, echo $ DESKTOP_SESSION також повертає мені gnome ... але, може, це працює лише для gnome?
Тревор Бойд Сміт

Якщо він працює лише для gnome, ця команда допоможе вам лише вивести "так, у вас є Gnome або ні, у вас немає gnome". Коли питання хоче дізнатися більше, ніж це.
Тревор Бойд Сміт

2

Як сказав @Gilles, менеджер дисплеїв запустить ваше робоче середовище.

За даними Debian Wiki , здебільшого вони закінчуються dmлише винятком slim.

Тому цього має бути достатньо для більшості потреб людей:

ps auxf | awk '{print $11}' | \grep --color -e dm$ -e slim$

Або, звичайно, він існує як батьківський процес і не має роздвоєння (крім системи init):

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 є надзвичайно модульним, так що якщо ви цього дуже хотіли, так, ви можете змішати робочі середовища та менеджери Windows. Адже менеджер вікон - це лише спосіб фарбування вікон (це простий вид).

Тож якщо ви візьмете на себе гном, metacity раніше був менеджером windows, але тепер його замінив 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 with kde та навпаки? І це насправді працює, тому що gdm / kdm / все, що дозволяє вам вибрати менеджер дисплеїв, тобто читання файлу конфігурації, як ви згадали, не працює, якщо ви не використовуєте наданий за замовчуванням ...
Mathieu

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