Table of Contents
List of Tables
Table of Contents
X window系统是一个很复杂的网络图形界面系统,它的开发始于1984年,它被应用已有近20年。X也是一个协议,它定义程序(客户程序)如何与另一个在远程机器上运行的程序(服务器程序)交换信息。它最早是由数字设备公司(DEC)的Jim Gettys与麻省理工大学(MIT)的Ron Newman和Bob Scheifler共同开发的。当时DEC和MIT想共同开发一种分布式的计算环境,X系统就是他们研究成果的一部分,这项工作叫作雅典娜工程。现在X的管理机构是X 联盟(www.x.org)。X系统由三部份组成,它们分别是X Server、Xclient和X协议。
X Server是控制输入输出的程序,它是和底层硬件直接通信的。它接收X client程序的请求做建立窗口、绘制图形等工作。
X client是基于X Server的客户程序,它请求X Server在指定的窗口进行各种操作。它不负责显示,只是给X Server发送一个请求,由服务器完成动作。
X 协议是X Server和X Client之间沟通的语言。Xlib库能完成这种通信功能,所以可以基于它进行X client程序的开发。
以下是X系统的几点优势:
可移植性。X系统可移植到几乎所有的计算机图形系统下。
标准化。X window系统提供一个标准的函数库和功能调用集合,抽象了硬件层功能,使程序开发更标准更快捷。
网络化。它是基于网络的图形界面系统。
模块化结构。能方便进行功能扩展。
不嵌入操作系统中,适用于几乎所有的操作系统,如linux、solairs、windows等。
1986年发布X10.4版
1987年9月15日发布X11R1版(X11第一次修订版)。源程序有19MB,可在4种主要的操作系统下运行。
1988年发行第二修订版X11R2。该版提供了很多压缩的矢量字体,以及第三方软件商提供的软件工具。
1991年8月29日发布了X11R5版。为X window系统增加了国际化功能。
1994年4月21日,X11R6发布。这一版改进窗口管理、资源共享、会话管理等功能。
1996年3月5日发布了X11R6.1版,支持16种操作系统,包括linux内核1.2.11。
1996年12月23日发布了X11R6.3版,它是X联盟转换到TOG(开放工作组,一个非盈利机构)前最后的一个X版本。TOG由200个新成员和很多X联盟的原创成员组成。
1998年1月4日,TOG发布了X11R6.4版。TOG工作组改变X 系统免费的许可证政策,如果从销售X系统中盈利,就须交纳年度注册费,价格是每5万个用户7500美元,随后又增加到至65000美元。由于新许可政策的实施,导致开源社区组成一个XFree86工程公司(一个非盈利的机构)开发了一个基于Intel PC平台的免费X系统XFree86。1998年9月TOG也放弃新许可政策,把X11R6.4版的许可恢复到旧的麻省理工的版本。
2000年8月15日,X11R6.5.1发布。源文件容量扩充以144Mb,包含8100多个文件、600多种字体、345个手册页、20个程序库、70个图象和60个客户程序。现在最新的版本是X11R6.7.0,可以到http://www.x.org下载。
XFree86项目成立于1994年3月19日。最早的开发工作始于1992年,由一个开发小组完成,实现了基于Intel PC平台的X系统。1994年5月18日发布的XFree86 2.1版是第一个支持linxu的XFree86版本。2000年5月7日XFree86 4.0版发布,它是XFree86最重要的一个发布版,增加了很多功能。XFree86的意思是“提供X服务,它是自由的(free),它是基于Intel的PC平台”。现在最新的XFree86版是4.4.0。可以到http://www.xfree86.org下载。基于windows平台也有X window系统,如:X-Win32、Extra!X、Exceed等。
Table of Contents
在XFree86中的配置文件是XF86Config-4,下面介绍几种配置的工具:
xf86config是一个基于文本的配置工具。在控制台运行该命令后按提示配置就可以了。
reconfig用以把旧版的配置文件转换成4.0.1版的配置文件格式。
可以用$ XFree86 -configure命令由系统自动生成一个叫XF86Config.new的配置文件,可基于这个文件再修改。最后用$ XFree86 -xf86config XF86Config.new进行测试。如果成功将出现一个带“X”的窗口。最后把正确的配置文件拷贝成/etc/X11/XF86Config-4。
在XFree86 4.0.1后,还可通过xf86cfg这个图形化程序来进行配置。
在各linux的发行版中,还包含有各自开发的配置工具,redhat有Xconfigurator;Mandrake 有DrakConf;SuSE 有SaX。
下面是一个完整的配置文件例子:
Section "ServerLayout" ==============配置标识区 Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Keyboard0" "CoreKeyboard" # PS/2 Mouse not detected InputDevice "Serial Mouse" "CorePointer" # USB Mouse not detected EndSection Section "ServerFlags" =================X 选项配置区 Option "AllowMouseOpenFail" "true" ====允许在鼠标配置失败的情况下启动X Option "DontZap" "true" ====不能使用Ctrl+Alt+Backspace组合键退出X Option "DontZoom" "true" ====不能使用Ctrl+Alt+小键盘+-来切换显示模式 EndSection Section "Files" =========================字体配置区 RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" # Additional fonts: Locale, Gimp, TTF... # FontPath "/usr/X11R6/lib/X11/fonts/latin2/75dpi" # FontPath "/usr/X11R6/lib/X11/fonts/latin2/100dpi" # True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig! FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/PEX" FontPath "/usr/X11R6/lib/X11/fonts/cyrillic" FontPath "/usr/X11R6/lib/X11/fonts/TrueType" EndSection Section "Module" Load "ddc" # ddc probing of monitor Load "dbe" Load "dri" Load "extmod" Load "glx" Load "record" Load "xtt" EndSection Section "InputDevice" ================键盘配置区 Identifier "Keyboard0" Driver "keyboard" Option "CoreKeyboard" Option "XkbRules" "xfree86" Option "XkbModel" "pc105" Option "XkbLayout" "us" EndSection Section "InputDevice" =================串口鼠标配置区 Identifier "Serial Mouse" Driver "mouse" Option "Protocol" "Microsoft" Option "Device" "/dev/ttyS0" Option "Emulate3Buttons" "true" Option "Emulate3Timeout" "70" Option "SendCoreEvents" "true" EndSection Section "InputDevice" =================ps/2鼠标配置区 Identifier "PS/2 Mouse" Driver "mouse" Option "Protocol" "auto" Option "ZAxisMapping" "4 5" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "true" Option "Emulate3Timeout" "70" Option "SendCoreEvents" "true" EndSection Section "InputDevice" =================usb鼠标配置区 Identifier "USB Mouse" Driver "mouse" Option "Device" "/dev/input/mice" Option "SendCoreEvents" "true" Option "Protocol" "IMPS/2" Option "ZAxisMapping" "4 5" Option "Buttons" "5" EndSection Section "Monitor" ==================显示器配置区 Identifier "Monitor0" Option "DPMS" "true" VendorName "MAG" ModelName "MAG9705" HorizSync 30-86# DDC-probed VertRefresh 50-160# DDC-probed # These are the DDC-probed settings reported by your monitor. # 1600x1200, 65.0Hz; hfreq=81.25, vfreq=65.00 ModeLine "1600x1200" 175.50 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync # 1280x1024, 75.0Hz; hfreq=79.98, vfreq=75.03 ModeLine "1280x1024" 135.00 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync # 1280x960, 85.0Hz; hfreq=85.40, vfreq=85.00 ModeLine "1280x960" 148.50 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync # 1024x768, 85.0Hz; hfreq=68.68, vfreq=85.00 ModeLine "1024x768" 94.50 1024 1072 1168 1376 768 769 772 808 +hsync +vsync EndSection Section "Device" ===================显卡配置区 ### Available Driver options are:- # sw_cursor is needed for some ati and radeon cards Option "sw_cursor" #Option "hw_cursor" #Option "NoAccel" #Option "ShowCache" #Option "ShadowFB" #Option "UseFBDev" #Option "Rotate" Identifier "Card0" Driver "nv" =======如果不清楚可选svga或vga VendorName "NVidia" BoardName "GeForce2 MX DDR" # BusID "PCI:1:0:0" EndSection Section "Screen" =====================屏幕配置区 Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultColorDepth 24 ============用24位色深 SubSection "Display" Depth 1 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection SubSection "Display" Depth 4 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection SubSection "Display" Depth 8 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection SubSection "Display" Depth 15 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection SubSection "Display" Depth 16 Modes "1024x768" Virtual 0 0 EndSubSection SubSection "Display" SubSection "Display" Depth 24 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection SubSection "Display" Depth 32 Modes "1024x768" "640x480" Virtual 0 0 EndSubSection EndSection
大多数程序,字体和文件都放在/usr/X11R6目录下,而其它组件和配置文件则放在/etc/X11目录下,一些始化程序如xfs字体服务器就放到系统初始化目录/etc/init.d目录下。下面是一个XFree86系统目录列表:
可以在本地或远程安装字体。单机上运行的linux的字体目录主要是在/usr/X11R6/lib/X11/fonts目录下。有几个工具用以管理字体,分别是:
mkfontdir用来在字体目录下创建字体名数据库。
xlsfonts用来列出已安装字体。
xfontsel用来显示从字体集中选中的各种字体。
xfd用来显示在X字体中的字符。
xset -q可查看字体的路径
在fonts目录下列有已安装的各种字体目录,如100dpi/、75dpi/、misc/等,每个目录下都有一个fonts.dir和一个fonts.alias文件。fonts.dir文件是字体列表数据库,X 和xfs字体服务器用这个文件查找字体;fonts.alias文件包含两栏信息:名字和别名。可以利用这个文件给已有的字体创建新名字。Encodings目录中的是Type1 (也称TrueType)的字体编码。这些信息用来在显示器上绘制可缩放字体。
XFree86还可使用远程XFree86 服务器上的字体,从而减少本地的字体存储空间,主要通过配置字体服务器xfs完成。为利用远程服务器上提供的字体,可用xset +fp unix/remote.org:7100命令可把远程X 服务器提供的字体增加到当前显示字体路径中。在单机上运行xfs时,可以用一个单一的设置代替XF86Config文件中列出的字体列表:
Fontpath "nuix/:7100"
不过,具体操作还没测试过。
Xresources文件位于/etc/X11目录下,该文件包含所有客户程序的默认资源管理信息。如emacs,vim。emacs*Background:DarkSlateGray表示把emacs程序的背景设置为灰色。这样任何用户在你计算机上启动emacs编辑器,将使用灰色的背景。除非用本地设置来使之失效。
X window的启动过程是由xinit客户端程序控制的,先启动X Server,接着启动窗口管理器,最后启动用户应用程序。用户主目录下的.xinitrc文件就是控制xinit程序启动什么窗口管理器、显示管理器和程序的文件。一般启动X window的方法有如下几种:
各种linux的发行版都把运行级别5定为x window模式,所以最简单的方式是修改/etc/inittab文件,把系统的默认运行级别定为5,重启系统就可以了。有关系统运行级别的设置方法和原理可参考有关资料或man手册页。
我们也可以用startx脚本从shell中手动启动x window。启动startx后,它会进行一些环境变量的测试,它会搜查xclient的位置:$HOME/.xinitrc和/etc/X11/xinit/xinitrc,还有xserver的位置:$HOME/.xserverrc和/etc/X11/xinit/xserverrc。如果主目录有配置文件就会优先使用,首先,xinit先执行.xserverrc的内容,如果找不到该文件,则用/etc/X11/xinit/xinit/xserverrc,如果都没有,就执行 X :0,启动X Server。接着xinit就会执行用户主目录下.xinitrc配置文件的内容。如果没有则到/etc/X11/xinit/下找xinitrc文件,如果都找不到,则执行xterm -geometry +1+1 -n login -display :0。一个简单的.xinitrc配置文件如下:
export LANG=zh_CN.GB2312 ======这两行是设置中文环境变量 export LC_ALL=zh_CN.GB2312 export XMODIFIERS="@im=Chinput" ======设置Chinput为中文输入法 chinput& ======启动chinput输入法服务器 wmaker& ======启动window maker窗口管理器
用startx启动X的过程就是这样的。
还有一个程序叫X,它只是启动X Server进入X环境,所以可用它来测试X Server服务是否成功启动。启动X后,可按Ctrl+Alt+F7切换到X界面。
如果有足够多的内存,可以用startx命令启动多个X会话。首先我们要启动到非X多用户模式下,如运行级别3。运行以下命令:$ startx -display :0 -vt7启动第一个会话,运行$ startx -display :1 -vt8启动第二个会话,可用Ctrl+Alt+F7/F8进行会话切换。
Table of Contents
Table 3.1. X程序常用选项
命令行选项 | 描述 |
---|---|
-bg color or -background color | 设置背景色 |
-bd color or -bordercolor color | 设置窗口边框色 |
-bw n or -borderwidth n | 设置窗口边框的宽度,n的单位是象素 |
-fg color | 设置前景色 |
-fn font | 设置字体 |
-geometry 宽X高+/-X偏移量+/-Y偏移量 | 指定客户程序窗口的宽度,高度和在桌面上的位置 |
-iconic | 以最小化的状态启动客户端程序 |
-title string | 设置窗口标题 |
以上参数只是一些程序常用的,有些程序可能不支持,要详细了解可使用命令的-h或--help参数查询,如rxvt --help。
X 系统的网络模型是基于客户机/服务器的体系结构。客户机能远程登录进来,进行各种图形显示应用。
有两台X系统,一台A,一台B。通过X系统的远程会话可以把A的xclock应用程序显示在B的显示器上。具体的操作步骤如下:
首先要在两台电脑上安装X系统。在A电脑上以不带-nolisten tcp选项启动X(在Xsession里设置)。并在B上执行$ xhost + A,允许A电脑访问。
在A电脑上执行$ xclock -display B:0.0&,B的显示器上就会显示xclock时钟。
连接完成后在B上要用$ xhost -A,取消A的远程访问权限。
利用该功能,我们也可以利用telnet或ssh登录到远程服务器,在远程服务器上运行应用程序,再把显示传回本地显示。
上面介绍的是基于主机的认证会话方式,还有一种更安全的基于cookis的认证方式,它要用到xauth这个程序,用它可生成一个本机的cookis保存在.Xauthority文件中,要进行认证需把它拷贝到另一台机的.Xauthority文件中。这样两台机就有了相同的cookis,连接时就可用于认证。在xauth里有两个有用的程序,一个是extract用于把cookis导出成一个文件,merge用于把导出的文件导入.Xauthority文件中。
可以利用Xvnc软件,实现远程桌面应用。该软件包括服务器和客户端,能让你在一台linux客户机上登录远程系统的桌面。包括windows、Machintosh、Solaris等。Xvnc是由英国剑桥的AT&T研究室研制。使用方法如下:
在A电脑上运行$ vncserver -geometry 800x600,启动服务器。
在B电脑上运行$ vncviewer A:1,连接A系统桌面,桌面大小是800x600。
Table of Contents
$ xset -q 可以显示当前设置。
$ xset s on 打开屏幕保护。
$ xset s 60 设置屏保激活的时间为1分钟。
$ xset s off 关闭屏幕保护。
$ xset m "1 6",放慢鼠标移动速度,$ xset m "30 10",加快鼠标移动速度,$ xset m "default",重置鼠标移动速度。
$ xsetroot -solid black,把窗口背景设置为黑色。
$ xsetroot -bitmap /usr/X11R6/include/X11/bitmaps/test.bmp,用test.bmp作为桌面背景
$ xsetroot -cursor_name xxx。设置鼠标图案。$ xsetroot -cursor_name X_cursor,重置鼠标图案。
要使用xmodmap这个程序,需要有一个.Xmodmap的配置文件,配置按键的位置。配置文件内容如下:
remove Lock = Caps_Lock remove Control = Control_L keycode 0x42 = Caps_Lock keycode 0x25 = Control_L add Lock = Control_L add Control = Caps_Lock
接着调用$ xmodmap .xmodmap进行设置。
为了更好设置,可以调用xev程序进行键位测试。
$ xmodmap -e "pointer = 3 2 1" 可以把鼠标的左右键对调。
$ xhost +,允许所有主机存取本机显示屏幕,这样是很不安全,请使用时注意。
$ xhost -,禁止所有用户存取本机显示屏幕。
$ xhost + test,允许test这台机存取本机显示屏幕,也可以用IP地址。
$ xwd -out test.xwd 按下回车后,光标变成一个卷发型,移动光标到要截取的窗口上,按左键就可以了。图形保存在当前目录下。
$ xwd -root -display B:0.0 -out test.xwd,用-root表示截取整个显示内容。
$ xwd < test.xwd,显示图形。
$ xbiff -update 15 -volume 100 -geometry 100x100 -fg white -bg blue。
$ xeyes -fg red -center yellow。
$ xlogo -fg black -bg lightgreen。
$ xclock -d -update 1 -fg black -bg lightgreen,-d表示显示数字时钟。
$ xmag ,回车后,光标变成一个L型,然后,在你想放大的地方按鼠标左键,则会把该区放大。
详细内容请参考相关资料。
$ xload&
$ xman
$ editres。
$ xlsclients
GIMP,一个图象处理软件。
SANE(Scanner Access Now Easy),一个扫描仪支持软件包。
Gun OCR/JOCR,光学字符识别软件。
gPhoto,数码相机支持软件,支持超过100种相机。
Xine,xmms,mplayer,realplay,多媒体播放软件
Krabber,mp3转换工具。
Table of Contents
显示管理器是负责管理X会话和登录的,在GNOMN中的是gdm,在KDE中的是kdm,还有一个早期使用过的xdm。显示管理器的作用和xinit差不多,都是控制进行X Server时要执行的工作。但显示管理器有以下优势。我们完全可用显示管理器替代xinit。
显示管理器可同时控制多个X Server。
它是循环执行的,可确保我们始终以X window图形界面登录。
它的可配置性很强。能为每个用户配置不同的系统环境。
为用户提供一种简单的登录方式。
xdm的配置文件位于/etc/X11/xdm目录下,首先应查询xdm-config文件。系统会先读取该文件的配置信息。xdm-config文档的内容如下:
! $Xorg: xdm-conf.cpp,v 1.3 2000/08/17 19:54:17 cpqbld Exp $ ! ! $XFree86: xc/programs/xdm/config/xdm-conf.cpp,v 1.7 2001/01/17 23:45:24 dawes Exp $ ! DisplayManager.errorLogFile:/var/log/xdm.log ====出错日志文件路径 DisplayManager.pidFile:/var/run/xdm.pid DisplayManager.keyFile:/usr/X11R6/lib/X11/xdm/xdm-keys DisplayManager.servers:/usr/X11R6/lib/X11/xdm/Xservers ====X Server服务器启动的配置文件 DisplayManager.accessFile:/usr/X11R6/lib/X11/xdm/Xaccess ====控制多个图形终端时的配置文件 DisplayManager.authDir:/var/lib/xdm DisplayManager.willing:su nobody -c /usr/X11R6/lib/X11/xdm/Xwilling ! All displays should use authorization. ! X terminals may not be configured that way, so they will require ! individualized resource settings. DisplayManager*authorize:true ! Scripts to start the server, start the user session, and reset the server DisplayManager*setup:/usr/X11R6/lib/X11/xdm/Xsetup DisplayManager*startup:/usr/X11R6/lib/X11/xdm/Xstartup DisplayManager*reset:/usr/X11R6/lib/X11/xdm/Xreset DisplayManager*resources:/usr/X11R6/lib/X11/xdm/Xresources ====启动时的资源配置文件 DisplayManager*session:/usr/X11R6/lib/X11/xdm/Xsession ====启动及周期配置文件 DisplayManager*authComplain:true ! DisplayManager*userPath:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games DisplayManager*systemPath:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11 DisplayManager*loginmoveInterval:10 ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort:0
Xservers中列出xdm所管理的X Server的列表。如::0 local /usr/X11R6/bin/X -vt7
Xresourdes中列出了资源的名单,在登录窗口启动之前被xrdb加载。如:可通过该文件修改登录窗口的属性。
Xsession中列出在一个会话周期内所运行的程序。最后一行所执行的程序可以持续整个管理周期。当该程序结束,则周期结束。需要把除最后一行外的所有程序放在后台运行。如果不这样做,周期将可以会出挂起或出错。如:执行twm行省略了"&",则它后面的程序将不会运行,直到twm程序结束。另外,最后的一行程序必须是可执行的命令,因为它将不间断地执行且保持你的周期继续活动。如果你把它放在后台运行,虽然它同样会顺利地执行,但此周期程序执行至配置文件结束时将会中断,因而造成周期的结束。如果不用exec引导程序,而且省略“&”。则最后一行的程序也将会顺利地执行且此周期将不断地持续工作,比如:xterm -geometry -0+50 -ls -C。-C表示使xterm成为一个控制台终端,使所有的系统信息在该窗口中显示。-ls表示使它的shell成为login shell。如果可使shell读入你的login或profile,所以你自已设定的环境变量会自动设定。
Table of Contents
X Server只负责程序的运行和输入输出,窗口界面它没有定义和管理,它要靠一种叫窗口管理器的软件来负责。这也是X window灵活强大的功能之一。通过不同的窗口管理器,你可以定义出千变万化的窗口环境,突显你的个性,要多酷有多酷。下面对一些常用的窗口管理器进行简单的介绍。
Table of Contents
桌面环境是一种工作环境,里面有窗口管理器,有系统管理程序,有文件管理程序和一些工具软件的集合。所以它可以说一个集成的环境,用于办公、娱乐等。在linux下比较流行的桌面环境有两个,一个是基于GTK+的GNOMN(GNU Network Object Model Environment)和一个是基于Qt的KDE(K Desktop Environment)。
在X11R6.4中提供了一种基于Web的X window解决方案叫broadway。它能使X window系统具有通过Web协议访问X应用程序能力,即X web。X web的体系结构包括5个关健部分:
远程执行---提拱远程启动X 应用程序的机制。
一致性访问---集成X11R6.4和Http协议,提供独立于平台的一致性访问,使它具有广泛的可用性。
Web浏览器插入---结合远程执行,提供在浏览器中显示应用程序执行结果的功能。
安全机制---用区分可信(内部)和不可信(外部)应用程序的方法提供安全机制。它的实现包括3部分,第一是扩充的pc机X 服务器功能;第二是增加防火墙的X 代理功能;第三是为用户提供控制在可信和不可信程序间交换数据的界面。
LBX(窄带X )---用于改进X在广域网和低速拔号网络上的性能,使用的技术包括高速缓冲、数据压缩和简化应答。
X web是一种分布式的应用,这也是X window系统设计时初衷。但由于当时分布式计算技术环境的不完善,使得它的功能在当时的环境下实现不了。现在,随着计算技术的飞速发展,如低成本宽带网络的迅速扩张,高性,低成本的CPU的使用,操作系统功能的不断完善,开发工具和方法的不断改进等,分布式计算环境已较完善,X window的分布式应用已渐渐成为现实。
X web是一种较新的技术,具体还没有测试过,有兴趣的朋友可到http://www.broadwayinfo.com网站了解一下。