49 FreeBSD连载:进入X Window( 二 )


另一个不同之处在于,个人目录下的.xsession文件必须存在,用户才能通过XDM正常进入X Window,否则登录过程就会发生错误 。而对于xinit来讲,.xinitrc不是必需的如果.xsession的执行有问题,用户就不能从xdm的登录界面上登录进系统 。此时可以检查相应用户目录下的.xsession-errors文件,这个文件中将包含执行.xsession的错误信息 。
在FreeBSD 3.1-RELEASE中存在一个小问题,.xsession必须具备有可执行属性,否则就不能正确执行,这个问题在3.2-RELEASE中已经修正 。可以从.xsession-errors中的错误信息中来发现这个错误 。
先使用root登录系统,再手工执行xdm显然只是一个调试时的执行方式,如果要真正使用xdm让用户登录系统,应该在系统启动时自动执行xdm,最简单的方法是在/usr/X11R6/etc/rc.d目录下增加一个可执行的文件,例如命名为xdm.sh,并使用chmodx xdm.sh使其可以被执行,最简单的xdm.sh可以为以下的形式:
#! /bin/shecho “Enter xdm”/usr/X11R6/bin/xdm这样系统将在启动后直接启动xdm,进入X Window并展示一个登录界面等待用户登录 。xdm以一种守护进程的方式运行在后台,每次用户退出之后会自动重新启动另一个登录界面,允许用户登录 。
当然也可以将xdm命令放入rc.local文件中,然而使用单独的启动文件使得启动文件更为整齐、清晰 。
启动Xdm的另一种方式是更改/etc/ttys中的设置,系统会根据ttys文件中的配置在相应终端上启动相应的程序,因此可以在一个空余的控制台终端上,通常是第四个虚拟控制台ttyv3,启动xdm 。
ttyv3"/usr/X11R6/bin/xdm -nodaemon"xtermon securettys中指定的进程具备再产生的特性,每个进程退出之后立即被重新执行 。因此可以不必使用xdm本身的守护进程功能,而让系统来维护Xdm自动执行 。就需要使用-nodaemon参数,使xdm以普通进程的方式运行 。
远程启动X客户程序:
X Window本身的X协议支持网络,是一种分布式的体系结构 。如果使用者的FreeBSD与其他Unix通过网络相连接,就能在一个计算机上运行X客户程序,而将窗口显示在另一个运行X服务器的计算机上 。
由于一台计算机上可以运行多个X服务器,每个服务器会支持多个显示屏,那么X客户程序必须确认在计算机上的某一个服务器的某一个显示屏上进行显示,因此必须包括计算机地址、X服务器序号和显示屏号来唯一确定一个显示资源的位置,例如xserver:0.0,通常一台计算机中并没有过多的X服务器,该X服务器也不具备多个显示屏,因此就可以对显示资源的位置进行简化,一般使用xserver:0的表示方式 。
这种表示方式就可以标志远程X服务器的显示位置,当执行X客户程序时,就需要在命令行上使用display选项,来告诉X客户程序这个显示位置的参数 。
xclIEnt $ xterm -display xserver:0&或者通过设置DISPLAY环境变量来达到同样的目的 。
xclient $ DISPLAY=xserver:0; export DISPLAYxclient $ xterm &这两种方法都向名为xserver的计算机上的X服务器发出了请求,但能否正常开出窗口还必须得到这个X服务器的许可 。缺省情况下X服务器具备访问控制能力,标准访问控制方法使得只有具备访问许可的X客户,及其子程序才能访问X服务器的资源,而其他X客户程序不能使用X服务器资源 。当使用者使用startx和xinit启动X服务器时,或者通过xdm登录进系统时,其后启动的X客户程序就继承了原有的访问权限 。然而通过网络启动的X客户程序,使用X服务器资源就受到了这个访问控制的限制,不能正常启动 。
控制X服务器的访问控制能力的命令为xhost,为了使得xserver的显示资源能被xclient上的X客户程序所使用,就必须在已经具备X服务器访问能力的X仿真终端下执行以下指令:

推荐阅读