X Display Manager XDM


X Display Manager XDM

文章插图
XDM(X Display Manager)【X Display Manager XDM】XDM就是X Display Manager的缩写,即X显示管理器 。X Window系统对用户友好的登录前端 。经常用于网咖或校园环境,在这些地方,不熟悉UNIX的用户偶尔需要访问UNIX 。
基本介绍中文名:X显示管理器
外文名:X Display Manager
缩写:XDM
用途:通过 XDMCP 支持来管理集合
用途通过 XDMCP 支持来管理 X 显示器集合语法xdm [ -config ConfigurationFile] [ -debug DebugLevel ] [ -nodaemon ] [ -error ErrorLogFile ] [ -resources ResourceFile ] [ -server ServerEntry ] [ -udpPort PortNumber ] [ -session SessionProgram ] [ -xrm ResourceSpecification ]描述xdm(X Display Manager,X 显示器管理器)命令管理 X 显示器集合,这些显示器可能在本地主机上,也可能在远程伺服器上 。xdm 命令设计是按照 X 终端以及 X 联盟标準 XDMCP(X Display Manager Control Protocol,X 显示器管理器控制协定)的要求进行的 。xdm 命令提供类似于字元终端上的 init、getty 及 login 命令所提供的服务:提示输入登录名和密码、认证用户以及运行会话 。会话由特定进程的生命期定义;在传统的基于字元的终端範畴中,会话就是用户的登录 shell 。在 xdm 上下文中,它是任意的会话管理器 。这是因为在视窗环境中,用户的登录 shell 进程并不需要任何类似终端的界面来进行连线 。如果不能使用真正的会话管理器,那幺视窗管理器或终端仿真器一般作为会话管理器使用,这就意味着终止进程就会终止用户会话 。当会话结束时,xdm 复位 X 伺服器并(可选)重新启动整个进程 。当 xdm 命令通过 XDMCP 方式接收 Indirect 查询时,它可以运行 chooser 进程来为显示器执行 XDMCP BroadcastQuery(或对指定主机的 XDMCP 查询),并提供可能提供 XDMCP 显示器管理的主机的选单 。这种功能在本身不提供主机选单的 X 终端中非常有用 。因为 xdm 命令要提供用户可见的第一个界面,所以它被设计为简单易用,容易按照特定站点的需求进行定製 。典型用法xdm 命令被设计为在多种环境中运行 。首先,请设定 xdm 配置档案 。创建一个目录(通常为 /usr/lib/X11/xdm)以存储所有相关档案 。下面是一个合理的配置档案,它可以被命名为 xdm-config:DisplayManager.servers:/usr/lib/X11/xdm/XserversDisplayManager.errorLogFile: /usr/lib/X11/xdm/xdm-errorsDisplayManager*resources:/usr/lib/X11/xdm/XresourcesDisplayManager*startup:/usr/lib/X11/xdm/XstartupDisplayManager*session:/usr/lib/X11/xdm/XsessionDisplayManager.pidFile:/usr/lib/X11/xdm/xdm-pidDisplayManager._0.authorize: trueDisplayManager*authorize:false该档案包含对其它档案的引用 。某些资源用一个 *(星号)注明,表示组件被分开 。这些资源可以指定为专门用于某个显示器,方法是用显示器名替换 *(星号),不过通常这都没什幺用 。请参阅下一页上的参考资料部分,那里有完整的论述 。第一个档案(/usr/lib/X11/xdm/Xservers)包含要管理的,而且没有使用 XDMCP 的显示器的列表 。多数工作站只有一个显示器,标号为 0(零),这样档案看起来就和下面的差不多::0 Local local /usr/bin/X11/X -force这将使 /usr/bin/X11/X 一直运行在这个显示器上,并管理一个连续运行的会话周期 。/usr/lib/X11/xdm/xdm-errors 档案包含来自 xdm 的错误讯息以及由 Xsetup、Xstartup、Xsession 或 Xreset 脚本输出到标準错误的任何信息 。如果在启动 xdm 命令时遇到了任何问题,请检查 /usr/lib/X11/xdm/xdm-errors 档案,检查 xdm 命令是否与问题有任何关係 。下一个配置条目 /usr/lib/X11/xdm/Xresources 使用 xrdb 命令作为资源资料库装入到显示器上 。由于认证小视窗在启动前读取该资料库,它通常会包含该小视窗的各项参数 。标誌所有选项(除 -config 之外)指定的值都可以在配置档案中作为资源指定 。-config ConfigurationFile命名配置档案,该档案指定控制 xdm 命令行为的资源 。/usr/lib/X11/xdm/xdm-config 档案为预设值 。-debug DebugLevel指定 DisplayManager.debugLevel 资源的数值 。非零值使 xdm 在终端上列印调试语句,并禁用 DisplayManager.daemonMode 资源,强制 xdm 同步运行 。这些错误讯息可能并不清楚 。要解释这些讯息,请查看 xdm 命令的 X11R4 原始码 。-nodaemon指定 DisplayManager.daemonMode 资源的值为 False 。这将禁用通常的守护进程行为(在该行为中,xdm 命令关闭所有档案描述符,解除它与控制终端的关联,并在它第一次启动时将其自身置于后台) 。-error ErrorLogFile指定 DisplayManager.errorLogFile 资源的值 。该档案包含来自 xdm 的错误讯息,以及由会话过程中运行的各种脚本和程式写入标準错误的任何信息 。-resources ResourceFile指定 DisplayManager*resources 资源的值 。该档案使用 xrdb 命令装入,指定认证小视窗的配置参数 。-server ServerEntry指定 DisplayManager.servers 资源的值 。请参阅伺服器规範一节,获取对该资源的描述 。-udpPort PortNumber指定 DisplayManager.requestPort 资源的值 。它将设定 xdm 命令监控 XDMCP 请求时使用的连线埠号 。XDMCP 使用已注册的众所周知的 UDP 连线埠 177 。除非在调试时,否则请不要更改这项资源 。-session SessionProgram指定 DisplayManager*session 资源的值 。这表明在用户登录后作为会话运行程式 。-xrm ResourceSpecification允许指定任意一个资源,就像在多数 X 工具箱应用程式中一样 。资源在很多阶段中,xdm 的操作都可以通过使用其配置档案(在 X 资源格式中)来控制 。某些资源修改所有显示器上 xdm 的行为,而其它资源只修改一个显示器上 xdm 的行为 。当操作与特定显示器有关係时,显示器名称就会被插入到“DisplayManager”和最终的资源名段之间的资源名中 。例如,DisplayManager.expo_0.startup 是定义“expo:0”显示器上的启动 shell 档案的资源名 。由于资源管理器使用冒号来分隔资源名称和它的值,并使用点号来分隔资源名称的各部分,所以 xdm 在生成资源名称时会用下划线来替换点号和冒号 。DisplayManager.servers指定一个由伺服器项组成的档案名称,每项一行(如果值由斜槓开头),或一个单独的伺服器项 。请参阅伺服器规範一节获取详细信息 。DisplayManager.requestPort表明 xdm 命令用来侦听输入的 XDMCP 请求的 UDP 连线埠号 。除非需要调试系统,否则请将这个值保留为预设的 177 。DisplayManager.errorLogFile将错误讯息重定向到指定的档案,而不是到控制台 。该档案亦包含由 Xsetup、Xstartup、 Xsession 和 Xreset 档案定向到标準错误的任何输出,所以它也将包含在这些脚本中问题的描述 。DisplayManager.debugLevel如果该资源的整数值大于 0(零),那幺 xdm 命令就会输出大量的调试信息 。它还会禁用守护进程方式,而守护进程方式将丢弃上面的信息并允许非 root 用户运行 xdm 命令,通常这个命令都没什幺用 。DisplayManager.daemonModexdm 命令试图将自己插入到一个与任何终端都无关的守护进程进程中 。这是通过派生父进程并任其退出,然后关闭档案描述符并释放控制终端来实现的 。在某些环境中,这不是我们所期望的(特别是在调试时) 。可以通过将该资源设定为 False 来禁用这个功能 。DisplayManager.pidFile创建指定的档案名称,从而包含 xdm 主进程的进程标识的 ASCII 表示形式 。xdm 命令还使用该档案上的档案锁定来试图清除在同一台机器上运行的多个守护进程,这会产生不可预测的后果 。DisplayManager.lockPidFile控制 xdm 命令是否使用档案锁定来防止多个显示器管理器同时运行 。DisplayManager.authDir命名一个目录,xdm 命令会在初始化会话时在该目录中存储授权档案 。预设值为 /usr/lib/X11/xdm 。DisplayManager.autoRescan布尔值,它控制会话结束而且档案被更改后 xdm 命令是否重新扫描配置、伺服器、访问控制和认证密钥档案 。预设值为 True 。可以向主进程传送一个 SIGHUP 信号,强制 xdm 守护进程重新读取这些档案 。DisplayManager.removeDomainname在为 XDMCP 客户机计算显示器名称时,名称解析程式一般会为终端创建一个全限定主机名 。因为这有时会令人困惑,当设定了这个变数时,如果主机名的域名部分与本地主机的域名相同,xdm 命令就删除主机名的域名部分 。预设值为 True 。DisplayManager.keyFileXDM-AUTHENTICATION-1 样式 XDMCP 认证要求在 xdm 守护进程和终端之间共享专用密钥 。该资源指定包含这些值的档案 。档案中的每个条目都由一个显示器名称和共享密钥组成 。预设情况下,xdm 命令不包括对 XDM-AUTHENTICATION-1 的支持,因为它需要数据加密方法(data encryption method,DES),而由于美国出口限制的约束,DES 一般是不允许分发的 。DisplayManager.accessFile为了防止出现未授权的 XDMCP 服务和允许 XDMCP IndirectQuery 请求的转发,该档案包含一个主机名的资料库(该资料库中的主机允许对本机器进行直接访问),或包含一个主机列表(其内容为查询应该转发到的主机) 。该档案的格式在『XDMCP 访问控制』一节中描述 。DisplayManager.exportList一个用空白分隔的附加环境变数的列表,将传输到 Xsetup、Xstartup、Xsession 和 Xreset 程式 。DisplayManager.randomFile一个将进行校验和的档案,生成授权密钥的种子值 。该档案应当是经常更改的档案 。预设值为 /dev/mem 。DisplayManager.choiceTimeout用户从选择器选择了主机后要等待显示器回响的秒数 。如果显示器在此期间传送一条 XDMCP IndirectQuery 讯息,那幺请求就会被转发到所选择的主机 。否则,就会假定它来自新的会话并再次提供选择器 。预设值为 15 。DisplayManager.DISPLAY.resources指定 xrdb 命令要装入的档案的名称作为显示器的萤幕 0 根视窗上的资源资料库 。登录小视窗 Xsetup 和 chooser 程式使用该档案中设定的资源 。该资源资料库刚好在认证过程开始前装入,所以它能够控制登录视窗的外观 。请参阅认证客户机一节,其中描述了适合放在该档案中的各种资源 。对该资源来说没有预设值,不过通常都用 /usr/lib/X11/xdm/Xresources 作为名称 。DisplayManager.DISPLAY.chooser指定程式运行以提供一个主机选单,包含重定向到特殊的主机名 CHOOSER 的间接查询 。/usr/lib/X11/xdm/chooser 为预设值 。请参阅『XDMCP 控制访问』和『选择器』一节 。DisplayManager.DISPLAY.xrdb指定用于装入资源的程式 。预设情况下,xdm 命令使用 /usr/bin/X11/xrdb 。DisplayManager.DISPLAY.cpp指定由 xrdb 命令使用的 C 预处理器的名称 。DisplayManager.DISPLAY.setup指定提供登录视窗前运行(作为 root 用户)的程式 。该资源可以用于更改登录视窗周围的萤幕外观,或打开其它视窗(例如,在这里可能希望运行 xconsole) 。预设情况下不运行任何程式 。在这里使用的档案名称一般为 Xsetup 。请参阅设定程式一节 。DisplayManager.DISPLAY.startup指定在认证过程成功后运行(作为 root 用户)的程式 。预设情况下不运行任何程式 。这里使用的档案名称一般为 Xstartup 。请参阅启动程式一节 。DisplayManager.DISPLAY.session指定要运行的会话(在不作为 root 用户运行时) 。预设情况下将运行 /usr/bin/X11/xterm 。名称一般为 Xsession 脚本 。请参阅会话程式一节 。DisplayManager.DISPLAY.reset指定在会话结束后运行(作为 root 用户)的程式 。预设情况下不运行任何程式 。名称一般为 Xreset 脚本 。请参阅重新设定程式一节 。DisplayManager.DISPLAY.openDelay通过指定连续两个请求之间相隔的时间长度(按秒计算),在试图打开非让步伺服器时控制 xdm 命令的行为 。DisplayManager.DISPLAY.openRepeat通过指定要发出请求的次数,在试图打开非让步伺服器时控制 xdm 命令的行为 。DisplayManager.DISPLAY.openTimeout通过指定在真正请求打开时要等待的秒数(即 connect(2) 系统调用占用的最长时间),在试图打开非让步伺服器时控制 xdm 命令的行为 。DisplayManager.DISPLAY.startAttempts通过指定在放弃访问伺服器之前整个过程要完成的次数,在试图打开非让步伺服器时控制 xdm 命令的行为 。在设定显示器管理器 openRepeat 资源指定的尝试次数后,或者如果显示器管理器 openTimeout 资源指定的秒数在任何特定的请求中耗尽,xdm 命令就会结束并重新启动伺服器,试图重新连线 。该过程会重複 startAttempts 次,直到显示器被声明为非活动或被禁用 。儘管这种行为看起来可能具有任意性,但人们对它的开发已经颇具经验,而它对多数系统也非常适用 。预设情况下,openDelay 值为 5、openRepeat 值为 5、openTimeout 值为 30、startAttempts 值为 4 。DisplayManager.DISPLAY.pingInterval要了解远程显示器何时消失,可以使用 xdm 命令定期地 ping 它们,方法是使用 X 连线和 XSync 调用 。该资源指定两次尝试 ping 之间的时间(按分钟计) 。预设情况下,它的设定为 5 分钟 。如果频繁地使用 X 终端,而这些终端可能会变为与管理主机分离,则可以增加这个值 。注:在终端被意外地禁用之后,AIXwindows会话可能会继续存在 。xdm 命令不 ping 本地显示器 。如果伺服器为 NFS 服务挂起而且不回响 ping 操作,那幺工作站会话可能会结束 。DisplayManager.DISPLAY.pingTimeout要了解远程显示器何时消失,可以使用 xdm 命令定期地 ping 它们,方法是使用 X 连线和 XSync 调用 。该资源指定等待终端对请求作出回响的最长时间(按分钟计) 。如果终端不回响,那幺会话就会被声明为不活动的并结束 。预设情况下,它的设定为 5 分钟 。如果频繁地使用 X 终端,而这些终端可能会变为与管理主机分离,则可以增加这个值 。注:在终端被意外地禁用之后,AIXwindows会话可能会继续存在 。xdm 命令不 ping 本地显示器 。如果伺服器为 NFS 服务挂起而且不回响 ping 操作,那幺工作站会话可能会结束 。DisplayManager.DISPLAY.terminateServer指定在会话结束后是否应该取消 X 伺服器(而不是重新设定它) 。如果伺服器可能会随着时间变化持续增长而无约束,该选项可以用于限制伺服器运行的时间 。预设值为 False 。DisplayManager.DISPLAY.userPathxdm 命令将会话的 PATH 环境变数设定为该值 。它应该为一个由冒号分隔的目录列表;请参阅《AIX 5L V5.2 命令参考大全》中的 sh 命令,了解完整的描述 。:/bin:/usr/bin:/usr/bin/X11:/usr/ucb 是常用的设定 。可以在构建时在AIXwindows系统配置档案中用 DefaultUserPath 资源指定预设值 。DisplayManager.DISPLAY.systemPathxdm 命令会将启动及重新设定脚本的 PATH 环境变数设定为该资源的值 。可以在构建时用系统配置档案中的 DefaultSystemPath 资源条目来指定该资源的预设值;通常可以选择使用 /etc:/bin:/usr/bin:/usr/bin/X11:/usr/ucb 。注意:该条目中省略了 .(句号)(当前目录) 。这对于 root 用户来说是一个很好的做法;它可以避免很多常见的“特洛伊木马(Trojan Horse)”系统侵入方式 。DisplayManager.DISPLAY.systemShellxdm 命令会将启动及重新设定脚本的 SHELL 环境变数设定为该资源的值 。预设值为 /bin/sh 。DisplayManager.DISPLAY.failsafeClient如果预设会话没有能够运行,xdm 命令将返回到该程式 。该程式的运行不需要参数,它使用会话可能使用的相同环境变数(请参阅『会话程式』一节) 。预设情况下将使用 /usr/bin/X11/xterm 。DisplayManager.DISPLAY.grabServerDisplayManager.DISPLAY.grabTimeout为了加强安全性,xdm 命令在读取登录名和密码时将抓取伺服器和键盘 。grabServer 资源将指定伺服器在读取名称/密码的持续时间内是否应该被控制 。如果设定为 False,那幺在成功地获得键盘访问权后就会放弃伺服器访问权,否则伺服器访问权直到会话开始前才会被放弃 。预设值为 False 。grabTimeout 资源指定 xdm 命令在访问权成功获取前要等待的最长时间 。如果某个其它的客户机获取了伺服器的访问权,抓取就会失败,这也可能归咎于网路延迟太严重 。该资源的预设值为 3 秒;提高该值时要非常小心,因为用户在显示器看到一个类似的视窗时可能会非常迷惑 。如果获取访问权失败,xdm 命令就会变为不活动的,并重新启动伺服器(如果可能)和会话 。DisplayManager.DISPLAY.authorizeDisplayManager.DISPLAY.authNameauthorize 是一个布尔资源,它控制 xdm 命令是否为本地伺服器连线生成并使用授权 。如果使用了授权,那幺 xdm 命令就使用由空白分隔的列表表明的授权机製作为 authName 资源的值 。XDMCP 连线动态地指定支持哪种授权机制,所以在这种情况下 authName 资源会被忽略 。如果 authorize 资源被设定给一个显示器,而授权不可用,那幺用户就会看到 Login 小视窗中显示另一条讯息 。预设情况下,authorize 资源为 True;authName 为 MIT-MAGIC-COOKIE-1 。DisplayManager.DISPLAY.authFile表明档案是用于将来自 xdm 命令的授权数据传输到伺服器(使用 -auth 伺服器命令行选项) 。应该将其保存在一个目录中并限制写访问权(因为它可以被轻易地删除),结果就会禁用伺服器中的授权机制 。DisplayManager.DISPLAY.authComplain如果该值设定为 False,就会禁用登录视窗中的 unsecureGreeting 。请参阅认证客户机一节 。预设值为 True 。DisplayManager.DISPLAY.resetSignalxdm 命令为使伺服器复位而传送的信号数 。请参阅控制伺服器一节 。预设值为 1(SIGHUP) 。DisplayManager.DISPLAY.termSignalxdm 命令为结束伺服器而传送的信号数 。请参阅控制伺服器一节 。预设值为 15(SIGTERM) 。DisplayManager.DISPLAY.resetForAuth使 xdm 命令在设定了授权档案后传送 SIGHUP 到伺服器,这样会在读取新的授权信息期间发生另一次伺服器复位 。预设值为 False,这对所有 AIXwindows 伺服器都适用 。DisplayManager.DISPLAY.userAuthDir当 xdm 命令不能对通常的用户授权档案($HOME/.Xauthority)进行写操作时,它会在该目录中创建一个唯一的档案名称并将 XAUTHORITY 环境变数设定为所创建的档案的名称 。它的预设值为 /tmp 。XDMCP 访问控制由 DisplayManager.accessFile 资源指定的资料库档案提供 xdm 命令用来控制来自请求 XDMCP 服务的显示器的访问 。该档案包含三种类型的条目:* 控制对 Direct 以及 Broadcast 查询的回响的条目 。* 控制对Indirect 查询的回响的条目 。* 宏定义 。Direct 查询条目包含一个主机名或模式(它通过包含一个或多个模式匹配字元,从而与主机名区分开来) 。*(星号)匹配 0(零)或多个字元的任何序列,而 ?(问号)匹配任何单个字元 。这些字元与显示器设备的主机名进行对比 。如果条目为主机名,那幺所有比较都是使用网路地址进行的,以便可以使用任何转换为正确的网路地址的名称 。至于模式,在比较中只使用真正的主机名,所以确保不要去匹配别名 。如果在主机名或模式前面加上了 !(感叹号)会导致与条目匹配的主机被排除在外 。Indirect 条目也包含主机名或模式,不过其后跟有一个主机名或宏的列表,indirect 查询应当传送到这个列表 。宏定义包含一个宏名称、主机名列表以及该宏扩展到的其它宏 。为了区别宏和主机名,宏名称前以 %(百分号)字元开头 。宏可以嵌套 。Indirect 条目也可以指定为让 xdm 命令运行 chooser 命令来提供要连线的主机的选单 。请参阅下一页的选择器一节 。在检查特定显示器主机的访问时,每个条目都要被依次扫描,第一个匹配的条目确定回响 。例如,Direct 查询条目在扫描寻找 Indirect 条目时会被忽略 。Broadcast 查询条目在扫描寻找 Direct 条目时会被忽略 。空行将被忽略 。# 字元作为注释定界符,该行的剩余部分将会被忽略,行末的 \ (反斜槓) 将使其后的换行符被忽略,这使得间接主机列表可以跨越多行 。下面是一个示例 Xaccess 档案:## Xaccess - XDMCP access control file### Direct/Broadcast query entries#!xtra.lcs.mit. edu# disallow direct/broadcast service for xtrabambi.ogi. edu# allow access from this particular display*.lcs.mit. edu# allow access from any display in LCS## Indirect query entries#%HOSTSexpo.lcs.mit. edu xenon.lcs.mit. edu \\excess.lcs.mit. edu kanga.lcs.mit. eduextract.lcs.mit. edu xenon.lcs.mit. edu #force extract to contact xenon !xtra.lcs.mit. edudummy#disallow indirect access*.lcs.mit. edu%HOSTS#all others get to choose选择器对于不提供主机选单以使用 Broadcast 或 Indirect 查询的 X 终端来讲,chooser 程式可以为它们实现这一点 。在 Xaccess 档案中,请指定 CHOOSER 作为 Indirect 主机列表中第一个条目 。chooser 程式传送一条 Query 请求到列表中的每个剩余的主机名,并提供一个包含所有回响该请求主机的选单 。该列表可以包含 BROADCAST 一词,这样 chooser 就可以改为传送 Broadcast 查询,也可再次提供所有回响请求的主机的选单 。下面是一个使用 chooser 的示例 Xaccess 档案:extract.lcs.mit. eduCHOOSER %HOSTS#offer a menu of these hostsxtra.lcs.mit. eduCHOOSER BROADCAST#offer a menu of all hostschooser 使用的程式由 DisplayManager.DISPLAY.chooser 资源指定 。该程式的资源可以放在由 DisplayManager.DISPLAY.resources 资源命名的档案中 。chooser 使用 Motif SelectionBoxWidget 实现 。请参阅 XmSelectionBoxWidget Class 文档,获取对资源和小视窗或配件名称的描述 。伺服器规範DisplayManager.servers 资源提供一份伺服器规範,如果值以 /(斜槓)开头,则提供一个包含伺服器规範(每行一个)的档案的名称 。每个规範表明一个应该一直受管而且不使用 XDMCP 的显示器 。每个规範至少由三部分组成:* 显示器名称* 显示类* 显示器类型* 对于本地伺服器来说,用于启动伺服器的命令行 。0 号本地显示器的典型条目为::0 IBM-GT local /usr/bin/X11/X :0显示器类型为:local本地显示器:\fIxdm\fP 必须运行伺服器foreign远程显示器:\fIxdm\fP 对运行的伺服器打开一个 X 连线显示器名称必须是可以在 -display 选项中传输到 X 程式的名称 。该字元串用于生成特定于显示器的资源名称,所以在匹配名称时要注意(例如,如果其它资源被指定为“DisplayManager._0.session”,则使用“:0 local /usr/bin/X11/X :0”,而不是“`localhost:0 local /usr/bin/X11/X :0” 。显示器类部分还用于特定于显示器的资源中作为资源的类 。如果集合了很多的类似显示器(如一个 X 终端聚集),而且希望为这些显示器组设定资源,这非常有用 。在使用 XDMCP 时,需要为显示器指定显示器类,因此,特定 X 终端的手册应该记录设备的显示器类字元串 。如果没有,可以在调试方式中运行 xdm 命令,然后寻找它为该设备生成的资源字元串,其中将包括类字元串 。设定程式Xsetup 档案在伺服器复位后、但在登录视窗出现之前运行 。该档案通常为 shell 脚本 。它是作为 root 用户运行的,所以要注意安全性 。这是修改 root 用户后台或激活应该在萤幕上与 Login 小视窗一同显示的其它视窗的地方 。由于 xdm 占用了键盘的访问权,其它视窗将不能接收键盘输入 。不过,它们可以使用滑鼠进行互动;在这里要注意可能存在的安全性漏洞 。如果设定了 DisplayManager.DISPLAY.grabServer,Xsetup 将根本无法连线到显示器 。该程式的资源可以放在 DisplayManager.DISPLAY.resources 指定的档案中 。除了由 DisplayManager.exportList 指定的任何变数,还可以传输下列环境变数:DISPLAY指定相关的显示器名称 。PATH指定 DisplayManager.DISPLAY.systemPath 的值 。SHELL指定 DisplayManager.DISPLAY.systemShell 的值 。XAUTHORITY指定它可以设定为一个许可权档案 。认证客户机MIT 认证小视窗已经被一个由标準的 Motif 视窗组成的认证客户机取代 。下面是一个小视窗名(及其小视窗类)的列表:outframe(xmFrameWidget)inframe(xmFrameWidget)inframe(xmFrameWidget)main(XmFormWidget)tframe(xmFrameWidget)greeting(xmLabelGadget)logoline(xmFormWidget)dpyname(xmLabelWidget)userline(xmRowColumnWidget)userlabel(xmLabelWidget)username(xmTextWidget)passlabel(xmLabelWidget)password(xmTextWidget)failsafeline(xmFormWidget)failsafe(xmToggleButtonWidget)cancelline(xmFormWidget)cancel(xmPushButtonWidget)message(xmLabelWidget)认证客户机从键盘读取名称/密码对 。将该客户机的资源放在 DisplayManager.DISPLAY.resources 指定的档案中 。这些都具有合理的预设值,所以没有必要指定它们中的任何一个 。请查看 /usr/lib/X11/xdm/Xresources 以了解关于认证客户机资源的预设值以及合适的小视窗类文档的更多信息 。认证客户机还支持下列资源: Xlogin*foreground指定前景使用的颜色 。Xlogin*background指定背景使用的颜色 。Xlogin*greeting指定标识该视窗的字元串 。预设值为 AIXwindows 环境 。Xlogin*greetFont指定用于显示欢迎信息的字型 。Xlogin*frameColor指定用于显示欢迎信息的背景颜色 。Xlogin*titleMessage指定标题中显示的字元串 。预设值为运行认证客户机的机器的主机名 。Xlogin*titleFont指定用于显示标题的字型 。Xlogin*namePrompt指定在提示输入用户名时显示的字元串 。Xrdb 程式将从资源值删去尾部的空白 。请在提示符后用转义的反斜槓添加空格 。预设值为“login:” 。Xlogin*passwdPrompt指定提示输入密码时显示的字元串 。预设值为“password:” 。Xlogin*promptFont指定用于显示两种提示符的字型 。Xlogin*failPrompt指定用于错误处理(failsafe)按钮的标籤 。Xlogin*failFont指定用于错误处理按钮的字型 。Xlogin*cancelPrompt指定用于取消按钮的标籤 。Xlogin*cancelFont指定用于取消按钮的字型 。Xlogin*fail指定表明认证失败时显示的讯息 。预设值为“Login was incorrect.” 。Xlogin*messageFontlist指定用于显示失败讯息的字型 。Xlogin*failColor指定用于显示失败讯息的颜色 。Xlogin*failTimeout指定失败讯息显示的秒数 。预设值为三十秒 。Xlogin*sessionArgument指定传输到会话程式的自变数 。Xlogin*XmText.translations它将指定认证客户机所使用的转换 。请参阅 X Toolkit 文档,获取关于转换的完整论述 。预设的转换表为:Ctrl<Key>b: backward-character()\n\Ctrl<Key>a: beginning-of-line()\n\Ctrl<Key>e: end-of-line()\n\Ctrl<Key>f: forward-character()\n\Ctrl<Key>d: kill-next-character()\n\Ctrl<Key>k: kill-to-end-of-line()\n\Ctrl<Key>u: kill-to-start-of-line()\n可以通过按 Xresources 中所定义方式替换 XmText 转换,将 XDM 设定为使用标準的 XDM 转换:注: 由于 Motif 的预设虚拟绑定的缘故,请使用 <Key>osfHelp,而不是 <Key>F1 。Xlogin*XmText.translations: #override\n\<Key>osfHelp: set-session-argument(failsafe) finish-field()\n\Ctrl<Key>Return: set-session-argument(failsafe) finish-field()\n\Ctrl<Key>H:delete-previous-character() \n\Ctrl<Key>D:delete-character() \n\Ctrl<Key>B:move-backward-character() \n\Ctrl<Key>F:move-forward-character() \n\Ctrl<Key>A:move-to-beginning() \n\Ctrl<Key>E:move-to-end() \n\Ctrl<Key>K:erase-to-end-of-line() \n\Ctrl<Key>U:erase-line() \n\Ctrl<Key>X:erase-line() \n\<Key>Return:finish-field() \n<Key>BackSpace: delete-previous-character() \n\<Key>Delete:delete-previous-character() \n除了典型的 XmText 操作之外,客户机还支持下列操作,以便与标準的 XDM 转换兼容:delete-previous-character删除游标前的字元 。delete-character删除游标后的字元 。move-backward-character将游标向后移动 。move-forward-character将游标向前移动 。move-to-beginning将游标移动到可编辑的文本的最前面 。move-to-end将游标移动到可编辑的文本的最后面 。erase-to-end-of-line删除游标后的所有文本 。erase-line删除所有文本 。finish-field如果游标在名称栏位,继续转到密码栏位;如果游标在密码栏位,则检查当前的名称/密码对 。如果名称/密码对有效,xdm 就启动会话 。否则就会显示失败讯息,并再次提示用户 。insert-char插入键入的字元 。set-session-argument 指定启动时传输到会话的单一单词参数 。请参阅『会话程式』和『典型用法』节 。启动程式Xstartup 档案通常为一个 shell 脚本 。因为它是作为 root 用户运行的,所以在它运行时要注意安全性 。它通常包含一些命令,用于向 /etc/utmp 添加条目、从档案伺服器安装用户的主目录、显示当天讯息或在不允许登录时取消会话 。除了由 DisplayManager.exportList 指定的环境变数,还要传输下列变数:DISPLAY指定相关的显示名称 。HOME指定用户初始工作目录 。USER指定用户名 。PATH指定 DisplayManager.DISPLAY.systemPath 的值 。SHELL指定 DisplayManager.DISPLAY.systemShell 的值 。XAUTHORITY可以设定为一个许可权档案 。没有自变数被传输到脚本中 。xdm 命令在启动用户会话之前一直等待,直到该脚本退出 。如果该脚本的出口值为非零值,那幺 xdm 命令中断会话并启动另一个认证周期 。会话程式Xsession 程式建立用户会话的风格 。它使用授权用户的许可权来运行 。除了由 DisplayManager.exportList 指定的任何变数,还可以传输下列环境变数:DISPLAY指定相关的显示名称 。HOME指定用户初始工作目录 。USER指定用户名 。PATH指定 DisplayManager.DISPLAY.userPath 的值 。SHELL指定用户的预设 shell(从 getpwnam) 。XAUTHORITY可以设定为一个非标準的许可权档案 。在多数安装中,Xsession 程式应该在用户的主目录($HOME)中查找 .xsession 档案,它包含用户可能希望作为会话使用的命令 。如果不存在用户指定的会话,Xsession 程式还应该实现一个系统预设会话 。请参阅典型用法一节 。可以使用“set-session-argument”操作将自变数从认证小视窗传输到本程式 。这可以用来选择会话的不同风格 。通常,该功能用来在会话失败时让用户从普通的会话中脱离开来 。这使得用户在失败时能够修复自己的 .xsession,而不需要管理员干涉 。典型用法一节演示了本功能 。重新设定程式Xreset 脚本在用户会话结束后运行 。它作为 root 用户运行,应该包含一些命令用以撤销 Xstartup 中的命令的作用,方法是从 /etc/utmp 中除去条目或从档案伺服器卸装目录 。传输到 Xstartup 的环境变数也会被传输到 Xreset 。该程式与 Xstartup 程式是对称的 。控制伺服器xdm 命令使用 POSIX 信号控制本地伺服器 。SIGHUP 信号用来将伺服器复位、关闭所有的客户机连线并执行其它的清理任务 。SIGTERM 信号应该会取消伺服器 。如果这些信号没有执行预期的操作,DisplayManager.DISPLAY.resetSignal 和 DisplayManager.DISPLAY.termSignal 资源可以指定备用的信号 。要控制不使用 XDMCP 的远程终端,xdm 命令将搜寻显示器上的视窗层次结构,并使用协定请求 KillClient 试图清理下一个会话的终端 。这可能不会真正使所有客户机处于非活动状态,因为只有那些曾经创建了视窗的客户机才会被注意到 。XDMCP 提供了一种更有保证的机制;当 xdm 命令关闭其初始连线时,会话结束,且终端被要求关闭所有其它连线 。控制 XDMxdm 命令对两种信号作出回响:SIGHUP 和 SIGTERM 。当传送 SIGHUP 之后,xdm 重新读取配置档案、访问控制档案以及伺服器档案 。对于伺服器档案,它会查看是否添加或除去了条目 。如果添加了新条目,xdm 命令就会在相关的显示器上启动一个会话 。被除去的条目会立即禁用,这意味着正在进行的任何会话都会被结束而不会得到通知,而且不会启动新的会话 。当传送 SIGTERM 之后,xdm 命令将停止正在进行的所有会话并退出 。这可以用在关闭系统的时候 。xdm 命令试图示记各种由 ps 命令《AIX 5L V5.2 命令参考大全》使用的子进程,方法是编辑已有的命令行自变数列表 。由于 xdm 命令不能为这项任务分配额外的空间,所以用一个适当的长命令行(使用全路径名应该就足够了)来启动 xdm 命令非常有用 。每个供显示使用的进程都会被标记为 -display 。其它可能性可以使用 xdm 命令每次运行一个会话,方法是通过在命令行指定伺服器来使用 xinit 命令选项或其它合适的守护进程:xdm -server ":0 local /usr/bin/X11/X :0 -force"也可以运行一个档案伺服器和一组 X 终端 。它的配置与前面样本中的一样,只是 Xservers 档案应该类似于下面的内容:extol:0 VISUAL-19 foreignexalt:0 NCD-19 foreignexplode:0 NCR-TOWERVIEW3000 foreign这将使 xdm 命令管理所有这三个终端上的会话 。请参阅控制 XDM一节,获取如何使用信号来启用或禁用这些终端的描述 。注:xdm 命令与其它视窗系统不能很好地共存 。要在相同的硬体上使用多视窗系统,请使用 xinit 命令 。示例1. 下面的 xstartup 样本脚本在档案 /etc/nologin 存在时防止进行登录 。由于没有规定要在这里显示任何讯息(没有显示档案的核心 X 客 户机),我们不推荐使用本示例中的设定,因为登录可能会失败而不作任何解释 。因此,这不是一个完整的示例,而是一个关于可用的功能的演示 。#!/bin/sh## Xstartup## This program is run as root after the user is verified#if [ \-f /etc/nologin ]; then exit 1fiexit 02. 这个 Xsession 脚本识别前面的 Xresources 档案中的转换所指定的特殊的 failsafe(错误处理)方式,从而从一般的会话中脱离出来 。#!/bin/shexec > $HOME/.xsession-errors 2>&1case $# in1)case $1 in failsafe)exec aixterm -geometry 80x24-0-0;;esacesacstartup=$HOME/.xsessionresources=$HOME/.Xresourcesif [ -f /usr/bin/X11/startx ]; thenexec /usr/bin/X11/startx -t -waitelif [ -f $startup]; thenexec $startupelseif [ -f $resources ]; thenxrdb -load $resourcesfimwm &exec aixterm -geometry 80x24+10+10 -lsfi3. 要让 xdm 在系统启动时运行,以 root 用户的身份输入以下命令:/usr/lib/X11/xdm/xdmconf4. 要在重新引导时禁用 xdm,以 root 用户身份输入以下命令:/usr/lib/X11/xdm/xdmconf -d5. 在使用 xdm 管理显示器时,认证过程保证只有被允许的客户机才能连线到显示器 。使用 X11 R4 和 X11 R5 库构建的客户机能够理解该协定 。使用 X11 R3 或更早的库构建的客户机不支持这种认证协定,且不允许连线到 Xserver,除非已授予 xhost 许可权 。可以输入以下命令来连线本地客户机:xhost =localhost或xhost =machine其中 machine 是本地客户机的主机名 。档案/usr/lib/X11/xdm/xdm-config预设的配置档案 。/usr/lib/X11/xdm/Xaccess预设的访问档案,列出已授权的显示 。/usr/lib/X11/xdm/Xservers预设的伺服器档案,列出了要管理的非 XDMCP 伺服器 。$(HOME)/.Xauthority用户授权档案,其中 xdm 存储客户机要读取的密钥 。/usr/lib/X11/xdm/chooser预设的选择器 。/usr/bin/X11/xrdb预设的资源资料库装入程式 。/usr/bin/X11/X预设的伺服器 。/usr/bin/X11/xterm预设的会话程式和错误处理客户机 。/usr/lib/X11/xdm/A<host>\-<suffix>存储授权档案的预设位置 。XQuery数据模型英文原文: XQuery Data Model