在 Systemd 的众多 unit 中,最常见的是以 .service 结尾的 service unit。此外,还有一种称为 target unit 的 unit,我们通常称之为目标。
.service
target unit
目标(target)可以理解为一组 service unit 的集合,但它不仅包含 service unit,还包括其他类型的 unit。只有当目标下的所有 unit 都启动成功,才算该目标完成。一个目标可以依赖其他目标来完成,从而形成一个层层依赖的关系。
service unit
在 Systemd 启动过程中,需要完成一系列目标。首先,Systemd 会先完成一些最基础的目标,逐步完成其他目标,最终实现最终目标——default.target。可以通过以下命令查看 default.target 的依赖关系:
default.target
systemctl list-dependencies default.target
在图中可以看到,Systemd 会先完成 basic.target,再完成 multi-user.target,最后到达 default.target。
basic.target
multi-user.target
我们可以更改系统启动的最终目标,即更改 default.target 的指向。例如,通过以下命令将 default.target 指向 multi-user.target,从而实现开机进入命令行模式:
systemctl set-default multi-user.target
可以看到,这只是创建了一个符号链接而已。类似地,我们可以将 default.target 指向 graphical.target,让系统启动后进入图形界面的登录页面:
graphical.target
systemctl set-default graphical.target
那么,为什么将 default.target 指向 graphical.target 就会进入登录界面呢?我们可以通过查看 graphical.target 的依赖关系来了解:
cat /path/to/graphical.target
可以看到,它依赖于 display-manager.service。进一步查看 display-manager.service:
display-manager.service
file /etc/systemd/system/display-manager.service
原来 display-manager.service 最终指向了 sddm,即 KDE 的登录管理器。至此,系统的登录界面就会成功启动!
sddm
我们知道,在我们登录的时候,我们可以选择是以wayland启动还是以x11启动。也就是说,wayland compositor是在我们输入完密码,点击登录的时候才启动的。难道Display Manager能够在没有启动x server或者wayland compositor之前就能显示图像?
答案是:之所以display manager能够显示图形,也是有x server或者wayland compositor 存在的。 也就是说。display-manager.service的ExecStart程序sddm会干2件事。
小型
当用户输入密码,验证成功后,再在tty1启动一个全新的wayland compositor ,用来跑桌面环境。 也就是说在整个桌面环境启动的过程中,会启动2个wayland compositor
这也就是为什么我们按 ctrl+alt+f1 和 ctrl+alt+f2 能在登录界面和桌面环境之间来回切换的原因吧。
ctrl+alt+f1
ctrl+alt+f2
浅薄理解,欢迎各位指正!
感谢科普
学习一下
666
Featured Collection
Popular Events
Display Manager 启动流程
Display Manager 通过 Systemd 启动
在 Systemd 的众多 unit 中,最常见的是以
.service结尾的 service unit。此外,还有一种称为target unit的 unit,我们通常称之为目标。什么是 Target Unit?
目标(target)可以理解为一组
service unit的集合,但它不仅包含 service unit,还包括其他类型的 unit。只有当目标下的所有 unit 都启动成功,才算该目标完成。一个目标可以依赖其他目标来完成,从而形成一个层层依赖的关系。Systemd 启动过程中的目标依赖关系
在 Systemd 启动过程中,需要完成一系列目标。首先,Systemd 会先完成一些最基础的目标,逐步完成其他目标,最终实现最终目标——
default.target。可以通过以下命令查看default.target的依赖关系:systemctl list-dependencies default.target在图中可以看到,Systemd 会先完成
basic.target,再完成multi-user.target,最后到达default.target。更改系统启动的最终目标
我们可以更改系统启动的最终目标,即更改
default.target的指向。例如,通过以下命令将default.target指向multi-user.target,从而实现开机进入命令行模式:systemctl set-default multi-user.target可以看到,这只是创建了一个符号链接而已。类似地,我们可以将
default.target指向graphical.target,让系统启动后进入图形界面的登录页面:systemctl set-default graphical.target为什么指向 Graphical Target 会进入登录界面?
那么,为什么将
default.target指向graphical.target就会进入登录界面呢?我们可以通过查看graphical.target的依赖关系来了解:cat /path/to/graphical.target可以看到,它依赖于
display-manager.service。进一步查看display-manager.service:file /etc/systemd/system/display-manager.service原来
display-manager.service最终指向了sddm,即 KDE 的登录管理器。至此,系统的登录界面就会成功启动!Compositor都还没有启动,为什么sddm能显示图像?
我们知道,在我们登录的时候,我们可以选择是以wayland启动还是以x11启动。也就是说,wayland compositor是在我们输入完密码,点击登录的时候才启动的。难道Display Manager能够在没有启动x server或者wayland compositor之前就能显示图像?
答案是:之所以display manager能够显示图形,也是有x server或者wayland compositor 存在的。
也就是说。display-manager.service的ExecStart程序sddm会干2件事。
小型(也许是个完整的)wayland compositor)跑在tty2。当用户输入密码,验证成功后,再在tty1启动一个全新的wayland compositor ,用来跑桌面环境。
也就是说在整个桌面环境启动的过程中,会启动2个wayland compositor
这也就是为什么我们按
ctrl+alt+f1和ctrl+alt+f2能在登录界面和桌面环境之间来回切换的原因吧。浅薄理解,欢迎各位指正!