4. 配置 XDM

本节介绍为了使 XDM 执行本文档目前为止描述的功能,需要配置哪些内容。

在每种情况下,描述的配置都是完成每个目标所需的最低限度。 在大多数情况下,这也意味着配置也是最不安全的。 请参阅第 7 节中列出的其他文档,以获取有关保护 XDM 和 X 终端的信息(特别是 LDP 的“运行远程 X 应用程序 Howto”)。

4.1. 配置文件

这描述了 XDM 配置文件的以下方案

这些文件必须为实际运行 XDM 本身的机器设置。 它们通常位于(Debian 2.1。Mandrake 7.0.2,RedHat 6.2)
      /etc/X11/xdm
      
或(SuSE 6.4)
      /usr/X11R6/lib/X11/xdm
      

xdm-config

定义其他配置文件的名称和位置以及基本访问权限。 对于本文档中考虑的所有发行版,文件名都如此处列出的(但有时位置会有所不同)。

这也定义了为 X 会话的各种状态转换(即启动等时)运行的脚本。 您应该不需要更改这些,因为大多数发行版似乎都已为您预先配置了这些。

请注意,XDM 管理的 X 会话与通过 xinit 或 startx 启动的 X 会话(即非 XDM 管理的 X 会话)具有不同的启动和配置文件集。

某些发行版(例如 Redhat 7.1)在此配置文件中包含以下行,这将阻止 XDM 侦听查询
        DisplayManager.requestPort: 0
        
必须按如下方式注释掉
        !DisplayManager.requestPort: 0
        

Xaccess

确定哪些机器可以连接到 XDM - 即我们从网络上的哪些其他机器接受 XDMCP 查询。 如果机器未在此文件中列出,则它将无法从 XDM 请求登录提示。

Xservers

包含 XDM 将连接到的机器列表,以自动提供登录提示 - 即那些已经在运行 X 服务器,但希望此机器提供登录提示的机器。

这仅对于“XDM 管理的 X 服务器”是必需的。 如果您将依靠远程 X 服务器来查询 XDM,则无需在此文件中添加任何条目。

当作为独立的“X 工作站”运行时,此文件中通常只有一个条目,仅列出本地主机。

Xresources

XDM 小部件使用的 X 属性的详细信息(例如登录“框”的大小、颜色、位图背景等)。

4.2. 配置 XDM 以管理 X 服务器

必须在 Xservers 文件中为 XDM 将在其上显示登录提示的每个 X 服务器放置一个条目。 这可以包括本地机器和/或远程机器列表。

例子
      # First the local host
      :0 local /usr/bin/X11/X vt7
      #
      # Then the remote hosts
      emma:0 foreign
      alex:0 foreign
      

这将启动本地计算机上的 XDM,并在主机“emma”和“alex”上运行的 X 服务器上显示登录屏幕(假设已在“emma”和“alex”上设置了权限,以便允许此机器连接到正在运行的 X 服务器)。

请注意,如果需要,可以指定主机和显示器(:0、:1 等)。 例如,如果您在单台机器上运行多个 X 服务器等,这将非常有用。

4.3. 配置 XDM 以接收查询

文件 Xaccess 确定哪些主机可以查询此机器上的 XDM,以便请求登录提示。

例子
      # First line for direct queries
      *
      # Following line for indirect queries
      * CHOOSER BROADCAST
      

这意味着任何主机都可以使用直接查询通过 XDM 请求登录提示(第一个“*”)。

“CHOOSER”行指定哪些主机可以使用间接查询连接到 XDM - 在这种情况下,任何主机都可以查询此机器以获取要连接的潜在主机列表(第二个“*”行)。

“BROADCAST”表示此机器上的“chooser”应用程序将通过网络广播查询获取其可用的服务器列表(这些服务器也将运行 XDM)。 我稍后会讨论“chooser”。

可以将特定的主机名或网络 IP 地址规范(例如,整个 IP 网络或特定主机)放置在这些条目中(并且还有其他可能的间接查询,无需使用 chooser),但这在此处未描述(有关更多信息的链接,请参阅第 7 节)。

4.4. 启动 X

启动 X 服务器本身的方式将取决于您希望它如何在本地和远程与 XDM 交互。

在每种情况下,X 都可能必须以 root 身份启动。

