Posted on 2010-11-16 13:59
kongkongzi 阅读(2739)
评论(0) 编辑 收藏 引用 所属分类:
linux
关于linux图形界面的基本概念
应用程序级别的系统,不是独立的操作系统,同样 XFree只是linux下的一个应用程序而已.不是系统的一部分,但是X的处在可以方便用户使用电脑.WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一.
二,X是协议,不是具体的某个软件:
X是协议,就像HTTP协议,IP协议一样,这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联接到X服务器,开始用X协议和服务器交谈.比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由X服务器来完成的.X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?
如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情.
那么协议是需要具体的软件来实现的,这就是下面我要讲的:
三,X和XFree86的关系.
有了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.XFree86就是这样一个去根据法规实现协议的"交警".他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有 XFree86,XFree86只是实现X协议的一个免费X服务器软件.
商业上常用MOTIF,现在还有XORG,还有很多很小的由爱号者写的小的X服务器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神气.你可以用google找到这样的X服务器软件.
只不过在LINUX上最常用的是XFree86.顺便说一句,苹果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很多大型三维图形设计软件都是在苹果平台上的原因.
为了便于理解拿HTTP协议来比较:
协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.
四,X和X11R6又是什么关系?
不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.
另外XFree86 3.3.6 XFree8*.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.
协议版本和实现协议的软件的版本--这两个概念的区别你分清除了吗?
五,X服务器和WM(window manager 窗口管理器)之间是什么关系.
平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:
init 3
就可以安全的回到字符界面.
好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.
先输入以下命令:
#startx
起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.
按ctrl+alt+backspace反回字符界面.
输入:
#xinit
再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如故我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.
为什么同样一个X应用程序会有这样的不通呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.
现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.
如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.
如果你不输入twm而输入gnome-session就可以起动GNOME
或者输入startkde起动KDE.
通过以上的实验你就可以清楚的明白他们之间的关系.
六,关于KDE和GNOME
KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单,
KDE是KING DESKTOP ENVIRMENT (桌面环境之王)的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.
GNOME是GNU Network Object Model Envirment 的缩写.和KDE一样,也是一个功能强大的综合环境.
另外在其它UNIX系统中,常常使用CDE作为这样一个环境.
其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.
七,linux图形界面层次关系总结
linux本身--> X服务器--> 窗口管理器(综合桌面环境)
-->X应用程序.
以上就是linux图形界面的大概情况.
注:
xterm是一个X Window System上的标准虚拟终端。用户可以在同一个显示器上开启许多xterm,每一个都为其中运行的进程提供独立的输入输出(一般来说此进程是Unix shell)。
xterm 很早就在 X Window System 中出现。它最先是Jim Gettys的学生Mark Vandevoorde在1984年夏天为VS100写的独立虚拟终端,当时X的开发刚刚开始。很快人们就发现它作为X的一部分比作为独立的程序更为有用,于是它开始针对X而开发。Gettys曾讲述过有关的故事 [1],“xterm内部如此恐怖的部分原因是它最初被计划开发成一个能驱动多个VS100显示器的单独进程。”("part of why xterm's internals are so horrifying is that it was originally intended that a single process be able to drive multiple VS100 displays.")
作为X参考实现的一个部分后多年,1996年左右,开发的主干转移至了XFree86(从X11R6.3版本派生出来),现在由Thomas Dickey维护。
有许多xterm变体可用。大多数的X虚拟终端都是从xterm的变体起步的。
rxvt is a terminal emulator for the X Window System (and, in the form of a Cygwin port, for Windows), originally written by Rob Nation and later extensively modified by Mark Olesen, who took over maintenance for several years. It is intended to be a slimmed-down replacement for xterm, omitting some of its little-used features, like Tektronix 4014 emulation and toolkit-style configurability. The latter refers to the Xt resource mechanism, e.g., for binding keys. rxvt is an extended version of the older xvt terminal emulator by John Bovey of the University of Kent. The name originally stood for "Robert's xvt", but was later re-dubbed "our xvt" (pronounced like the letters r-x-v-t).
Aside from features such as those controlled by resource files, rxvt's terminal emulation differs from xterm in two important ways:
* it emulates a VT102, rather than a VT220. That means that it handles 8-bit data differently, does not implement the C1 controls that xterm does. xterm does implement a switch "-k8"[1] to suppress that functionality; rxvt does not provide an option to emulate a VT220.
* the strings sent for function keys are different. xterm sends strings that are encoded using the same rules as the ANSI/ISO escape sequences. Rxvt's do not, though they provide comparable flexibility in this area.
Newer versions of rxvt have primitive support for pseudo-transparency.
The rxvt distribution also includes an analog clock program called rclock. Very old distributions included a copy of vttest, but dropped that in 1996 with version 2.18.
xterm 是图形界面下virtual terminal的一个实现
virtual terminal ,是一个协议,一个接口,用于在各种连接环境中提供如同本机控制台一样的界面
文字操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了你与操作系统之间通讯的方式。
简单来讲 本地文本登陆后,你就在本地连接到了shell ,通过agetty等本地虚拟控制台可以提供多个终端, 你也可以通过远程的网络连接,拨号连接,甚至串口连接 通过一些服务连接到一个远程服务器的shell ,然后这个shell在本地的表现方式就叫做虚拟控制台, xterm是x窗口环境中对本地虚拟控制台的一个实现。
Xfree86服务器的实现包括两个部分,一部分是和显卡直接打交道的低层,一部分是和X应用程序打交道的上层。上层负责接收应用程序的请求和鼠标键盘的动作。而和显卡直接打交道的底层负责指挥显卡生成图形,其实就是显卡驱动。上层接收到应用程序的请求后,将请求内容做适当处理,然后交给显卡驱动来指挥显卡完成画图的动作。另外,上层的捕捉键盘和鼠标动作的部分会向应用程序提供鼠标和键盘的状态信息,应用程序接收到这些信息后决定是否再有相应的动作。
平时说的VESA,VGA ,fbdev等其实就是针对不同模式显卡的驱动程序。VESA(Video Electronics Standards Association),VGA (Video Graphics Array),fbdev (FrameBuffer Device)等都是不同的显卡标准,不过这些标准都已经很老了。现在的显卡都兼容这几种模式。
framebuffer模式的显卡本身不具有任何运算数据的能力,他好比是一个暂时存放水的水池。CPU将运算后的结果放到这个水池,水池再将结果流到显示器。中间不会对数据做处理,所有显示任务都有CPU完成,CPU负担很重。
在linux内核中有有framebuffer机制,摹仿framebuffer显卡的这种功能。他的好处是把显卡的硬件结构抽象掉,把所有的显卡都当做一个"水池"来用。应用程序也可以直接读取这个水池的内容。framebuffer的设备名是 /dev/fb。可以用命令:#dd if=/dev/zero of=/dev/fb清空屏幕。如果你的X用的是framebuffer的驱动,屏幕将全变黑。通过移动鼠标,切换窗口等动作可以让原先的内容重新显示。
如果你不用framebuffer驱动,可以在字符模式下做这个试验。屏幕将全部被清空。
以下的命令:
#dd if=/dev/fb of=fbfile
可以将fb中的内容保存下来,以后可以重新写回屏幕:
#dd if=fbfile of=/dev/fb
作用类似于屏幕截图,但是截下的图不能用普通图片浏览器看。
现在知道linux中framebuffer设备的神奇了吧。
linux字符界面在高分辨率下,启动时会有一个小企鹅logo,这个logo就是用framebuffer功能写上屏幕的。
VESA和VGA比FB要好很多,但是他的显示能力也很有限。CPU仍旧要处理大部分的显示任务。
现在的显卡就不一样了,CPU几乎不参数显示任务,而专注于运算工作。我们平时在linux下装显卡驱动,其实就是替换掉XFree86中底层的那一部分。 使他有更强的显示能力。比如你的显卡是nvidia的,XFree默认的驱动是"nv",他是一个nvidia显卡的通用驱动,但是他不能发挥 nvidia显卡的性能。这个"nv"驱动模块可以在:
/usr/X11R6/lib/modules/drivers
目录下找到,文件名是:nv_drv。o
这个目录下还有很多显卡驱动模块。
apm_drv.o dummy_drv.o nsc_drv.o sis_drv.o
ark_drv.o fbdev_drv.o nv_drv.o tdfx_drv.o
ati_drv.o glint_drv.o r128_drv.o tga_drv.o
atimisc_drv.o i128_drv.o radeon_drv.o trident_drv.o
chips_drv.o i740_drv.o rendition_drv.o tseng_drv.o
cirrus_alpine.o i810_drv.o s3_drv.o vesa_drv.o
cirrus_drv.o linux s3virge_drv.o vga_drv.o
cirrus_laguna.o mga_drv.o savage_drv.o
cyrix_drv.o neomagic_drv.o siliconmotion_drv.o
fbdev vga evsa 等都在其中。
只要在XF86Conf文件中的Section module段中指定了什么驱动,X就用哪个驱动。
代码:
Section "Module"
Load "dbe"
Load "extmod"
Load "fbdevhw" #这里用的是fbdev
Load "glx"
Load "record"
Load "freetype"
Load "type1"
Load "dri"
EndSection
这是XFree86 4。0以上版本的方法。即X主程序和驱动模块是分开的。
主程序是/usr/X11R6/bin/XFree86 (即上层部分)
然后主程序启动的时候根据配置文件决定用哪一个驱动。
但是,在XFree86以前的版本(3。3。6)中, X主程序和驱动模块是合在一起的,因此,以前的Xfree86 3。3。6 有很多针对不同显卡的版本。
另外其他的X服务器如KDrive 也是驱动也主程序整合的,因此同样是KDrive X服务器会有 VESA ,SVGA ,和 fbdev的版本之分。因为这些都是轻量级的X服务器,为了简化结构他做成这样。
Xfree86 4 做成驱动和主程序分离的好处是用户可以自己添加升级驱动。
四大Linux图形界面赏析:KDE、Gnome、Xfce、LXDE
GNOME和KDE是目前的主流环境,而Xfce、LXDE、Openbox和Fluxbox等也已经得到了很高的应用。下面,编者就以上图形桌面环境进一步的解析。
KDE
KDE(Kool Desktop Environment)项目始建于1996年10月,相对于GNOME还要早一些。KDE项目是由图形排版工具Lyx的开发者、一位名为 Matthias Ettrich的德国人发起的,目的是为满足普通用户也能够通过简单易用的桌面来管理Unix工作站上的各种应用软件以及完成各种任务。
在应用开发方面,KDE项目已经开发了一流的复合文档应用程序框架,实现了最先进的框架技术并且因此把它自己直接置身于和诸如微软的MFC/COM /ActiveX技术等流行开发框架相竞争的位置。KDE的KParts复合文档技术使得开发人员可以快速创建一流的应用程序以实现最尖端的技术。
在应用程序上,KDE也拥有了可以与微软office媲美的办公应用套件KOffice,其分别由电子表格、幻灯片制作程序、组织者、新闻客户端等应用组成。还集成常见的Web浏览器、电子邮件客户端、办公套件、图形图像处理软件,以及桌面主题功能、配置功能、KDE帮助中心等各种管理工具。同时,还支持60余种语言的翻译。
其实,从系统的安装过程,你就能体验KDE给你带来的便捷,各种语言、时区、安装磁盘、用户设置以及网络设置等工作,都无需去考虑输入什么命令,直接用鼠标点选即可。
目前,KDE最新版本是4.5.0,进一步提高了稳定性和性能。可以体验到,KDE的操作习惯越来越与Win9x有很多相似之处,支持鼠标拖放、类似快捷方式,即使你是一个刚接触Linux的新手,也能很快上手。
GNOME
GNOME计划发起于1997年8月,所以,你可以在GNOME的LOGO上见到1997的字样。发起人是Miguel de Icaza和Federico Mena,GNOME计划当初的目标就是完全基于自由软件,构造那种功能完善、操作简单以及界面友好的桌面环境,希望走国际化道路,尽可能多地为各种国家的人所使用。目前,GNOME已经基本上可以成为KDE的替代品。
GNOME不仅仅提供了一个吸引人的桌面环境,而且还提供一个开发平台,一个能使开发的应用程序与桌面其它部分集成的可扩展框架。
GNOME的结构包括:一个面板、桌面以及一系列标准的桌面工具和很多功能强大的应用软件。这些应用软件包括:文件管理器、电子表格处理软件、字理软件、电子表格软件、邮件阅读器、MP3播放器、简单的编辑器以及可以与PhotoShop媲美的图像处理软件等常用软件。
同时,GNOME还集成了软件更新和管理工具,基于Web的软件发布和自动升级工具,可平滑、安全地运行最新的开放资源和下载最新的补丁。
如果,你体验过GNOME就会知道,GNOME的这些应用软件是如何让Linux系统更具可操作性,鼠标拖拽以及左右键功能、编辑文档、绘制图片、收发邮件、音频和视频的播放、即时通讯工具聊天......这些使用体验与你在Windows下几乎没有差别。
虽然,GNOME最初是GNU/Linux的桌面,但是现在GNOME已经运行在大多数类Unix系统(如*BSD变体、AIX、IRIX、 HP-UX)和几乎所有的Linux系统之上。目前,gnome.org上显示GNOME最新版本是2.3,而在2011年将发布的GNOME3的体验据介绍将可以匹敌Windows 7,我们将拭目以待。
XFCE
Xfce(XForms Common Environment)创建于2007年7月,类似于商业图形环境CDE,是一个运行在各类Unix下的轻量级桌面环境。原作者Olivier Fourdan最先设计XFce是基于XForms三维图形库。Xfce设计目的是用来提高系统的效率,在节省系统资源的同时,能够快速加载和执行应用程序。
XFce最主要的特色是容易配置,整个过程都可以使用鼠标来完成,而不需要修改配置文件的代码。最新版本的XFce还支持鼠标拖放、系统任务管理、多字节在内的多国语言以及其它特征。
同时,XFce桌面环境的结构包括:一个叫XFwm的窗口管理器、主面板、文件管理器、背景管理器、声音管理器以及GNOME兼容模块等。另外,还有很多第三方的应用程序:文字编辑器、文件管理器、日历程序、CD 和 DVD 烧录程序、媒体播放器、浏览器等。
从体验过程来看,虽然,没有GNOME和KDE的应用程度那么高,但是Xfce简单高效的特点,仍然为其赢得了非常多的用户青睐。目前,Xfce最新版本是4.6.2。
LXDE
LXDE(Lightweight X11 Desktop Environment)创建于2006年,主要为Unix以及如Linux、BSD等POSIX相容平台上提供一个轻量、快速的桌面环境。开发者主要是为Open PCMan的著名台湾开放源代码程式设计者洪任谕(PCMan)、钱逢祥(Fred Chien),以及其他活跃开发者刘颖骏(Paul Liu)、李健秋(Andrew Lee)及黄敬群(jserv)等。
相对于GNOME和KDE这些桌面环境,LXDE属于小巧玲珑类型的。LXDE更加注重于实用性和轻巧性,并且尽力降低其所耗系统资源。不同于其它桌面环境,其元件相依性极少。取而代之的是各元件可以独立运作,大多数的元件都不须倚赖其它套件而可以独自执行。
LXDE使用Openbox为其默认窗口管理器,并且希望能够提供一个建立在互相独立套件上的轻量级快速的桌面。另外,LXDE也集成了一些应用程序和工具:图片浏览器,外观、字型、布景主题管理工具、音乐播放器、屏幕设定工具、面板管理工具、编辑工具、系统资源监控以及工作管理员和轻巧的档案及桌面管理程式等。
从体验过程来看,LXDE确实对系统硬件要求比较低,甚至1999年出产的计算机都可以正常执行。所以,如果你有一台即将淘汰的计算机安装Linux系统,那么LXDE必将是你不错的选择。
这里选择只选择众多图形桌面环境的四种做体验,其中也是因为很多人将GNOME与KDE,以及XFCE与LXDE分别作比较。
综合整个体验过程,从效果上看,Windows在Linux系统面前应该说没有太多优势可言。KDE和GNOME强大的功能以及绚丽多彩的界面一点不逊色于Windows,甚至还要好于它;同时在特效展示方面,例如半透明和三维界面,Windows能够做到的,依赖强大的KDE和GNOME同样可以做到。而且,最近Ubuntu下一个版本也将支持多点触摸。
当然,如果你的计算机硬件配置不高,又或者是在移动设备中,轻量级的桌面环境就将发挥重要作用。
所以,我们可以看到,通过形形色色的图形桌面环境的介入,Linux系统正进入一个高速发展的阶段,Linux桌面应用的普及渐渐打开了一个新天地。
linux下图形界面开发
QT是个不错的选择,KDE桌面操作系统就是用QT开发的。其支持WINDOWS和LINUX两种操作系统。最高版本好像是4以上了。其界面开发工具是QT DESIGNER,还是比较好用,有点像VC。你可以装起先试下,在其网站上可以直接下载free的版本。
官方网址:www.trolltech.com/
Qt是一个跨平台的C++图形用户界面库,.由挪威TrollTech公司出品,目前包括Qt/X11,基于Frambuffer的Qt Embedded,快速开发工具Qt Designer几国际化工具Qt Linguist等.Qt支持Unix及Linux系统,还支持 Windows NT/Windows 2k及Qindows 95/98平台.Qt的良好封装机制使其模块化程度非常高,可重用性较好.
Qt/Embeded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C++ GUI和基于Linux的嵌入式品台开发工具。Qt/Embeded API可用于多种开发项目。许多基于Qt的X Window程序可以非常方便地移植到嵌入式版本。
配置
开机为文本界面,由文本界面切换到图形界面:
方法1:运行命令
#startx , 需要先配置图形界面信息,(暂时不会~) ;
方法2:修改/etc/inittab文件中的
id:3:initdefault , 将3改为5 ,重新启动系统;