Документация: Архитектура Linux-сессии

20

Я ищу хорошую обзорную документацию, описывающую стек демонов и сервисов, задействованных в современной сессии Linux. Несмотря на то, что я прочитал различные документы о dbus, и systemdя до сих пор не понимаю общую картину.

В частности, я ищу ответы на эти вопросы (не отвечайте на вопросы, они должны только уточнить, какую документацию я ищу):

  • После входа в систему, какой процесс является корнем сеанса пользователя?

  • Какие процессы следует запустить и почему? Я ищу независимый от рабочего стола ответ, независимо от того, запущен ли Gnome, KDE, FVWM или простая оболочка.

  • Какую роль играют все эти демоны? Кто из них будет бежать один, а кто зависит от других? Кто должен начинаться кем, почему и как долго? И кто должен поддерживать этот зоопарк?

Я спрашиваю, потому что я обнаружил , что у меня есть целый зоопарк демоны работают сразу после загрузки: systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. Но не достаточно: Помимо этого, бег ультра-легкого PDF-просмотрщик zathura дополнительно заполнит мою сессию с dbus-launch, dbus-daemon, at-spi2-registrydи at-spi-bus-launcher, последним запуском еще другим dbus-daemon. Никого из них там не было, никто не был приглашен, но они будут оставаться в доме, вызывая у меня жуткое чувство, пока я не выйду из дома. Я уверен, что что-то здесь не хватает ...

Другой пример: после входа в систему у меня systemdработает пользовательский UID, но я понятия не имею, что он должен делать (начиная с версии 206, я думаю, я не должен использовать это в качестве диспетчера сеансов, верно?). У него есть дочерний процесс (sd-pam), о котором я не смог найти документацию.

Что они делают? В чем идея этой установки?

Чтобы прояснить мою точку зрения: в «старые времена» было достаточно знать, loginчто запустит мою оболочку входа в систему ( bashвыполняя ~/.profile), и с этого момента я мог бы продолжить создание сеанса, в зависимости от обстоятельств, может быть, запуска screenили startx.

Штефана
источник
4
На этот вопрос нельзя ответить, потому что каждый дистрибутив делает свое дело. Что еще хуже, окружение рабочего стола KDE и GNOME сильно различается, что относится к тому, что происходит после запуска X Windowing System. Еще хуже то, что дистрибутивы изменяют свой способ сделать это - вы упомянули systemd, который является относительно новым. Теперь, если вам нужен ответ, не зависящий от распространения, это «ядро Linux запускает init, а все остальное зависит от того, как настроен init». Этот ответ является как поверхностным, так и широким, в то время как для каждого глубокого ответа вам придется сузить свой вопрос, по крайней мере, до дистрибутивных версий.
Торстен Стаерк
1
Пожалуйста, разделите ваш вопрос. Например, я мог бы попросить вас искать gnome-session и startkde как процесс «root session», который потребовал бы большего количества объяснений.
Торстен Стэрк
1
@ thorsten-staerk: «нельзя ответить, потому что каждый дистрибутив делает свое дело». То есть вы говорите, что я не могу предположить, какие демоны работают? Я не могу в это поверить. Извините, но разделение вопроса не даст ответ, который я ищу. Но я попытаюсь перефразировать «Desktop-agnostic»: я ищу наименьший общий знаменатель или минимальный набор работающих демонов (и обоснование для каждого из них), ожидаемый в сеансе. Как они взаимодействуют и как этот набор изменяется с различными видами сеансов (есть ли dbusd в терминальном сеансе? Через SSH?)
stefan
1
Linux работает на устройствах, которые имеют только ЖК-дисплей. Он также работает на мобильных телефонах, в которых нет AppStore и камеры. Он также работает на Samsung Galaxy и на мэйнфреймах. Он может - имеет смысл - использовать несколько терабайт оперативной памяти и умещаться в несколько килобайт. Боюсь, самый низкий общий знаменатель сеанса Linux - это Linux, и у вас есть «свобода выбора», которая порой уродлива, чтобы выбрать то, что вам еще нужно. Для настольного компьютера я постараюсь перечислить наименьшие общие знаменатели, но вам будет лучше задавать вопросы о dbus, а не обо всем.
Торстен Стэрк

