X11如何与内核交互/执行登录


14

据我了解,与Linux内核进行基于文本的交互时,有一个名为initstarts getty(或agetty)的程序,该程序连接到下面的TTY设备之一,/dev并提示输入用户名。此后,将login运行一个名为的程序,提示输入用户密码,如果正确,则启动用户的首选外壳程序(例如bashcsh)。此时,bash通过TTY设备与内核交互。

X11的登录过程如何工作?X11是否通过TTY与内核交互?

Answers:


15

外壳使用TTY设备(如果已连接到其中)来获取用户输入并产生输出,仅此而已。外壳连接到TTY的事实由getty(并由保留login)确定;大多数情况下,shell不在乎是否连接到TTY。它与内核的交互是通过系统调用进行的。

X11服务器不知道登录信息(就像外壳一样)。X11中的登录过程以两种方式工作:

  • 用户登录到终端,然后启动X(通常使用startx);
  • 或使用“显示管理器”启动X服务器,该显示管理器提示用户输入登录名和密码(或所需的任何身份验证信息)。

与Shell相比,X11服务器获取输入和产生输出的方式非常不同。在输入方面,X从鼠标开始了解外壳没有的设备。它通常使用自己的驱动程序直接管理这些驱动程序。即使对于键盘,X都有自己的驱动程序,可以补充内核的处理(据我所知,例如,在Linux上,X使用TTY驱动程序从键盘读取原始输入,然后使用其自己的驱动程序来解释该输入)。在输出方面,无论有无内核帮助,X都直接驱动显示设备,而无需通过TTY设备。

但是,许多系统上的X11服务器确实使用TTY设备来与内核同步:在支持虚拟终端的系统上,X需要“保留”正在运行的VT,并处理VT切换。沿途还有其他一些细微之处。因此,在Linux上,X调整了TTY以禁用GPM(允许以文本模式使用鼠标的程序)。X也可以共享VT ...

过去在某些工作站上,与内核之间没有太多显式的同步。如果您没有运行xconsole,最终可能会在X11显示屏顶部以“文本模式”显示内核消息。


2

内核绝对没有登录或登录者的概念-它关心的是某些进程在某个用户ID下运行(该用户也不属于内核!)。一个登录程序,无论是在终端上的getty还是X11显示管理器上,都将以root身份运行,然后使用setuid()和相关调用为本地解析器建议的任何UID设置环境(NSS和libc的东西-也不是内核业务)用于刚刚通过身份验证的用户。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.