X显示管理器

显示管理器(display manager)建基于X窗口系统,调用X窗口系统用作以GUI登录以及登录后显示GUI画面,以及以GUI切换用户。GNU/Linux下的tty7默认开启显示管理器,tty1~6则为文字列接口

KDMKDE显示管理器)显示的登录界面

X窗口系统中,作为程序运行的X显示管理器允许你在本地X伺服器或远程X伺服器上开始一个会话。

显示管理器呈现给用户一个登录界面并提示输入用户和密码。当用户成功输入正确的用户和密码,显示管理器会开始一个会话。

当显示管理器在用户电脑上运行时,它会在显示登录界面前开启X伺服器,并能在用户退出后任意的重复运行。在这种情况下,显示管理器在X窗口系统中实现initgetty和在字符类型终端登录的功能。当显示管理器运行在远程电脑时,它扮演类似telnet伺服器的角色,需要用户名和密码才开始一个远程会话。

1988年10月X11 Release 3引入了显示管理器,它的目标是在市场上支持独立的X终端机。多种显示管理器继续一成不变的在运行X系统的独立的工作站上提供图形化登录提示。1989年12月X11R4引入X显示管理器控制协议XDMCP)来修复由X11R3带来的问题。

本地和远程显示管理

显示管理器可以运行在用户面前的电脑上也可以运行在远程电脑上。第一种情况,显示管理器会自动开始一个或多个X伺服器,并显示登录界面。第二种情况,显示管理器要通过XDMCP协议工作。

 
在X窗口系统中,X伺服器运行在用户面前的电脑上。X伺服器可以连接到另一台电脑上运行的显示管理器,开始一个会话并运行存在于另一台电脑中的程序。

XDMCP协议要求X伺服器能自发的启动并连接到显示管理器。在X窗口系统范例中,X伺服器运行的那台电脑提供显示和输入装置。X伺服器能够连接(使用XDMCP协议)到另一台运行显示管理器的电脑,并请求开始会话。在这种情况下,X伺服器扮演类似图形化telnet客户端的角色,而显示管理器类似telnet伺服器:用户启动的程序是运行在显示管理器那台电脑,而它们的输入和输出是工作在X伺服器(用户面前)那台电脑上。

管理员可以配置X伺服器连接到某个指定的显示管理器,或显示运行X显示管理器的主机列表。XDMCP选择器程序允许用户选择下面其中一个能连接到的主机:

  1. 一个预先定义好的主机列表,它们有各自的网络地址;
  2. 一个主机列表(工作于本地IP网段),它们的XDMCP伺服器可以通过广播地址找到。

XDMCP伺服器经常出现在这个列表中。当用户从列表中选中一个主机,工作于本地电脑的X伺服器会连接选中的远程电脑的X显示管理器

X显示管理器控制协议(XDMCP)

X显示管理器控制协议使用UDP 177 端口。需要显示管理器开始一个会话时,X伺服器需要向其发送Query包。如果显示管理器允许X伺服器的访问,它会向X伺服器返回Willing包作为回应。(X伺服器也可以发送BroadcastQueryIndirectQuery包来开始一个会话,这种机制类似于使用DHCP来获得IP地址。)

显示管理器必须向X伺服器进行认证。为做到这一点,X伺服器发送Request包给显示管理器,显示管理器返回一个Accept包。如果Accept包包含了X伺服器期望的响应,则显示管理器通过认证。举例来说,为生成正确的响应可能需要显示管理器访问一个密钥。如果认证成功,X伺服器会发送Manage包来告诉显示管理器。然后,显示管理器会作为一个常规的X客户端向连接的X伺服器显示登录界面。

在会话期间,X伺服器会间隔的向显示管理器发送KeepAlive包。如果显示管理器在一段时间内没有回应Alive包,X伺服器会假定显示管理器停止运行,并终止该连接。

XDMCP有一个问题,类似telnet,认证时是不加密的并且如果能够嗅探,这会让系统易受到攻击。比较安全的方法是对X通信使用ssh通道。[1]页面存档备份,存于互联网档案馆

历史

XDM是在X11R3中引入的。这个版本出现了几个问题,最显著的一个是当用户打开X终端电源时。在X11R3中,XDM只能通过Xservers文件得知一个X终端,但是只有在启动时XDM才会读取这个文件。因此,每次用户打开X终端电源时,系统管理员不得不发送SIGHUP信号给XDM指示它重新读取Xservers文件。

X11R4(1989年10月)引入了XDMCP。使用XDMCP时,X伺服器必须主动请求一个显示管理器连接。当X伺服器使用XDMCP时就不再需要Xservers文件。

一些实例

X窗口系统使用XDM做为它标准的显示管理器。

也有其他X显示管理器被开发出来,有商业有开源,在基本的显示管理上提供了附加的功能。

在大多数Linux发行版中,系统默认的显示管理器由/etc/X11/default-display-manager文件选择(注:本条已不适用使用Gnome或KDE的现代Linux发行版)

参见

参考文献

  1. ^ Added a bigger not maintained note · spanezz/nodm@0552524. GitHub. [2020-10-31] (英语). 

外部链接