当前所在位置:FreeBSD使用大全>>
FreeBSD连载(49):进入X Window
 
作者:王波
 

  X服务器的执行程序位于/usr/X11R6/bin目录中,并且使用一个符号 联接 “X” ,指向具体的执行程序,如XF86_VGA16或XF86_S3V等。因此直接输 入X命令就能启动设置好的X服务器,系统将进入图形状态,并出现一个可以 移动的X形鼠标指针,但并没有其他反应。这是因为X服务器只负责处理输入 和显示,具体对使用者的输入进行处理则由其他X客户负责,而直接启动X服 务器没有启动任何X客户,因而不能处理用户的任何输入。

  • 手工启动X Window

  因此为了利用图形界面的处理能力,在启动X服务器的同时还应该启 动X客户程序来负责回应用户的输入。这个任务可以通过shell程序startx或 xinit来作到,这两个程序能在启动X的同时,启动X Window的窗口管理程序 和其他X程序。

  startx和xinit缺省查看使用者个人目录下的.xinitrc文件,在这个 文件内应该包含启动各个X客户程序的命令。最简单的.xinitrc可能只包含 一个命令来启动一个仿真终端xterm,也可以包含一系列命令来启动多个程 序,创建出漂亮的X环境。想自己定制X Window操作环境的使用者可以手工 创建和修改这个文件,以得到不同的用户界面。

xmodmap -e 'keysym Alt_L = Meta_L Meta_L'
xterm &
xearth &
twm

  在这个例子中执行了 xmodmap用于修改X的键盘定义,然后在后台执 行xterm提供一个仿真终端,执行xearth设置X Window的背景,最后在前台执 行一个简单的窗口管理器twm。窗口管理器被放到前台执行,这样当退出窗口 管理器时将退出整个X服务器的执行。

  缺省情况下,用户并没有创建这个.xinitrc文件,这样xinit命令就 只能启动一个xterm终端仿真程序,而没有执行任何其他的X程序,也没有执 行窗口管理器。因此,直接使用xinit启动的X Window仅仅具备一个终端窗 口,将鼠标移动到它上面之后,才能输入命令执行其他操作。用户如果想要 启动窗口管理器或其他程序,必须在终端窗口中输入相应的命令。

  由于X Window中存在多个窗口,但只有一个称为 “焦点” 的窗口才能 接收输入。X Window缺省使用鼠标的位置来选择输入焦点窗口,当然另一些窗 口管理器也可以通过键盘来切换输入焦点窗口。

  但是即使不存在.xinitrc文件,使用startx也能启动窗口管理器和几个 X客户程序,这是由于startx发现用户个人目录下不存在.xinitrc文件之后,就 使用系统中的/usr/X11R6/lib/X11/xinit/xinitrc作为xinit程序的启动文件 (startx只是调用xinit的一个shell脚本)。因此更改系统的xinitrc文件,就 能使所有没有创建.xinitrc的用户仍然享有启动文件来启动X Window系统。由 于FreeBSD是一个多用户系统,这样配置启动文件就能简化每个用户的初始配置 任务。在用户对X Window的了解加深之后,就能进一步配置自己的启动文件来 定制自己使用的X Window风格。

  • XDM系统登录方式

  startx或xinit必须先在控制台下登录之后,输入相应命令才能进入X Window 环境。另一种方法为预先启动X Window系统,在X Window下登录进系统。这种 方式是使用xdm来实现的。

  以root用户登录之后,在命令行输入xdm,则系统立即启动X服务器,并 启动相应的登录管理程序,在X Window上出现一个登录窗口,允许各个用户登 录入系统。

  在用户通过登录认证之后,xdm就需要为用户启动登录会话。xdm就以用 户身份执行/usr/X11R6/lib/X11/xdm/Xsession文件,然后再执行用户个人目录 下的.xsession文件。个人目录下的.xsession文件与.xinitrc文件类似,也是一 个标准shell脚本,以下是一个例子。

PATH=/usr/bin:/usr/sbin/:/usr/X11R6/bin:/usr/local/bin
xrdb -load .Xdefaults 
xterm &
xearth &
twm

  这个文件与.xinitrc文件的不同之处在于,由于.xinitrc是在用户登录之 后由xinit使用的,因此包括PATH在内的环境变量都已经在用户的.profile等文件 中设置正确了,而通过xdm登录的用户并没有执行.profile等设置文件,因此必须 在.xsession中设置PATH等环境变量,才能正确找到各个执行文件,否则就必须使 用绝对路径来启动应用程序。

  另一个不同之处在于,个人目录下的.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, 并使用chmod +x xdm.sh使其可以被执行,最简单的xdm.sh可以为以下的形式:

#! /bin/sh
echo “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"       xterm    on secure

  ttys中指定的进程具备再产生的特性,每个进程退出之后立即被重新执行。 因此可以不必使用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 DISPLAY
xclient $ xterm &

  这两种方法都向名为xserver的计算机上的X服务器发出了请求,但能否正 常开出窗口还必须得到这个X服务器的许可。缺省情况下X服务器具备访问控制能力 ,标准访问控制方法使得只有具备访问许可的X客户,及其子程序才能访问X服务器 的资源,而其他X客户程序不能使用X服务器资源。当使用者使用startx和xinit启动 X服务器时,或者通过xdm登录进系统时,其后启动的X客户程序就继承了原有的访问 权限。然而通过网络启动的X客户程序,使用X服务器资源就受到了这个访问控制的 限制,不能正常启动。

  控制X服务器的访问控制能力的命令为xhost,为了使得xserver的显示资源 能被xclient上的X客户程序所使用,就必须在已经具备X服务器访问能力的X仿真终 端下执行以下指令:

xserver $ xhost xclient

  上面的xhost命令允许xclient计算机上的X客户程序使用这个X服务器,也可 以执行使用+作为xhost的参数,这将允许任意X客户程序访问X服务器,因此就存在 一定的安全性问题。如果通过网络使用X服务器的情况比较多,就可以将相应的xhost 指令放入.xinitrc或.xsession中,自动进行设置。

xserver $ rsh xclient /usr/X11R6/bin/xterm -display xserver:0
wb’s password: 

  上面是一个使用rsh在一个远程计算机上执行X程序,而将窗口开回X服务器上 的例子,在执行这个命令之前应该执行了xhost client以打开访问权限。

未完,待续。。。  

 
来源:http://freebsd.online.ha.cn/

声明:本站的文章和软件是本人从网上收集整理的(除本人的作品之外),所有版权属于作者,
如有侵犯您的权益,请指出,本站将立即改正,谢谢.

Copyright 2000 www.newok.com