Ответы:

8

Я так очарован твоим вопросом, что ответил на него на linuxintro . Вот ответ с учетом вашего вопроса:

При загрузке типичного ПК с Linux, такого как Fedora, SUSE или Ubuntu, действия будут следующими:

  1. BIOS запускает самопроверку
  2. BIOS загружает загрузочный сектор и выполняет его
  3. Загрузчик вроде grub или lilo выполнен
  4. Bootmenu показано (необязательно)
  5. Ядро загружено
  6. Начальный RAM-диск загружен
  7. Ядро выполнено
  8. Ядро выполняет инициализацию
  9. init выполняется в зависимости от вашего дистрибутива, версии и конфигурации

    • Сценарии инициализации SysV или
    • системный или
    • выскочка

Смысл всех этих программ в том, чтобы запускать такие сервисы, как

  • dbus, который обеспечивает связь между приложениями, так что одно приложение может вызывать функции из другого запущенного приложения. Это то, что обычно не видно пользователям, например, приложение, вызывающее оконный менеджер для фокусировки на своем собственном окне
  • вход в систему, который позволяет пользователям входить в терминалы CTRL_ALT_F *. Процесс входа в систему, как видно из ps -A, в случае systemd будет systemd-logind (может снова отличаться в зависимости от дистрибутива)
  • udev , у которого много имен, например, я нахожу его с помощью ps -A как systemd-udevd. Он назначает, например, устройство в / dev / для подключаемых устройств, например, USB-диск
  • cron, который будет выполнять команды на основе расписания в / etc / crontab, а также имеет функцию «@reboot» для запуска команд при загрузке.

10) процесс входа в систему, обрабатываемый systemd, будет ожидать входа в систему на виртуальном терминале, который обычно доступен при нажатии CTRL_ALT_F1

11) обычно и по умолчанию процесс init теперь запускает менеджер отображения, например, kdm (менеджер отображения KDE) или xdm

12) Диспетчер дисплея теперь запустит графическую систему. Графической системы практически нет, кроме Xorg (hildon для встраиваемых устройств).

13) Диспетчер диспетчера посоветует серверу Xorg отобразить экран входа


Теперь запуск завершен, и компьютер ждет, когда пользователь войдет в систему.


14) при входе в систему в диспетчере отображения запустится среда рабочего стола, такая как KDE, GNOME или XFCE4. Корневой процесс для пользовательского сеанса KDE будет называться startkde, корневой процесс для GNOME будет называться gnome-session, корневой процесс для XFCE4 будет называться xfce4-session

15) KDE обычно запускает все исполняемые файлы из ~ / .kde / Autostart, а файлы .desktop из / etc / xdg / autostart (см. Планирование задач ).

16) Когда пользователь вошел в систему графически и щелкнул значок, чтобы открыть консоль, обычно выполняется bash. Bash сначала выполнит .bashrc, затем

17) Когда пользователь открывает оболочку входа в систему, это означает, что ему необходимо войти в систему с помощью пароля или авторизованного ключа. Он может сделать это на консоли CTRL_ALT_F1 или с помощью ssh'ing для компьютера, например, localhost. Затем будут выполнены сценарии .sh из /etc/profile.d и .bashrc.

Торстен Стэрк
источник
1
Это хороший общий обзор шагов по запуску системы Linux. Конкретное программное обеспечение (например, grub, lilo, u-boot) изменяется, но функция остается той же. Я подозреваю, что вас больше всего интересует процесс инициализации, поэтому сосредоточьтесь на шагах № 8 и № 9. sysvinit (/ etc / inittab) в значительной степени устарел в пользу systemd OR upstart. Оба они могут запускать / контролировать службы sysvinit.
dturvene
Нет приложения, вызывающего через D-Bus, чтобы окно было в фокусе. -
Роберт Симер
0

