海藻面膜免洗吗:Gnome 3 相关整理(一)

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 07:36:58
Gnome背后的故事
Linux实际上是以UNIX为模板的,它继承了UNIX内核设计精简、高度健壮的特点,无论系统结构还是操作方式也都与UNIX无异。强大的命令行界面始终是它们的基础,在上个世纪八十年代中期,图形界面风潮席卷操作系统业界,麻省理工学院(MIT)也在1984年与当时的DEC公司合作,致力于在UNIX系统上开发一个分散式的视窗环境,这便是大名鼎鼎的“X Window System”项目。不过,X Window(请注意不是XWindows)并不是一个直接的图形操作环境,而是作为图形环境与UNIX系统内核沟通的中间桥梁,任何厂商都可以在XWindow基础上开发出不同的GUI图形环境。
由于必须以UNIX系统作为基础,XWindow注定只能成为UNIX上的一个应用,而不可能与操作系统内核高度整合,这就使得基于XWindow的图形环境不可能有很高的运行效率,但它的优点在于拥有很强的设计灵活性和可移植性。X Window从逻辑上分为三层:最底层的XServer(X服务器)主要处理输入/输出信息并维护相关资源,它接受来自键盘、鼠标的操作并将它交给X Client(X客户端)作出反馈,而由XClient传来的输出信息也由它来负责输出;最外层的XClient则提供一个完整的GUI界面,负责与用户的直接交互(KDE、Gnome都是一个X Client),而衔接X Server与XClient的就是“X Protocol(X通讯协议)”、它的任务是充当这两者的沟通管道。

在 上个世纪九十年代中期,以开源模式推进的Linux在开发者中已经拥有广泛的影响力。尽管X Window已经非常成熟,也有不少基于XWindow的图形界面程序,但它们不是未具备完整的图形操作功能就是价格高昂(如CDE),根本无法用于Linux系统中。如果Linux要获得真正意义上的突破,一套完全免费、功能完善的GUI就非常必要。1996年10月,图形排版工具Lyx的开发者、一位名为MatthiasEttrich的德国人发起了KDE(Kool Desktop Environment)项目,与之前各种基于XWindow的图形程序不同的是,KDE并非针对系统管理员,它的用户群被锁定为普通的终端用户/。
 KDE项目发起后,迅速吸引了一大批高水平的自由软件开发者,这些开发者都希望KDE能够将Linux系统的强大能力与舒适直观的图形界面联结起来,创建最优秀的桌面操作系统。
KDE采用GPL规范进行发行,但底层的基础Qt当时却是一个不遵循GPL的商业软件,这就给KDE上了一道无形的枷锁并带来可能的法律风险。一大批自由程序员对KDE项目的决定深为不满,它们认为利用非自由软件开发违背了GPL的精神,于是这些GNU的狂热信徒兵分两路:其中一部分人去制作Harmonny,试图重写出一套兼容Qt的替代品,这个项目虽然技术上相对简单,但却没有获得KDE项目的支持;另一路人马则决定重新开发一套名为“GNOME(GNU Network ObjectEnvironment)”的图形环境来替代KDE,一场因为思想分歧引发的GUI之战开始了。
GNOME 项目于1997年8月发起,创始人是当时年仅26岁的墨西哥程序员Miguel DeIcaza。关于GNOME的名称有一个非常有趣的典故:Miguel到微软公司应聘时对它的ActiveX/COMmodel颇有兴趣,GNOME(Network Object Model)的名称便从此而来。GNOME选择完全遵循GPL的GTK图形界面库为基础,因此我们也一般将GNOME和KDE两大阵营称为GNOME/GTK和KDE/Qt。与Qt基于C++语言不同,GTK采用较传统的C语言,
2004且此时两者的技术特点非常鲜明:GNOME讲究简单、高效,运行速度比KDE更快;KDE则拥有华丽的界面和丰富的功能,使用习惯也与微软Windows较类似。
GNOME在2006年以后, 以超越Mac OS为目标,而KDE也在不断改进。走向融合:互操作、互相借鉴设计、对硬件厂商更大的话语权,为用户提供体验选择。

http://www.hudong.com/wiki/GNOME

