Чи є проста команда 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>
час прив’язки.
Назва диспетчера дисплея повинна містити DESKTOP_SESSION
echo $DESKTOP_SESSION
повертає для мене «гном».
РЕДАКТИВ
Ви праві. Вони збираються назад і вперед , на що XFCEs Bugzilla так що , ймовірно, не дуже надійні.
$DESKTOP_SESSION
є unknown
.
Як сказав @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$"
lightdm
. Рішення RedHat / Fedora з верхньої відповіді не спрацювало, конфігурація, схоже, перемістилася.
У деяких випадках wmctrl може допомогти. Ця утиліта сумісна з багатьма менеджерами Windows.
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 є надзвичайно модульним, так що якщо ви цього дуже хотіли, так, ви можете змішати робочі середовища та менеджери 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).
_NET_SUPPORTING_WM_CHECK
дає інформацію про менеджер вікон, а не про менеджер дисплеїв. Це навіть не завжди працює; у моїй системі це властивість встановлено на ідентифікатор вікна, але це питання не має імені.