之前理过一遍,但貌似忘记做笔记了,再理一遍做个记录
BIOS-kernel-systemd-lightdm 经历这几个过程,系统就启动到登录界面了,lightdm会自动带起来Xorg,并提供登录界面。远程上去pstree查看一下
可以看到lightdm不但拉了个Xorg起来,还拉了个自己同名子进程,子进程再拉了登录界面起来(这里是deepin-greeter),这个登录界面是在Lightdm的配置文件里面定义好了的,想折腾的可以自己修改自己的登录界面也是可以的。
uos@uos-PC:~$ grep -v \# /etc/lightdm/lightdm.conf
[LightDM]
[Seat:*]
greeter-session=lightdm-deepin-greeter
user-session=deepin
[XDMCPServer]
[VNCServer]
除了greeter-session=lightdm-deepin-greeter 以外,还定义了user-session用户输入密码后登录,lightdm会带起来2个进程,Xorg以及用户桌面环境(uos里就是startdde)
登录后再查看,lightdm主进程还是1199,Xorg的进程号也还是1249,但另外一个lightdm进程2161会戴起来startedde,startdde会带起来整个桌面环境的子进程(包括kwin窗口管理器WM和整个桌面环境DE)。
这个startdde定义是通过user-session=deepin 这里定义的,登录管理器Lightdm会去几个地方查找用户session的配置文件
/usr/share/xsessions
/usr/share/wayland-session/
这些目录里面定义了一些desktop文件,deepin.desktop里面的exec就是startdde,喜欢玩的可以直接把这个exec换成自己想要执行的程序,可以达到不加载桌面只启动你自己程序的目的。
某些系统支持用户自己定义自己要启动的WM和DE,可以写 ~/.xsession文件,这样不必由lightdm启动桌面环境(据说如果用了gdm3是不生效的)。
对/etc/X11/目录下的一堆文件,应用于用户登录前还是登录后,有空再研究。
2022.06.16 更新
xsession的一堆脚本其实是会尝试加载桌面的启动命令的(startdde),参考
Xsession - Debian Wikihttps://wiki.debian.org/Xsession
If the user has a ~/.xsessionrc file, read it.
If a specific session was selected in the DM (GDM, KDM, WDM, LightDM, ...) , run it.
Otherwise, if the user has a ~/.xsession or ~/.Xsession file, run it.
Otherwise, if the /usr/bin/x-session-manager command exists, run it.
Otherwise, if the /usr/bin/x-window-manager command exists, run it.
Otherwise, if the /usr/bin/x-terminal-emulator command exists, run it.
描述了默认启动顺序,测试过程中,最终会去寻找/usr/bin/x-session-manager
grep 了一下/etc/X11,
uos@uos-PC:/etc/X11/Xsession.d$ cat 99x11-common_start
# $Id: 99x11-common_start 305 2005-07-03 18:51:43Z dnusinow $
# This file is sourced by Xsession(5), not executed.
exec $STARTUP
# vim:set ai et sts=2 sw=2 tw=80:
最后会去执行STARTUP这个变量的程序的,grep STARTUP可以看到排序号前面一点的脚本在做上面列出的几个顺序的搜索,uos商搜索到/usr/bin/x-session-manager,系统里面默认配置就是链接到startdde.