文档:Linux Session 的架构

ste*_*fan 20 documentation d-bus systemd session

我正在寻找一个很好的概述文档,描述现代 Linux 会话中涉及的守护进程和服务堆栈。尽管阅读了有关dbus, 和 的各种文档systemd,但我仍然没有了解大局。

特别是,我正在寻找这些问题的答案(不要回答问题,他们应该只说明我在寻找什么样的文档):

  • 登录后,哪个进程是用户会话的root?

  • 应该启动哪些进程,为什么?我正在寻找一个与桌面无关的答案,无论是启动 Gnome、KDE、FVWM 还是简单的 shell。

  • 所有这些守护进程都扮演什么角色?哪些会单独运行,哪些会依赖其他人?哪一个应该由谁开始,为什么,以及多长时间?谁应该维护那个动物园?

我在问,因为我发现启动后我有一个完整的守护进程动物园:systemd-journald, systemd-udevd, dbus-daemon, systemd-logind. 但还不够:除了这些,运行超轻量级PDF查看器zathura 进一步填充我的会话dbus-launchdbus-daemonat-spi2-registryd,和at-spi-bus-launcher,后者启动另一个dbus-daemon。他们以前都没有去过那里,也没有人被邀请过,但他们会留在房子里,给我一种令人毛骨悚然的感觉,直到我退出。我确定我在这里遗漏了一些东西......

另一个例子:登录后,我systemd使用我的用户 UID 运行,但我不知道它应该做什么(从 206 版开始,我认为我不应该将其用作会话管理器,对吗?)。它有一个子进程(sd-pam),我没有找到关于它的文档。

他们在做什么?这个设置背后的想法是什么?

澄清我的观点:在“过去”,知道这login会启动我的登录 shell(bash, 执行~/.profile)就足够了 ,从那时起,我可以继续构建会话,具体取决于情况,可能是启动screen, 或startx.

Tho*_*erk 8

我对你的问题非常着迷,所以我在 linuxintro 上回答了它。以下是为您的问题量身定制的答案:

当典型的 Linux 系统如 Fedora、SUSE 或 Ubuntu 启动时,步骤如下:

  1. BIOS 运行自检
  2. BIOS 加载引导扇区并执行它
  3. 执行 grub 或 lilo 等引导加载程序
  4. 显示引导菜单(可选)
  5. 内核已加载
  6. 初始 RAM 磁盘已加载
  7. 内核被执行
  8. 内核执行init
  9. init 执行,取决于你的发行版、版本和配置

    • SysV 初始化脚本或
    • 系统或
    • 暴发户

所有这些程序的意义是启动服务,如

  • dbus允许应用程序之间进行通信,以便一个应用程序可以从另一个正在运行的应用程序调用函数。这通常对用户不可见,例如应用程序调用窗口管理器将其自己的窗口置于焦点
  • login允许用户登录 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 启动所有可执行文件,从 /etc/xdg/autostart 启动 .desktop 文件(请参阅调度任务)。

16) 当用户以图形方式登录并单击图标以打开控制台时,通常会执行 bash。Bash 将首先执行 .bashrc 然后

17) 当用户打开登录外壳时,这意味着他需要通过密码或授权密钥登录。他可以在 CTRL_ALT_F1 控制台上或通过 ssh 连接到计算机(例如 localhost)来执行此操作。然后将执行 /etc/profile.d 和 .bashrc 中的 .sh 脚本。


小智 0

答案是 42。Thorsten Staerk 已经在评论中解释了主要问题。

为了帮助您了解全局,您需要知道 Linux 和开源软件是由数百万志愿者和公司编写和维护的。因此,要跟上增长的步伐并不容易。

另一方面,有大量文档:每个软件的手册页、D-Bus的详细解释、开发人员邮件列表、 Google等等。因此,花几年的时间阅读您感兴趣的软件包的所有文档。如果您需要更快,只需在Unix & Linux上提出一些好问题即可。

祝你好运。