Ответ 42. Торстен Стаерк объяснил уже основную проблему в комментариях.

Чтобы помочь вам получить общее представление, вам нужно знать, что программное обеспечение для Linux и Open Source написано и поддерживается миллионами добровольцев и компаний. Так что не просто идти в ногу с ростом.

С другой стороны, есть много документации: справочные страницы для каждого программного обеспечения, хорошее объяснение, что такое D-Bus , списки рассылки для разработчиков, Google и так далее. Так что потратьте несколько лет и прочитайте все документы по интересующим вас пакетам. Если вам это нужно быстрее, просто задайте несколько хороших вопросов в Unix & Linux .

Удачи.

Сообщество
источник
Знание всего о том, как управлять электрическим венчиком, ничего не говорит мне о том, как приготовлен торт. «Читать все документы по интересующим вас пакетам» - это довольно бесполезный ответ. Документация, которую вы упоминаете, говорит мне, что делают эти вещи. Но я хочу знать, для чего они используются. «Просто задайте несколько хороших вопросов» - мой вопрос прост и понятен: где документация?
Стефан
1
Возможно, вам нужно научиться спрашивать, чтобы получить ожидаемый ответ. В этом случае я хотел бы указать вам на очень полезный FAQ. Как задавать вопросы Smart Way
0

Прежде чем дать свою версию ответа, позвольте мне начать с пары определений

Linux == Ядро операционной системы "Система Linux ==" Сеанс системы, построенной вокруг ядра Linux "Сессия в системе Linux ==" Некоторый набор связанных пользовательских программ, работающих в системе Linux "

Чем дальше вы уходите от ядра, тем менее вероятно, что любые две «системы» будут иметь что-то общее. Это означает, что на самом деле нет никакого разумного определения «современной сессии Linux»

Честно говоря, ожидание того, что должна быть какая-то всеобъемлющая системная документация, которая дает вам все компоненты, - это ожидание, которое просто не будет выполнено в большинстве частей мира с открытым исходным кодом. Разработчики открытого исходного кода пишут программы для решения (или повторного решения!) Конкретных проблем, о которых они заботятся, поэтому они просто документируют эту часть, если это так! :-)

Возможно, вам повезет больше с руководствами, доступными в коммерческих дистрибутивах Linux, однако, учитывая консервативный характер большинства из них, вы можете утверждать, что их выпуски не являются «современными»!

Ключевой совет, который я бы дал, заключается в том, что системы Unix / Linux в очень общем смысле являются иерархическими. Раньше я говорил людям, что мне нравятся nix-системы, потому что я мог начать с init, и оттуда понимать все, что происходит в системе. Systemd и друзья немного изменили это, но основной принцип тот же - начните сверху и снизу - программы, составляющие сессию, как правило, начинаются с момента, когда вы входите в иерархию. Итак, если вы используете ssh, вы, вероятно, просто получите оболочку по умолчанию, как это работает ssh. Если вы войдете в систему с помощью графического интерфейса, вы получите все, что запускается вашим менеджером входа, как работает ваш менеджер входа в систему.

Многие платформы рабочего стола делают это немного сложнее, запуская различные демоны обслуживания на уровне пользователя или системы - и иногда они запускаются по требованию, когда запускается первая программа, которая нуждается в них - посмотрите параметры командной строки программы, которые вы запускаете, вполне вероятно, что есть возможность остановить это поведение и запустить приложение в «голом» режиме.

К сожалению, это означает, что «чтение документации по отдельным программам» - это единственный способ понять все это, и что для сессии не существует «минимального набора демонов» - это просто способ, которым данный дистрибутив работает для данного метод входа в систему / доступа, и это зависит от распределения, рабочего стола и метода входа в систему.

tjb63
источник