GNOME 是一种支持多种平台的开发、桌面环境, GNOME 包含了Panel、桌面及一系列的标准桌面工具和应用程式,可以运行在包括Linux、Solaris、HP-UX,BSD和Apple's Darwin系统上。是一款功能强大的图形接口工具。
是一个桌面环境,而不仅仅是窗口管理器,还包含了许多应用,如Eolution、GIMP、OpenOffice等。
 

GNOME - 目标

引自GNOME网站:
GNOME计划提供了两个东西:GNOME桌面环境,一个对最终用户来说符合直觉并十分吸引人的桌面;还有GNOME开发平台,一个能使开发的应用程序与桌面其它部分集成的可扩展框架。
GNOME桌面主张简单、好用和恰到好处,因此GNOME开发中有两点很突出:
可达性——设计和建立为所有人所用的桌面和应用程序,不论其技术技巧和身体残疾。
国际化——保证桌面和应用程序可以用于很多语言。

 当前最新版本Gnome 3.2.

为何如此炫?
分析一下Gnome的架构
 


GNOME - 架构

GNOME桌面由许多不同的项目构成,部分最重要的如下所示:
ATK——可达性工具包
Bonobo——复合文档技术
GObject——用于C语言的面向对象框架
GConf——保存应用软件设置
GNOMEVFS——虚拟文件系统
GNOMEKeyring——安全系统
GNOMEPrint——GNOME软件打印文档
GStreamer——GNOME软件的多媒体框架
GTK+——构件工具包
Cairo——复杂的2D图形库
HumanInterfaceGuidelines——Sun微系统公司提供的使得GNOME应用软件易于使用的研究和文档
LibXML——为GNOME设计的XML库
ORBit——使软件组件化的CORBAORB
Pango——i18n文本排列和变换库
Metacity——窗口管理器


GNOME - 主要GNOME应用软件

英文维基有更加完整的GNOME应用软件列表,其中主要的包括:
Abiword——文字处理器。
Epiphany——网页浏览器。自从GNOME2.14起Epiphany取代Galeon成为缺省浏览器。
Evolution——联系/安排和e-mail管理。
Gaim——即时通讯软件。
gedit——文本编辑器。
TheGimp——高级图像编辑器。
Gnumeric——电子表格软件。
GnomeMeeting——IP电话或者电话软件。
Inkscape——矢量绘图软件。
Nautilus——文件管理器。
Rhythmbox——类型AppleiTunes的音乐管理软件。
Totem——媒体播放器。

GNOME - 版本历史

 版本  日期
 说明 1997年8月 发起GNOME开发 1.01999年3月 第一个主要GNOME版本 1.0.531999年10月 "October" 1.22000年5月 "Bongo" 1.42001年4月 "Tranquility" 2.02002年6月 基于GTK2的重要升级,并引入了人性化界面指导 2.22003年2月 多媒体和文件管理器的改进2.4
2003年9月
 Epiphany,可达性支持 2.62004年3月 转向spatial文件管理器,新文件对话框2.8
