通过 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/Xservers DisplayManager.errorLogFile: /usr/lib/X11/xdm/xdm-errors DisplayManager*resources: /usr/lib/X11/xdm/Xresources DisplayManager*startup: /usr/lib/X11/xdm/Xstartup DisplayManager*session: /usr/lib/X11/xdm/Xsession DisplayManager.pidFile: /usr/lib/X11/xdm/xdm-pid DisplayManager._0.authorize: true DisplayManager*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.daemonMode | xdm 命令试图将自己插入到一个与任何终端都无关的守护进程进程中。这是通过派生父进程并任其退出,然后关闭文件描述符并释放控制终端来实现的。在某些环境中,这不是我们所期望的(特别是在调试时)。可以通过将该资源设置为 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.keyFile | XDM-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.userPath | xdm 命令将会话的 PATH 环境变量设置 为该值。它应该为一个由冒号分隔的目录列表;请参阅《AIX 5L V5.2 命令参考大全》中的 sh 命令,了解完整的描述。:/bin:/usr/bin:/usr/bin/X11:/usr/ucb 是常用的设置。可以在构建时 在AIXwindows系统配置文件中用 DefaultUserPath 资源指定缺省值。 |
DisplayManager.DISPLAY.systemPath | xdm 命令会将启动及重新设置脚本的 PATH 环境变量设置为该资源的值。可以在构建时用系统配置文件中的 DefaultSystemPath 资源条目来指定该资源的缺省值;通常可以选择使用 /etc:/bin:/usr/bin:/usr/bin/X11:/usr/ucb。注意:该条目中省略 了 .(句号)(当前目录)。这对于 root 用户来说是一个很好的做法;它可以避免很多常见 的“特洛伊木马(Trojan Horse)”系统侵入方式。 |
DisplayManager.DISPLAY.systemShell | xdm 命令会将启动及重新设置脚本的 SHELL 环境变量设置为该资源的值。缺省值为 /bin/sh。 |
DisplayManager.DISPLAY.failsafeClient | 如果缺省会话没有能够运行,xdm 命令将返回到该程序。该程序的运行不需要参数,它使用会话可能使用的相同环境变量(请参阅『会话程序』一节)。缺省情况下将使用 /usr/bin/X11/xterm。 |
DisplayManager.DISPLAY.grabServer
DisplayManager.DISPLAY.grabTimeout |
为了加强安全性,xdm 命令在读取登录名和密码时将抓取服务器和键盘。grabServer 资源将指定服务器在读取名称/密码的持续时间内是否应该被控制。如果设置为 False,那么在成功地获得键盘访问权后就会放弃服务器访问权,否则服务器访问权直到会话开始前才会被放弃。缺省值为 False。grabTimeout 资源指定 xdm 命令在访问权成功获取前要等待的最长时间。如果某个其它的客户机获取了服务器的访问权,抓取就会失败,这也可能归咎于网络延迟太严重。该资源的缺省值为 3 秒;提高该值时要非常小心,因为用户在显示器看到一个类似的窗口时可能会非常迷惑。如果获取访问权失败,xdm 命令就会变为不活动的,并重新启动服务器(如果可能)和会话。 |
DisplayManager.DISPLAY.authorize | authorize 是一个布尔资源,它控制 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.resetSignal | xdm 命令为使服务器复位而发送的信号数。请参阅控制服务器一节。缺省值为 1(SIGHUP)。 |
DisplayManager.DISPLAY.termSignal | xdm 命令为结束服务器而发送的信号数。请参阅控制服务器一节。缺省值为 15(SIGTERM)。 |
DisplayManager.DISPLAY.resetForAuth | 使 xdm 命令在设置了授权文件后发送 SIGHUP 到服务器,这样会在读取新的授权信息期间发生另一次服务器复位。缺省值为 False,这对所有 AIXwindows 服务器都适用。 |
DisplayManager.DISPLAY.userAuthDir | 当 xdm 命令不能对通常的用户授权文件($HOME/.Xauthority)进行写操作时,它会在该目录中创建一个唯一的文件名并将 XAUTHORITY 环境变量设置为所创建的文件的名称。它的缺省值为 /tmp。 |
由 DisplayManager.accessFile 资源指定的数据库文件提供 xdm 命令用来控制来自请求 XDMCP 服务的显示器的访问。该文件包含三种类型的条目:
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 xtra bambi.ogi.edu # allow access from this particular display *.lcs.mit.edu # allow access from any display in LCS
# # Indirect query entries #
%HOSTS expo.lcs.mit.edu xenon.lcs.mit.edu \\ excess.lcs.mit.edu kanga.lcs.mit.edu
extract.lcs.mit.edu xenon.lcs.mit.edu #force extract to contact xenon !xtra.lcs.mit.edu dummy #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.edu CHOOSER %HOSTS #offer a menu of these hosts xtra.lcs.mit.edu CHOOSER BROADCAST #offer a menu of all hosts
chooser 使用的程序由 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 以了解关于认证客户机资源的缺省值以及合适的小窗口类文档的更多信息。认证客户机还支持下列资源:
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 命令关闭其初始连接时,会话结束,且终端被要求关闭所有其它连接。
xdm 命令对两种信号作出响应: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 foreign exalt:0 NCD-19 foreign explode:0 NCR-TOWERVIEW3000 foreign
这将使 xdm 命令管理所有这三个终端上的会话。请 参阅控制 XDM一节,获取如何使用信号来启用或禁用这些终端的描述。
#!/bin/sh # # Xstartup # # This program is run as root after the user is verified # if [ \-f /etc/nologin ]; then exit 1 fi exit 0
#!/bin/sh exec > $HOME/.xsession-errors 2>&1 case $# in 1) case $1 in failsafe) exec aixterm -geometry 80x24-0-0 ;; esac esac startup=$HOME/.xsession resources=$HOME/.Xresources if [ -f /usr/bin/X11/startx ]; then exec /usr/bin/X11/startx -t -wait elif [ -f $startup]; then exec $startup else if [ -f $resources ]; then xrdb -load $resources fi mwm & exec aixterm -geometry 80x24+10+10 -ls fi
/usr/lib/X11/xdm/xdmconf
/usr/lib/X11/xdm/xdmconf -d
xhost =localhost
或
xhost =machine
其中 machine 是本地客户机的主机名。