ukui-session-manager
总结
ukui-session-manager 由 ukui-greeter 拉起, 主要负责桌面会话的启动,管理各模块是否开机启动、模块的启动顺序以及负责拉起因异常导致崩溃的进程,启动后进程间通过DBus进行通信。
一. ModuleManager 启动模块管理
主要函数的功能。
- constructStartupList 配置启动列表 和 启动顺序
- 从 “org.ukui.session.required-components” 加载 WM、Panel、FileManager的启动项。
- 从 “/usr/share/applications”和“/etc/xdg/autostart”
加载WM、Panel、FileManager配置文件[.desktop]文件,根据不同的选项加载启动顺序。 - 从 “/usr/share/applications”和“/etc/xdg/autostart”
加载带有“Type”“X-UKUI-Autostart-Phase”选项的[.desktop]文件,根据不同的选项加载启动顺序。 - 从 “/usr/share/ukui/applications” 加载,启动项放置在mForceApplication列表,将会在最后被session拉起。
-
startup 按序启动
Initialization-》WindowManager-》Panel-》FileManager-》Desktop、Application、mForceApplication
并不是绝对顺序、有一定概率、后面先执行,此处是系统优化的目标之一:比如增设启动顺序优先级选项,对于有强依赖关系的进程,通过设置启动顺序优先级,不允许优先级高的进程低于优先级低的进程启动,此外各个进程有责任通知Session,该进程何时属于启动完成,否则默认认为一旦进程任务建立,进程便启动完成。 -
timerUpdate 一个QTimer事件 start后 只执行一次
也是为了启动一些应用程序,如kylin-nm、ukui-window-switch -
startProcess
异步启动 ,根据.desktop中的X-UKUI-AutoRestart可以配置 程序启动后 如果程序崩溃是否重启 -
stopProcess
杀死进程 -
restartModules 重启相应模块
- 崩溃退出才会重启,而且不会无限重启,只会重启10次。
- 其他原因导致的程序退出不会重启。
- 窗口管理器不管什么原因,只要是退出就会重启。
-
restartModules
重启进程 -
logout
- 注销账户时 杀死相应的进程
- 保证各个进程死绝,并且窗口管理器是最后被杀死的。
二. XdgDesktopFile 文件描述
描述 .desktop 文件。
- 启动选项(目前ukui-session对以下配置选项敏感)
- X-UKUI-Autostart-Phase 配置自启阶段
- Type 不知这个类型 是否还有其他程序在使用,在ukui-session中,只有Type=Application时,才会拉起。
- X-UKUI-AutoRestart 程序退出时,是否需要重新拉起该程序。
- Hidden 为true时,将退出自启列表。
- Exec 启动程序的位置
- XdgDesktopFileData
大篇幅记录了该类,但是该类并没有被使用
三. XdgAutoStart 配置自启列表
配置启动列表所用。
四. SessionApplication 会话管理
会话程序入口,负责加载基础配置,如配置文件的读取和进程通信服务的注册。
-
InitialEnvironment
加载主题、配置文件。 -
registerDBus
注册DBus服务-org.gnome.SessionManager,用于启动后进程之间的通信,可用来管理进程的开关,可用来管理用户的注销、关机、重启的行为。 -
SessionApplication
启动 ModuleManager
五. IdleWatcher 空闲时间管理
封装了 KIdleTime-报告空闲时间信息的单例,用于拉起屏幕保护程序 ukui-screensaver-backend。