2004年9月改进可移动设备的支持,增加Evolution2.10
2005年3月一般性优化,新applets(设备挂载和卸载),增加Totem和Sound Juicer2.12
2005年 9月改进了Nautilus;改进了在程式之间的剪切/粘贴功能以及加强了对freedeskop.org 的集成。
增加了:Evince PDF 文件阅读器;开始菜单编辑器;keyring manager与管理工具。
建基于支持Cairo的GTK 2.82.14
2006年 3月性能提升。增加:Ekiga 原先叫做GNOME Meeting,GNOME 的语音和 IP 视频客户端;任务栏搜索工具;
Pessulus 锁定管理器(允许管理员方便地禁用 GNOME 桌面的特定特性);快速的用户切换;
Sabayon 配置编辑器(允许管理员在实时和互动的 GNOME 会话中设置用户配置文件).2.16
2006年 9月性能提升。新增:Tomboy 智能的wiki笔记本程序;Baobab 磁盘存储份额管理;
屏幕保护的全屏预览支持;
Totem 有一些轻微地改进;改进了 Nautilus;集成了支持笔记本的电源管理功能;
Metacity添加compositing支持;
新的图标主题。基于GTK+2.10库,新的打印对话框和它的API.2.22
2008年3月Epiphany浏览器换用WebKit引擎;Evince文档浏览器内部转换效应;
Cheese可用网络摄像头拍摄照片和记录视频,
并可应用特效。多媒体方面,Totem能搜索和播放YouTube视频,连接到MythTV服务,
观看录像或实时TV。
Rhythmbox能利用FM无线电收听器,集成进新的歌词网站,改进了Podcast feed支持。
提供了独立的Flash播放器,
支持从文件浏览器中预览flash2.24
2008年9月更好的 GNOME panel theming, integration of 书签和浏览记录for GNOME-wide access,
and new applet library for GNOME panel, 新版Ekiga崭新的用户界面,SIP支持,
Empathy即时通讯客户端
采用Telepathy通讯框架,Nautilus可以选择纵行和列表视图, GnomeVFS到GIO的移植部分完成。2.26
2009年3月新刻录工具Brasero,简单文件共享,媒体播放器改进,提供多显示器和指纹识别支持。2.28
2009年9月加入GNOME蓝牙模块;改进时间跟踪器;改进即时聊天工具Empathy;改进Epiphany Web 浏览器;
媒体播放器增加DVD回放功能;网络摄像头工具Cheese;Evince文档查看器新增批注功能;
声音控制程序增加淡入淡出控制支持;Orca 屏幕阅读器;WebKit 辅助功能支持等。2.30
2010年3月Nautilus文件浏览器、Empathy即时通信、便签、Evince PDF阅读器、Time Tracker、Vinagre VNC客户端
和Epiphany浏览器的改进。iPod and iPod Touch设备可通过libmobiledevice在gvfs支持。使用GTK+ 2.20.2.32
2010年9月2010 增加Rygel and GNOME颜色管理器、 Nautilus文件浏览器、Empathy即时通信、便签、
Evince PDF阅读器和其他组件的改进。
3.0
2011年4月GNOME Shell的引进。拥有一个重新设计的、具有更简练更集中的选项的框架。3.2
2011年9月[2]标题栏、按钮和其它空间变矮;在右下角的通知区域现在包含了一个计数器;
高亮效果指示一个已经运行的程序更加明显;在用户菜单中;通知可以在聊天状态中独立配置;
不再假定是 Evolution ,日历下拉菜单中的程序现在可以自定义; 电池电量状态使用一个条显示;
焦点跟随光标处理得到了改进。gnome2中采用Metacity作为管理器,

Metacity

维基百科,自由的百科全书

Metacity(发音的押韵与“capacity”类似,重音在第二个音节上[1])曾经是GNOME桌面环境下默认的复合窗口管理器。[2] Metacity的开发工作是由Havoc Pennington发起的,并且它以GNU General Public License这个许可协议授权分发。

在GNOME 2.2正式引进Metacity之前,GNOME陆续使用了Enlightenment和Sawfish作为它的窗口管理器。虽然Metacity是GNOME工程的一部分来并且被设计为集成进GNOME桌面,但它并不需要GNOME才能运行。同样GNOME也可以使用各种不同的窗口管理器,只要它们支持ICCCM规范。

Metacity由GTK+实现,这使得它可以主题化并与其他GTK+应用程序相融合。

Metacity的理念是简单和适用而非新颖和花哨

2011年,Gnome 3 发布,Metacity被mutter代替。

Mutter 是Gnome 3的窗口管理器,用来取代原本的Metacity,Gnome Shell实际上是Mutter的一个插件,Mutter是Metacity Clutter的缩写。他使用了Clutter这项图形程式库,亦支援OpenGL。Mutter 也支援许许多多的视窗特效。 Mutter是Metacity与Clutter的缩写。

Mutter最初是由英特尔的Moblin project平台开发。 英特尔在GNOME 2 的采用时Metacity窗口管理器,并结合程式库Clutter使其有OpenGL的功能,让速度加快。

Clutter和插件主要以JavaScript与C语言写成。

更具体的说,Unity,是Ubuntu尝试新科技的第一步。

此前Ubuntu有用Clutter这个3D图形库构建其Netbook版本的Launcher,不过效果平平,根本不足以打造一个好的交互桌面。

这次,Ubuntu不再直接使用Clutter了,而是使用了GNOME 3.0的核心装备:Mutter。

“GNOME 3.0的核心不是GNOME Shell吗?Mutter又是什么?”

