Вопрос или проблема
Я использую Linux и у меня есть несколько вопросов о Xsession. Насколько я понимаю, сценарий /etc/X11/Xsession
запускается, когда начинается сессия X Window System.
Но когда я изучал код в /etc/X11/Xsession.d
, я немного запутался. Скрипты здесь запускаются по порядку, 99x11-common_start
— последний, который содержит exec $STARTUP
. Я зарегистрировал эту переменную, и она просто init --user
.
Так что получается, что весь этот скрипт написан только для того, чтобы запустить init –user? Я удалил некоторые файлы и вошел в систему с другим пользователем, и все работало нормально (например, 75dbus_dbus-launch
). Значит ли это, что Xsession просто запускает init --user
?
Что насчет D-Bus сессии, кто ее запускает?
Запускается два демона D-Bus при загрузке: --session
и --system
. Демон в Xsession — это автобус сессии (пользователь владеет им).
~$ ps aux | grep dbus-daemon
message+ 944 0.0 0.0 44504 5640 ? Ss 07:55 0:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
sneetsh+ 2428 0.0 0.0 43864 4340 ? Ss 07:56 0:00 dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-xcqH0l6FdF
sneetsh+ 2522 0.0 0.0 43028 3932 ? S 07:56 0:00 /usr/bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3
sneetsh+ 4593 0.0 0.0 14328 964 pts/19 S+ 08:17 0:00 grep --color=auto dbus-daemon
Вывод выше был получен из Ubuntu 16.04 и использует systemd
.
-
Системный автобус запускается с помощью
systemd
~$ service dbus status ● dbus.service - D-Bus System Message Bus Loaded: loaded (/lib/systemd/system/dbus.service; static; vendor preset: enabled) Active: active (running) since Wed 2016-07-06 07:55:13 CET; 27min ago Docs: man:dbus-daemon(1) Main PID: 944 (dbus-daemon) Tasks: 1 Memory: 3.5M CPU: 1.574s CGroup: /system.slice/dbus.service └─944 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
-
Автобус сессии запускается с помощью
upstart
~$ initctl status dbus dbus start/running, process 2428 ~$ initctl show-config dbus dbus start on starting xsession-init
(Имейте в виду, что это демон upstart сессии, а не системный upstart)
Ubuntu до 15.10 использует upstart init.
Вы можете проверить это, используя pstree -up
. Другой способ — зарегистрировать переменную DBUS_SESSION_BUS_ADDRESS
из файла, который вы удалили, как вы сделали с STARTUP
.
Ответ или решение
Файлы в директории /etc/X11/Xsession.d/
используются для настройки и управления процессом сессии X Window System на системах Linux. Когда пользователь начинает сессию X, выполняется общий скрипт /etc/X11/Xsession
, который последовательно запускает все скрипты из директории /etc/X11/Xsession.d/
. Эти скрипты могут выполнять различные действия, такие как настройка окружения, запуск необходимых сервисов или выполнение пользовательских программ.
Основные цели файлов в /etc/X11/Xsession.d/
:
-
Настройка окружения: Скрипты могут устанавливать переменные окружения и конфигурации, необходимые для полноценной работы сессии. Например, они могут изменять настройки путей, шрифтов и других параметров.
-
Запуск необходимых демонов: Некоторые скрипты отвечают за запуск демонов, таких как
dbus
— сеансовый шина сообщений, которую приложения могут использовать для межпрограммного взаимодействия. -
Порядок выполнения: Скрипты запускаются в алфавитном порядке, и последними являются те, которые инициируют основную сессию. Например, скрипт
99x11-common_start
завершает процесс, запускающий оболочку, как указано в переменнойSTARTUP
, что часто являетсяinit --user
, что позволяет запрашивать пользовательский уровень обслуживания. -
Модульность и расширяемость: Благодаря использованию отдельных файлов в этой директории, администраторы и пользователи могут легко добавлять или удалять функциональность без изменения основного скрипта сессии.
Запуск dbus:
Система использует два типа демонов dbus
: системный и сеансовый. Системный демон запускается, как правило, при инициализации системы с помощью systemd
, тогда как сеансовый демон, необходимый для управления сеансовыми сообщениями для текущего пользователя, запускается в процессе Xsession, что позволяет приложениям обмениваться данными в рамках одной пользовательской сессии.
Ответы на ваши вопросы:
-
Неужели Xsession только запускает
init --user
? Нет, это не совсем так. В процессе запуска Xsession исполняются все скрипты из/etc/X11/Xsession.d/
, которые могут включать в себя разные настройки и вызов программ, необходимых для начала работы графической сессии, а не толькоinit --user
. -
Кто запускает сеансовый dbus? Сеансовый
dbus
, как уже отмечалось выше, запускается из скриптов в директории/etc/X11/Xsession.d/
, и, как правило, отвечает за взаимодействие приложений во время работы сеанса X.
Если вы удалили некоторые скрипты и они не мешают вашей работе с сессией, скорее всего, эти скрипты не были критически важными для вашего конкретного окружения или конфигурации.
При дальнейших манипуляциях с файлами в /etc/X11/Xsession.d/
, рекомендуется внимательно отслеживать зависимые процессы и конфигурации, чтобы избежать непредвиденных проблем с графической сессией.