概览
2.1. 介绍
GNOME 显示管理器 (GDM) 是一个实现了管理本地和远程显示所要求的所有重要功能的显示管理器。GDM 是从头开始编写的,不包含任何 XDM 或 X Consortium 的代码。
注意 GDM 是可以设置的,并且很多配置对安全有影响。用户需要知晓的影响,会在本文档中高亮显示。
请注意,一些操作系统设置 GDM 为不同于本文档中描述的行为。如果 GDM 并不是像叙述的样子,请查看相关的设置是否不同于此处描述的。
获取更多关于 GDM 的信息,参考项目网站 http://www.gnome.org/projects/gdm 以及项目 Wiki http://live.gnome.org/GDM。
讨论和查询 GDM,请参考邮件列表
。这个列表已经打包,并且是一个寻找普通问题答案的好资源。这个邮件列表打包在 http://mail.gnome.org/archives/gdm-list/,并且有一个搜索功能以使用关键字寻找消息。请在 http://bugzilla.gnome.org的“gdm”分类提交任何错误报告或功能增强要求。
2.2. 界面稳定性
GDM 2.20 和更早的版本支持稳定的配置界面。但是基础代码在 GDM 2.22 重写了,其并不是完全的向后兼容旧版的。部分原因是,工作方式不同了,所以一些选项没有意义了;一部分原因是一些选项从来没有使用过;另外的一部分原因是一些功能还没有重新实现。
在稳定样式中将继续支持的接口包括:Init,PreSession, PostSession, PostLogin 和 Xsession 脚本。<etc>/gdm/custom.conf 文件中的一些守护进程选项继续被支持。同样,~/.dmrc 和头像登录图像位置仍然被支持。
GDM 2.20 和更早的版本支持多个显卡上的多个显示器管理功能,就像使用终端服务界面,通过像是 Xnest 或 Xephyr 的程序登录一个窗口,gdmsetup 程序,基于 XML 的欢迎界面主题,以及从登录窗口运行 XDMCP chooser 的能力。2.22版重写之后,这些特性没有添加回来。
2.3. 功能描述
GDM 负责管理系统上的显示,包括认证用户,开始用户会话,结束用户会话。GDM 是可以配置的,其配置方法在本文档的 “配置 GDM”一节说明。GDM 也适合残障人士。
GDM 提供了管理主控制台显示的能力,且是通过虚拟终端显示。它是和其他程序集成的,例如快速用户切换小程序 (FUSA) 和 gnome-screensaver,以通过 Xserver 虚拟终端 (VT) 接口管理控制台上的多显示。它也可以管理 XDMCP 显示。
无论怎样的显示类型,当管理显示时,GDM 将做如下的工作:启动 Xserver 进程,然后以 root 用户运行 Init,并且在显示器上启动欢迎程序。
The greeter program is run as the unprivileged "gdm" user/group. This user and group are described in the "Security" section of this document. The main functions of the greeter program are to provide a mechanism for selecting an account for log in and to drive the dialogue between the user and system when authenticating that account. The authentication process is driven by Pluggable Authentication Modules (PAM). The PAM modules determine what prompts (if any) are shown to the user to authenticate. On the average system, the greeter program will request a username and password for authentication. However some systems may be configured to use supplemental mechanisms such as a fingerprint or SmartCard readers. GDM can be configured to support these alternatives in parallel with greeter login extensions and the --enable-split-authentication ./configure option, or one at a time via system PAM configuration.
智能卡扩展可通过org.gnome.display-manager.extensions.smartcard.active gsettings 键开启或禁用。
同样,指纹识别扩展也可通过org.gnome.display-manager.extensions.fingerprint.active gsettings 键来开启或禁用。
GDM 和 PAM 可配置为不需要任何输入,这将使 GDM 自动登陆并直接启动一个会话,这在一些环境中会很有用,如单用户系统或售报亭。
除了认证,欢迎程序允许用户选择启动哪个会话,使用哪个语言。会话由 .desktop 结尾的文件定义,更多关于这个文件的信息可以在本文档的“GDM 用户会话和语言配置”节找到。默认地,GDM 被配置为显示一个头像登陆器,以使用户可以通过在一张图片上点击选择他们的账户,替代输入用户名。GDM 通过用户的 ~/.dmrc来跟踪用户的默认会话和语言,如果用户在登录界面没有选择会话和语言,将使用它们的默认值。
当验证过一个用户,守护进程以 root 身份运行 PostLogin 脚本,然后以 root 身份运行 PreSession 脚本,在运行完这些脚本后,用户会话才被启动。当用户会话注销时,会以 root 身份运行 PreSession 脚本。这些脚本作为钩子,提供给分发者和最终用户,用来定制如何管理会话。例如,使用这些钩子您可以一个机器实时创建用户的 $HOME 文件夹,在退出时删除它。PostLogin 和 PreSession 脚本的不同点在于,PostLogin 在调用 pam_open_session 之前运行,在用户会话激活前在正确的地方完成应该做的事情。PreSession 脚本在会话激活后被调用。
2.4. 欢迎面板
GDM 欢迎程序在屏幕底部显示一个浮动面板,提供了一些额外的功能。当选择一个用户后,还可以在面板选择登录后使用的会话、语言、键盘布局等。键盘布局选择器在您输入密码时也会改变键盘布局。面板还包括一个登录服务区域以放置状态图标。比如显示当前电量的电池图标,和用于启用辅助功能的图标。欢迎程序还提供了允许用户关闭或重启系统的按钮。如有需要,也可以配置 GDM 不提供关机和重启按钮。GDM 还可通过 PolicyKit(或 Oracle Solaris 上的 RBAC)来配置,用户拥有适当的授权才允许关机或重启。
注意,键盘布局功能只有在支持 libxklavier 的系统上可以使用。
2.5. 辅助功能
GDM 支持“无障碍登录”,允许用户登录他们的桌面,即使他们不能以普通的方式方便地使用屏幕、鼠标或键盘。无障碍技术(AT)功能,比如屏幕键盘、屏幕阅读器、屏幕放大器和 Xserver AccessX 键盘辅助都是可用的。如果需要,也可以放大文本或高对比图标和控制。参考本文档的“辅助功能配置”节获取更多关于多少中无障碍功能可以配置。
在一些操作系统上,必须确保 GDM 用户是“audio”组的成员,以使要求声音输出的 AT 程序(例如文本语音转换)可以工作。
2.6. GDM 头像登录器
头像登陆器是一个允许用户通过在一个图片上点击选择他们的用户名。这项功能可以通过 /apps/gdm/simple-greeter/disable_user_list GConf 键来启用或禁用,其默认是启用的。禁用时,用户必须手动输入他们的完全的用户名。当启用时,它显示本地系统上所有的用来登录的用户名(在 /etc/passwd 文件中定义的有合法的 shell ,并且足够高的 UID 的所有用户),以及最近登录过的远程用户。GDM 2.20 版和更早版中的头像登录器可能试图显示所有的远程用户,这在大的企业部署中造成了性能问题。
头像登录器配置为在列表顶端显示最经常登录的用户。这可以确保经常登录的用户可以快速的找到他们的登录图片。
头像登录器支持前缀字母过滤(type-ahead search),其依据用户的输入来匹配列表中的用户名,动态移动选中的头像。这意味着,一个有很长用户名的用户在从列表中选择之前将只需要输入用户名开始的几个字符。
GDM 所使用的图标可以使用 sysadmin 全局安装,也可以定位于用户主目录。如果全局安装,他们应该位于 <share>/pixmaps/faces/ 目录,并且文件名应该就是用户的名字。头像图片应该是 GTK+ 可以读的标准图片,例如 PNG 或 JPEG。位于全局头像目录的头像图标应该使 GDM 用户可读。
如果这个用户没有全局图标,GDM 将在用户的 $HOME 目录查找图像文件。GDM 将首先在 ~/.face 寻找用户的头像图片。如果没有找到,将尝试 ~/.face.icon。如果仍然没有发现,它将使用在 ~/.gnome2/gdm 文件中定义的“face/picture=”的值。
如果一个用户没有定义的头像图片,GDM 将使用当前 GTK+ 主题的“stock_person”图标。如果没有定义这个图片,将回退使用一个通用的头像图片。
请注意,加载和缩放位于远程用户主目录的头像可能会是非常消耗时间的任务。因为通过 NIS 或 NFS 加载图片是不实际的,GDM 不尝试从远程主目录加载头像图片。
当这个浏览器打开时,这个计算机上的合法用户将暴露给任何人。如果启用了 XDMCP,用户名将暴露给远程用户。 这当然会对安全性有所限制,因为恶意用户不再需要猜测合法用户名。在一些非常严格的环境下,头像登录可能是不适当的。
2.7. XDMCP
GDM 守护进程可以被配置为监听和管理从远程显示器上的 X 显示管理协议(XDMCP)请求。XDMCP 是默认关闭的,但是如果需要可以开启。如果 GDM 构建为支持 TCP Wrapper,则守护进程将只准许在 TCP Wrappers 配置文件指定了 GDM 服务节的主机的访问。
GDM 包括了一些使它可以在对 XDMCP 服务的拒绝服务攻击更有抵抗力的方法。许多协议参数,握手计时等,可以进行微调。默认设置可以在多数系统上合理的工作。
GDM 默认使用普通 UDP 的用于 XDMCP 的 177 端口监听 XDMCP 请求,将通过向发端发送一个 WILLING 包响应 QUERY 或 BROADCAST_QUERY 请求。
GDM 可以配置为实现 INDIRECT 查询和呈现一个主机选择器用以远程显示。GDM 会记住用户的选择并继续发送请求到选择管理器。GDM 也支持一个可以在用户连接成功后,让它忘记重定向协议的扩展。这个扩展仅在全部进程是 GDM 时才支持。它是透明的并且被 XDM 或其他实现 XDMCP 的守护进程所忽略。
如果 XDMCP 好像不工作,确定所有的机器都在 /etc/hosts 指定了。
参考“安全”部分来获取关于使用 XDMCP 时的安全相关的信息。
2.8. 登录
GDM 使用 syslog 记录错误和状态,它也可以记录调试信息,这在 GDM 不正常工作时追踪错误很有用。调试输出可以通过在 <etc>/gdm/custom.conf 文件中设置 debug/Enable 键为“true“来启用。
各个 Xservers 的输出存储于 GDM 日志目录中,一般是 <var>/log/gdm/。任何 Xserver 信息保存于一个相关于显示器值的文件中,<display>.log。
The session output is piped through the GDM daemon to the ~/$XDG_CACHE_HOME/gdm/session.log file which usually expands to ~/.cache/gdm/session.log. The file is overwritten on each login, so logging out and logging back into the same user via GDM will cause any messages from the previous session to be lost.
Note that if GDM can not create this file for some reason, then a fallback file will be created named ~/$XDG_CACHE_HOME/gdm/session.log.XXXXXXXX where the XXXXXXXX are some random characters.