Xfce漫游(2) - Xfce的启动流程

本文探讨从Linux启动直到进入xfce4会话之前的过程;和Xfce相关的内容需要单独进行说明。

从按下电源键到进入登录界面

不关心这些,不过可以参考这篇Arch的启动流程或者bootup(7)。在这个过程中systemd启动时,还会启动各种服务诸如D-bus等,可以阅读systemd.service(5)

systemd启动的目标就是执行default.target。为此它分析target文件所定义的依赖关系并从最开始解决它们,这些都可以从日志中的Reached target相关内容查出。一般来说都是为了执行graphical.target,此时启动显示管理器(比如lightdm)。在整个过程中(管他什么细节过程)所有被enabled的service也完成启动了。

那么话题就来到了lightdm本身的启动流程。LightDM的功能无外乎:

  • 启动X服务器
  • 运行Greeter(比如GTK greeter)以显示登录界面
  • 调用PAM以完成登录动作,同时根据用户选择启动相应的会话

登录后

登录之后,systemd会为用户创建会话。所谓的会话(Session)就是一个用户从登录进到登出的过程……

LightDM调用startxfce4,startxfce4则进一步启动xfce4-session。一般来说一次用户登录中只能启动一个session,再次启动xfce4-session时会提醒已经有一个Session manager在运行了。为此需要使用一些小技巧:

$ Xephyr -screen 1280x720 :2 & # 启动一个虚拟X会话并为其分配DISPLAY环境变量
$ su - somebody # 登入某个用户,可以是你自己
$ export DISPLAY=:2 # 将DISPLAY变量设为之前的
$ xfce4-session # 也可以是startxfce4

在设置完DISPLAY之后其实想启动什么图形界面程序都行,随心所欲,比如也可以单独启动xfdesktop之类的或者试试在没有窗口管理器的情况下会出现什么情况,但是重新登录一步必须要做;为了成功率起见可以不用su登录,而是切换到某个TTY中登录,剩余的命令是一样的。

总之,在进行上述的命令行后,Xephyr启动的虚拟屏幕中已经出现了另一个xfce桌面,而我们的命令只是xfce4-session而已,说明是xfce4-session启动了xfce桌面。至于它是做什么的,具体又启动了哪些内容,就留到接下来的文章了。

关于Xorg、X服务器

由于xfce4很多地方使用了libx11库,所以这块也稍微看看。

考虑我们不用LightDM而是直接从TTY登入,登入后用startxfce4命令启动Xfce。此时的流程为:

  • 在startxfce4脚本内部最终xinit /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
  • xserverrc中启动了/usr/bin/X -nolisten tcp
  • 剩下的在xfce4的xinitrc里面了

xinitrc做的事情主要就是:

  • 设环境变量,XDG的也好,DBus的也好
  • 启动xfce4-session

xfce4-session的事再说,研究的问题在于/usr/bin/X -nolisten tcp。X是图形通信协议,用于启动图形化啥的。上面的场景中先是用了TTY的登录进入字符界面,然后用命令启动xfce4。

关于libx11可以看这篇文章:https://www.x.org/wiki/guide/xlib-and-xcb/

posted @ 2024-08-19 16:15  Notify-ctrl  阅读(385)  评论(0)    收藏  举报