用户会话终止在 Linux 中是如何工作的?

用户会话终止在 Linux 中是如何工作的?

我在安装了 kde 和 sddm 的 arch linux 中。当我注销时,我看到黑屏上有一个光标。出于某种原因,注销后 sddm 无法正确启动,不知道为什么。我想知道单击注销时会发生什么,注销后显示管理器如何启动,以及导致注销的程序(不知道是什么,但猜测是 loginctl)如何知道首先应该启动哪个 dm?

答案1

显示管理器本身实际上从未停止运行。只有招待员(即显示登录屏幕的特殊显示)将在您自己的会话启动时退出。但是,显示管理器守护进程会继续运行,并监视它启动的进程——只要您的 Xorg 显示服务器或者您的会话领导者进程退出时,DM 将进行清理并再次启动欢迎显示。

我不了解 KDE,但通常 X 显示服务器和桌面环境的“会话管理器”作为显示管理器的子项并行运行:

sddm
|-- Xorg (serving display :0)
\-- gnome-session (client of display :0)
    |-- gnome-shell
    |-- gnome-settings-daemon
    |-- gnome-terminal
    \-- etc.

对于没有会话管理器的简单 WM,它看起来是一样的 - WM 本身是会话领导者:

sddm
|-- Xorg (serving display :0)
\-- i3wm (client of display :0)
    \-- xterm (client of display :0)

当您“注销”时,会话领导者(i3wm、gnome-session 等)将退出。DM 注意到这一点后,将关闭 Xorg 显示服务器 - 导致所有其他应用程序在失去 X11 连接时自行退出。

一旦 X 服务器和会话领导者都退出,DM 将认为会话已关闭,并将启动一个“欢迎”会话并向您显示登录屏幕。

请注意,虽然 systemd-logind(loginctl)可选择参与会话创建和清理,但它实际上并不会对主要过程产生太大影响——非 systemd Linux 中也会发生同样的情况。

相关内容