正如我所理解的基于文本的与Linux内核的交互,一个名为init的程序启动getty (或agetty),该程序连接到/dev下的TTY设备之一,并提示输入用户名。之后,运行一个名为login的程序,该程序提示输入用户的密码,如果正确,则启动用户的首选shell (例如bash或csh)。此时,bash通过TTY设备与内核进行交互。
这个登录过程是如何为X11工作的?X11是否通过TTY与内核交互?
发布于 2017-04-26 08:47:28
shell使用TTY设备(如果连接到TTY设备)来获取用户输入和产生输出,而不是其他设备。shell连接到TTY的事实是由getty决定的(并由login保存);大多数情况下,shell并不关心它是否连接到TTY。它与内核的交互通过系统调用进行。
X11服务器不知道登录(就像shell一样)。X11中的登录过程以两种方式工作:
startx);X11服务器获取输入和产生输出的方式与shell非常不同。在输入端,X知道shell不需要的设备,从鼠标开始;它通常使用自己的驱动程序直接管理这些设备。即使对于键盘,X也有自己的驱动程序来补充内核的处理(据我所知,例如,在Linux上,X使用TTY驱动程序从键盘读取原始输入,然后使用自己的驱动程序解释)。在输出端,X直接驱动显示设备,不需要内核的帮助,也不需要通过TTY设备。
但是,许多系统上的X11服务器确实使用TTY设备来与内核同步:在支持虚拟终端的系统上,X需要“保留”它正在运行的VT,并处理VT切换。在此过程中还有其他一些微妙之处;因此,在Linux上,X调整TTY以禁用GPM (一个允许使用鼠标文本模式的程序)。X也可以共享VT..。
在过去的一些工作站上,与内核之间没有太多的显式同步;如果不运行xconsole,最终可能会在X11显示的顶部以“文本模式”显示内核消息。
发布于 2017-04-26 11:49:07
内核绝对没有登录或登录的概念-它只关心在某个用户ID下运行的进程(这也与内核无关!)登录程序(无论是终端上的getty还是X11显示管理器上的getty)以root方式运行,然后使用setuid()和相关调用为本地解析器(NSS和libc内容--也不是内核业务)建议使用的任何UID设置环境。
https://unix.stackexchange.com/questions/361352
复制相似问题