从技术角度来讲,Mutter才是GNOME 3.0的核心,而GNOME Shell只是基于Mutter的一个插件而已~

Mutter是基于Clutter开发,由Metacity改来的窗口管理器,就跟Compiz一样,Mutter仅支持3D加速。实际上Mutter已经被应用在一些地方了,比如之前的Moblin,也是基于Mutter窗口管理器的。

所以简单的说,Ubuntu Unity是Ubuntu首次使用Mutter作为其窗口管理器,目标实现更多有意思的功能的一个桌面Shell。理所当然的,因为“Unity”也是Mutter的插件,从这个角度来看,它与GNOME Shell是兄弟关系。

http://baike.baidu.com/view/2838495.htm

clutter是英国的移动Linux开发和服务商Opened Hand公司用于GUI的软件库,是一个C API集合。Opened Hand公司已被Intel收购。概况的说,clutter之于OpenGL/GLX,就像GTK之于Xlib/X。

clutter的介绍

  clutter感觉有点像flash,通过ClutterTimeline 和ClutterBehaviour 控制对象的行为。clutter用C语言编写,采用与GTK类似的面向对象编程。clutter的核心概念是:stage(画布,舞台)和actor(演员)。莎士比亚说“全世界是一座舞台,所有的男人女人不过是演员”,这句话很好的表现了这点。画布相当于一个window,或者framebuffer,是actor的舞台。所有的clutter程序都需要创建一个stage,它是最顶层的对象,也是一个container(容器),让其他的actor在其上面表演。actor们本身都是2D对象,是平面的,不过clutter允许我们对这些actor在3D空间进行操作,比如绕着x,y,z轴旋转。  clutter除了可以让我们在3D空间操作2D的actor之外,最有特色的就是可以使用时间线,通过多条时间线的协同使用,我们可以很容易创造出“有生气”“诱惑力”的程序。当然,clutter也会处理传统的键盘、鼠标事件。

基本 clutter 程序设计与stage的基本概念

  #include  clutter_init()  clutter_stage_get_default()  clutter_actor_show()  clutter_container_add()  clutter_main()  开始一个clutter程序,使用clutter_init()函数初始化。使用clutter_stage_get_default()创建一个stage。也可以使用GtkClutterEmbed widget在一个GTK+窗口中使用clutter。  ClutterStage从ClutterActor对象派生,所以很多ClutteActor的属性都可以用在stage上,例如调用clutter_actor_show()函数显示stage。  ClutterStage也操作ClutterContainer,允许使用clutter_container_add()函数添加子actors。调用clutter_main()函数开始一个main loop,让stage“活”起来。

stage

  每个clutter应用程序都至少包括一个ClutterStage。这个stage容纳Actors(如rectangles,images,text等)。

stage widget

  GtkClutterEmbed widget允许把ClutterStage放到一个GTK+窗口中。使用gtk_clutter_embed_new()函数创建一个实例,再用gtk_clutter_embed_get_stage()函数从GtkClutterEmbed对象创建一个ClutterStage实例。  使用GtkClutterEmbed widget,需要用gtk_clutter_init代替clutter_init和gtk_init初始化clutter和GTK+。使用gtk_main()代替clutter_main()创建main loop。

Actor

  clutter中的基本actor有:  (1) ClutterStage --- stage  (2) ClutterRectangle --- 矩形  (3) ClutterText --- 显示和编辑文本  (4) ClutterTexture --- 图片  每个actor需要用clutter_container_add()函数添加到stage中,并且用clutter_actor_set_position()函数设置位置(x,y坐标),z 轴使用clutter_actor_set_depth()函数设置。使用clutter_actor_set_size()函数设置宽度和长度(width and height)。  actor 的位置默认在 parent container(比如stage)的 top-left(0,0),可以用clutter_actor_set_anchor_point()函数改变。  默认情况下,actor 是隐藏的,需要调用clutter_actor_show()函数显示。可以调用clutter_actor_hide()函数隐藏对象。actor 可以使用scaling(缩放)、rotation(旋转)、partly transparent(透明)变形。

Containers(容器)

  ClutterContainer  ClutterStage  ClutterGroup  使用ClutterGroup可以同时操作几个actor。
扩展阅读:
  • 1

    programming-with-clutter,该文章详细的介绍了clutter,想详细了解clutter的朋友值得好好看看。