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/upstart/ui.conf)用于運行session_manager。在執行之前,首先會運行ui-pre-start(對應執行文件為init/script/ui-pre-start來創建必要的文件和目錄。

session_manager構造命令行用于運行Chrome并為其產生子進程。命令行通過文件chrome_setup.cclibchromeos-ui的類ChromiumCommandBuilder來構造。命令行的內容依賴于先前的變量標簽(如USE)。包libchromeos-use-flags中在IUSE下羅列了大量的可用于USE的標簽;在編譯時,其將所有設置的標簽寫入到/etc/ui_use_flags.txt中。session_manager讀取其中的內容并啟動。通常ui_use_flags.txt是一個很小的文本文件,用以避免寫入到chromeos-login中導致需要為不同的主板類型編譯。

開發者還需要注意到文件/etc/chrome_dev.conf,這是一個配置文件,用于在設備上添加或移除Chrome的命令行參數。在該文件中有對應的文檔。

Chrome顯示出登陸提示界面后,調用session_managerD-Bus方法EmitLoginPromptVisiblesession_manager寫入一個login-prompt-visible啟動狀態事件,在接口上發出D-Bus信號LoginPromptVisible,并異步調用D-Bus通知事件login-prompt-visibleUpstart;該事件隨后用于觸發其他任務。

Login

當用戶成功登陸Chrome后,Chrome調用session_managerD-Bus方法StartSessionsession_manager通過D-Bus異步調用Upstart的方法StartUserSession,并在它自己的接口上發出信號SessionStateChanged

當有更多的用戶加入到會話中時,會再次發出信號SessionStateChanged

Screen Locking

在用戶登錄成功后系統內其他進程可能會鎖定屏幕:

  • Chrome鎖定屏幕以響應用戶請求,或僅僅是因為系統掛起之前設置了Require password to wake from sleep選項;
  • powerd鎖定屏幕以響應user inactivity

其他進程要鎖定屏幕,首先會調用session_managerD-Bus方法LockScreensession_manager內部記錄鎖定的狀態,并調用到ChromeD-Bus方法LockScreen。一旦Chrome成功顯示鎖定屏幕,就緊接著調用session_managerD-Bus方法HandleLockScreenShown發出D-Bus信號ScreenIsLocked

當用戶成功輸入密碼以解鎖屏幕后,Chrome調用session_managerD-Bus方法HandleLockScreenDIsmissedsession_manager更新其內部狀態以記錄屏幕未鎖定狀態,并發出D-Bus信號ScreenIsUnlocked

Logout

當用戶登出時,Chrome調用session_managerD-Bus方法StopSessionsession_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/upstart/ui-respawn.conf),然后執行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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,825評論 18 139
  • 啟動環境 session_manager在文件/etc/init/ui.conf中通過UpStart啟動,具體啟動...
    發條蛙閱讀 1,586評論 0 1
  • 最近在研究Docker的源碼.讀到ApiServer的啟動過程時,發現其有一個新的概念,叫做service act...
    AlstonWilliams閱讀 1,152評論 1 4
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,728評論 25 708
  • 文/耿先生 001損失厭惡:你在去電影院的路上丟了100元錢,你很生氣,不過走著走著卻突然撿到了100塊,你雖然很...
    耿先生閱讀 120評論 6 9