session_manager简介
session_manager ⽤于管理Chrome进程的⽣命周期。通常位于⽬录 login_manager 下,并通过包chromeos-login安装。
当前session_manager与其他进程使⽤D-Bus通讯。其保有名为org.chromium.SessionManager的服务,对应路径为/org/chromium/SessionManager,导出接⼝名为org.chromium.SessionManager。
Startup
启动任务ui(对应执⾏⽂件为init/f)⽤于运⾏session_manager。在执⾏之前,⾸先会运⾏ui-pre-start(对应执⾏⽂件为init/script/ui-pre-start来创建必要的⽂件和⽬录。
session_manager构造命令⾏⽤于运⾏Chrome并为其产⽣⼦进程。命令⾏通过⽂件和libchromeos-ui的
session如何设置和读取类ChromiumCommandBuilder来构造。命令⾏的内容依赖于先前的变量标签(如USE)。包libchromeos-use-flags中在IUSE下罗列了⼤量的可⽤
于USE的标签;在编译时,其将所有设置的标签写⼊到/etc/ui_中。session_manager读取
其中的内容并启动。通常ui_是⼀个很⼩的⽂本⽂件,⽤以避免写⼊到chromeos-login中导致需要为不同的主板类型编译。
开发者还需要注意到⽂件/etc/f,这是⼀个配置⽂件,⽤于在设备上添加或移除Chrome的命令⾏参数。在该⽂件中有对应的⽂档。
在Chrome显⽰出登陆提⽰界⾯后,调⽤session_manager的D-Bus⽅法EmitLoginPromptVisible。session_manager写⼊⼀个login-prompt-visible启动状态事件,在接⼝上发出D-Bus信号LoginPromptVisible,并异步调⽤D-Bus通知事件login-prompt-visible到Upstart;该事件随后⽤于触发其他任务。
Login
当⽤户成功登陆Chrome后,Chrome调⽤session_manager的D-Bus⽅法StartSession。session_manager通过D-Bus异步调⽤Upstart的⽅
法StartUserSession,并在它⾃⼰的接⼝上发出信号SessionStateChanged。
当有更多的⽤户加⼊到会话中时,会再次发出信号SessionStateChanged。
Screen Locking
在⽤户登录成功后系统内其他进程可能会锁定屏幕:
Chrome锁定屏幕以响应⽤户请求,或仅仅是因为系统挂起之前设置了Require password to wake from sleep选项;
powerd锁定屏幕以响应user inactivity;
其他进程要锁定屏幕,⾸先会调⽤session_manager的D-Bus⽅法LockScreen。session_manager内部记录锁定的状态,并调⽤到Chrome的D-
Bus⽅法LockScreen。⼀旦Chrome成功显⽰锁定屏幕,就紧接着调⽤session_manager的D-Bus⽅法HandleLockScreenShown发出D-Bus信
号ScreenIsLocked。
当⽤户成功输⼊密码以解锁屏幕后,Chrome调⽤session_manager的D-Bus⽅法HandleLockScreenDIsmissed。session_manager更新其内部状态以记录屏幕未锁定状态,并发出D-Bus信号ScreenIsUnlocked。
Logout
当⽤户登出时,Chrome调⽤session_manager的D-Bus⽅法StopSession。session_manager发送信号SIGTERM到浏览器进程,并等待3秒(缺省值为3秒)到退出。如果3秒内仍然在运⾏,则发送信号SIGABRT,然后session_manager退出。
接下来会运⾏脚本ui-post-stop(对应路径为init/script/ui-post-stop)。它写⼊启动状态事件ui-post-stop,并通过发送信号SIGKILL到所有仍然在运⾏
的chronos进程,以强⾏清理进程,并杀死孤⼉进程。
然后会运⾏Upstart任务ui-respawn(对应路径为init/f),然后执⾏ui-respawn(对应路径为init/scripts/ui-respawn),⽤于管
理ui任务的重启。
Crashes
如果Chrome意外退出,session_manager通常会进⾏重启(不带标签--login-manager)。如果在崩溃时屏幕锁定,则session_manager会结束会话以避免在⽆⼈值守的系统上暴露出已登陆的桌⾯。
如果Chrome多次崩溃,则ui-respawn会重启系统。如果持续崩溃,则会停⽌重启系统,并尝试⾃动更
新到不会崩溃的新版本。关于这⼀点可以参考ui-respawn(对应脚本init/scripts/ui-respawn)以获取更多信息。
mark
翻译⾃⽂件src/platform2/login_manager/README.md。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论