X11

X11如何與核心互動/執行登錄

  • April 26, 2017

據我了解,對於與 Linux 核心的基於文本的互動,一個名為init啟動getty(或agetty)的程序連接到下面的一個 TTY 設備/dev並提示輸入使用者名。此後,執行一個名為的程序login,提示輸入使用者密碼,如果正確,則啟動使用者首選的 shell(例如bashcsh)。此時,bash 通過 TTY 設備與核心互動。

這個登錄過程對 X11 是如何工作的?X11 是否通過 TTY 與核心互動?

shell 使用一個 TTY 設備(如果它連接到一個)來獲取使用者輸入並產生輸出,僅此而已。shell 連接到 TTY 的事實由getty(並由login)確定;大多數時候,shell 並不關心它是否連接到 TTY。它與核心的互動通過系統呼叫發生。

X11 伺服器不知道登錄(就像外殼一樣)。X11 中的登錄過程有兩種工作方式:

  • 使用者在終端上登錄,然後啟動 X(通常使用startx);
  • 或者 X 伺服器以“顯示管理器”啟動,提示使用者輸入登錄名和密碼(或任何需要的身份驗證資訊)。

與 shell 相比,X11 伺服器獲取輸入和產生輸出的方式非常不同。在輸入端,X 知道 shell 不知道的設備,從滑鼠開始;它通常使用自己的驅動程序直接管理這些。即使對於鍵盤,X 也有自己的驅動程序來補充核心的處理(據我所知,在 Linux 上,例如 X 使用 TTY 驅動程序從鍵盤讀取原始輸入,然後使用自己的驅動程序對其進行解釋)。在輸出端,X 直接驅動顯示設備,無論是否有核心的幫助,並且不通過 TTY 設備。

許多系統上的 X11 伺服器確實使用 TTY 設備來與核心同步:在支持虛擬終端的系統上,X 需要“保留”它正在執行的 VT,並處理 VT 切換。一路上還有一些其他的微妙之處。因此在 Linux 上,X 調整 TTY 以禁用 GPM(一個允許文本模式使用滑鼠的程序)。X也可以共享一個VT…

在過去的一些工作站上,與核心沒有太多明確的同步;如果您沒有執行xconsole,您最終可能會在 X11 顯示屏頂部以“文本模式”顯示核心消息。

引用自:https://unix.stackexchange.com/questions/361352