可以使机器自动启动 X 并对网络上运行的 XDM 执行查询。 一种方法是“劫持” inittab 设置以作为图形登录运行(在基于 Debian 和 Redhat 的系统上,这是运行级别 5,在 SuSE 上是 3 - 此示例始终假设运行级别 5)。 这通常是 /etc/inittab 末尾以 x:5 开头的行。 将其设置为(或添加它,如果它不存在)
    x:5:respawn:/usr/X11R6/bin/X -broadcast
    
根据需要将 -broadcast 替换为 -direct 或 -indirect 等。 您可能还需要将默认运行级别更改为 5,(然后重新启动),如下所示
    id:5:initdefault:
    

4.5. 启动 XDM

在标准的 X 工作站配置中,XDM 通常通过指定默认初始运行级别来启动,该运行级别对应于完全图形登录。 在基于 Redhat 和 Debian 的系统上,这通常是运行级别 5。 在 SuSE 上,它是运行级别 3。

可以通过将默认运行级别更改为上述运行级别,在启动时自动运行 XDM。 这在 /etc/inittab 中配置如下
    id:5:initdefault:
    

或者,也可以为 XDM 本身添加一个启动脚本到启动目录(Redhat/Debian 的 /etc/rc.d/)中的 rc 脚本,以类似于 Linux 机器上的其他服务的方式启动和停止 XDM。

以下脚本适用于基于 Redhat(可能还有 Mandrake)的系统,应另存为 /etc/rc.d/init.d/xdm。 您必须使用“chkconfig --add xdm”启用它。
    #!/bin/sh
    # xdm start/stop script for RedHat based systems
    #
    # chkconfig: 234 60 60
    # description: xdm permits remote users to logon to this X display
    # processname: /usr/X11R6/bin/xdm
    # config: /etc/X11/xdm/xdm-config

    # source function library
    . /etc/rc.d/init.d/functions

    [ -x /usr/X11R6/bin/xdm ] || exit 0

    prog=/usr/X11R6/bin/xdm

    RETVAL=0

    start () {
    	echo -n $"Starting $prog: "
        # start daemon
        daemon $prog
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/xdm
        return $RETVAL
    }

    stop () {
    	echo -n $"Stopping $prog: "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/xdm
        return $RETVAL
    }

    restart () {
    	stop
        start
        RETVAL=$?
        return $RETVAL
    }

    # See how we were called.
    case "$1" in
    	 start)
        start
        ;;
         stop)
        stop
        ;;
         status)
        status $prog
        RETVAL=$?
        ;;
         restart)
        restart
        ;;
         condrestart)
        # only restart if it is already running
        [ -f /var/lock/subsys/xdm ] && restart || :
        ;;
         reload)
        echo -n $"Reloading $prog: "
        killproc $prog -HUP
        RETVAL=$?
        echo
        ;;
         *)
             echo $"Usage: $0 (start|stop|restart|condrestart|reload|status)"
             RETVAL=1
    esac

    exit $RETVAL
    

4.6. Chooser 应用程序

当 XDM 接收到间接查询,并且假设已在 Xaccess 中为“chooser”应用程序指定了适当的选项时,它可以向用户提供它知道的其他 XDM 管理的服务器列表。

在这种操作模式下,用户将看到的不是正常的 XDM 登录提示,而是一个“chooser”应用程序,它将提供网络上当前接受 XDM 连接的检测到的主机列表。

当我第一次尝试使用 chooser 时,我发现我的 SuSE 和 Debian 系统附带的 Xresources 文件指定了 chooser 小部件的大小,该大小对于屏幕来说太大了... Xresources 文件中的以下行修复了该问题
      Chooser*geometry:      700x500+300+200
      

chooser 将通过以下两种方法之一获取其主机列表

请注意,也可以将本地主机包含在 chooser 已知的机器列表中。 但是,应将 XDM 配置为不在本地控制台显示器上启动。 登录应始终通过对本地 chooser 应用程序的间接查询来执行,然后本地主机应与网络上的任何其他主机一起显示。

4.7. XDM 的替代方案

KDE 和 Gnome 都有自己的应用程序来替换标准 XDM。 它们做类似的事情,并且有充分的文档记录。 就提供远程 X 访问而言,应用程序的配置文件中有一个设置可以启用 XDMCP 支持。