基于wayland的linux桌面,揭开Wayland的面纱 - iTech - 博客园

news/2024/11/24 9:43:41/

揭开Wayland的面纱 - iTech - 博客园

(2011-11-30 22:38:22)

标签:

锦衣夜行

娱乐

如果在两年前,按照那篇《Wayland:Linux的新X Server》的理解,它是一个新的"X

Server",在于改善当前X

Server的不足,从而取代它.现在,我们已经可以用更标准的语言来定义Wayland了,那就是:A Simple Display

Server.

没错,Wayland是一个简单的"显示服务器"(Display

Server),与X Window属于同一级的事物,而不是仅仅作为X Window下X Server的替代(注:X Window下分X

Server和X Client).也就是说,Wayland不仅仅是要完全取代X Window,而且它将颠覆Linux桌面上X

Client/X Server的概念,以后将没有所谓的"X

Client"了,而是"Wayland

Client".

更确切的说,Wayland只是一个协议(Protocol),就像X

Window当前的协议——X11一样,它只定义了如何与内核通讯、如何与Client通讯,具体的策略,依然是交给开发者自己.所以Wayland依然是贯彻"提供机制,而非策略"的Unix程序.

"什么?Wayland还是Server/Client模式?"可以这么理解,但实际上与X

Window的Server/Client有着本质的区别.

让我们用一张类似前文所示的图表来重新演示一下,在Wayland的框架下,窗口事件的响应是如何进行的.

在Wayland的架构图中,最显著的一些特点是:

它复用了所有Linux内核的图形、输入输出技术:KMS、evdev,因此已支持的驱动可以直接拿来用;

Wayland没有传统的Server/Client的模式,取而代之的是:Compositor/Client,这不仅仅是换一个名称而已,后面会讲到具体区别;

还记得前文中"点击Firefox的刷新按钮"这个应用场景吧?在Wayland里,所有的流程是这样的:

内核收到了鼠标发出的信息,经过处理后转发到了Wayland Compositor,就像之前发往X Server一样.

Compositor收到消息后,立马能知道哪个窗口该收到这个消息,因为它就是总控制中心,它掌握窗口的层级关系、动画效果,因此它知道该坐标产生的鼠标点击信息应该发送给谁,就这样,Compositor将鼠标的点击信息发送给了Firefox.

Firefox收到了消息,这时如果是在X Window下的话,Firefox会向X

Server请求绘制按钮被按下的效果.然而在Wayland里,Firefox可以自行进行绘制而不需要再请求Compositor的许可!这就是传说

中的:直接渲染机制(Direct

Render)!Wayland不管Client的绘制工作,整个过程变得十分简单而且高效!当Firefox自行完成了按钮状态的绘制后,它只需要通知

Compositor,某块区域已经被更新了.

Compositor收到Firefox发来的信息的,再重新合成那块更新的那块区域,将最终桌面效果呈现给用户.这个过程主要是跟内核、显卡驱动打交道了.

整个流程是不是很自然、很简单?

所以结论出来了:

Wayland的"直接渲染架构"彻底结束了传统X

Window在渲染图形时需要不停的向Server请求、确认再绘制这个繁琐的过程,理论上响应速度有了"爆发式"增长;

Wayland从根本上消除了"Server+Compositor"的重复劳动,仅有且只需要有一个"Compositor"合成器而已.

Compostior,就是Wayland上的"X

Server",但是它更纯粹,它不像X

Server一样,像个大家长,什么都要管.Compositor只做该做的事情,把上面的过程简化成任务便是:

基于Wayland协议,处理evdev的信息;

通知Client(即应用程序)对相关事件做出反应(至于应用程序想怎么反应,Compositor不需要过问);

收到Client的状态更新,重新合成图形或管理新的图形布局.

你意识到了,Wayland Compositor的角色,就像是"X

Server"+"Window

Manager",但它只做份内的事情而已.我想你已经可以想像Wayland构架是如何简单而且高效了,它一举解决了"X

Window"发展这么多年来积累的、通过"扩展"去解决的那些问题.

看似很美好,那么Wayland现在的可用性如何?大家都知道,GTK+、Qt,现在都是基于X的,它们能顺利地移植至基于Wayland吗?当然可以,禁区之雄!

逐渐成熟的Wayland周边应用

还记得前面那篇文章中,我说过的这句话吧:"尽管在Linux平台下,Cairo、Pango的发挥依然是基于X

Window的,但X

Window充其量仅仅是一个"backend"而已,并不是少它不行.同理,跨平台的GTK+、Qt也只是视X为其中所支持的后端之一,假如哪天X真的

不在了,更换一个新后端,当前的GNOME、KDE也能完整的跑起来."

你已经想到了,GTK+、Qt,只需要简单的处理一下后端,便可以跑在Wayland上了.比如:

在当前的GTK+3.0开发分支中,有一个开发分支是"rendering-cleanup"."清理渲染"?这是做什么的?联想一下那个连Client"怎么渲染"都要管的X

Server吧.

对了!GTK+3.0已经彻底移除了所有图形渲染、绘图方面跟X相关的部分了,现在它是一个100%基于Cairo绘制的图形工具库了(之前GTK+2.x时在2.8开始逐渐转向用Cairo绘制,但一直不彻底).

这意味着两点:

GTK+的一直以来评价不怎么样的跨平台性,在3.0将有显著的突破;

GTK+的Wayland后端,已经在路上了!

当然,Qt也有了,限于篇福,这里就不介绍了.

另外一个已经在主开发分支便支持Wayland的东西便是:Clutter.这是一个基于OpenGL的动画框架,我以前介绍过很多次的GNOME

Shell、Moblin,

都是基于Clutter的.在Clutter当前1.5.x的开发分支,Wayland作为其中一个"backend",已经得到了

"experimental"的支持.所以说,GNOME

3.0、MeeGo Netbook很可能会成为第一个应用Wayland的桌面环境.

那么,看来Wayland真的触手可及了啰?可以这么说,但是还差一点.

Wayland技术实现及工作重点

Wayland的核心协议已经实现的差不多了,它充分利用了Linux内核的KMS、GEM、DRM等技术,另外,它默认是支持3D加速的,也就是通过OpenGL

ES进行图形的合成——光是这一点,X Window又要泪奔了.

使用OpenGL ES这个子集而非OpenGL,这意味着什么?想想有多少项目是用OpenGL

ES的:Android、iOS、WebOS、WebGL……几乎所有主流的的移动操作系统、浏览器3D的实现,都选用了精简、高效的OpenGL

ES.

我不知道当前Android的Display

Server、Input/Output是如何实现的,总之跟iOS相比,在触控的响应上是有差距的.未来,对OpenGL

ES有着良好支持的Wayland,不知道会不会给这些基于Linux内核的移动操作系统发力呢?我想是非常有可能的!

这时问题就来了,因为Wayland所使用的,都是当前Linux下最新潮的图形技术.所以理所当然的,在驱动这一层面会有一些厂商跟不上.

拿nVIDIA开刷吧,KMS技术都出来一年多了,Intel的全部显卡和AMD部分显卡已经获得支持了,可nVIDIA压根就没有兴趣搞这个,以

致于开源社区利用反向工程,通过"Nouveau"项目让nVIDIA支持了KMS,当然比较遗憾的是,性能跟官方闭源的驱动是差了相当的距离.

所以说,基于Wayland的Linux桌面/移动要真正得到应用,驱动这一关是一定要解决的.不过正所谓潮流不可档,nVIDIA迟早会支持这项技术的.

等到驱动完全不成问题了,Wayland还需要一个全功能的"Compositor",这个角色,就由Clutter/Mutter、

Compiz、KWin等当前主流的窗口管理器来扮演的,相信只要通过简单的修改,这些合成窗口管理器很快地就能转变成一个全能的"Wayland

Compositor"!

把玩Wayland及展望未来

讲了这么多技术、历史和业界,大家肯定枯燥了,究竟现在有没有可以跑的"Wayland

Compositor"可以玩玩呢?当然!

现在,只要你从官方取得源码,然后根据教程进 行编译,就能跑起一个简单实现的"Wayland

Compositor".由于Wayland协议的灵活性,Wayland

Compositor也可以拥有自己的后端:比如直接在DRM上跑Wayland(不需要X),或者在X

Window上跑起一个Wayland Compositor(相当于在X Window上用Xephyr再跑一个X

Window).

当前我在Ubuntu 10.10的图形环境下,就跑起了默认的这个简易的Wayland Compositor,几点说明:

支持透明、阴影和简单的窗口管理;

所有的图形绘制,都是通过Cairo-gl(Cairo的OpenGL后端)进行;

这是又一个例子,我编译了Clutter的Wayland后端,锦衣夜行,成功地跑起了一个Clutter的Demo:即同中Ubuntu

Tweak的3D Logo.

除了这个Wayland Compositor本身是跑在X

Window之上,其本身合成效果、处理窗口布局等等,都完全没有用到X,而且整个代码非常简洁.未来的Linux图形,就会像是这样一个结构简单又高效的样子.

相信看完我这些介绍,大家对Wayland是个什么角色,已经比较清楚了吧?

简单的说,它就是一个去除X

Window中不必要的设计、充分利用现代Linux内核图形技术的一个显示机制,它的出现是自然而然的,www.wuliuxs.com,它的使命不是为了消灭X

Window,而是将Linux的图形技术发挥至更高的一个境界.传统的X Window(即经典X应用、Gtk

1.x/2.x等旧应用),也会在相当长一段时间内得到继续支持,通过Wayland Client的形式跑在Wayland

Compositor上,直到最终升级、取代或被淘汰.

2011年后期或2012年,我们将能看到Wayland正式着陆,期待吧!

完!

Kristian Shows Off GTK+ 3.0 On Wayland 新版博问上线,帮您解决IT难题

三星很陶醉:爷会成为智能手机之王 Lights:奇妙的WebGL 3D体验 Engine Yard增加对Node.js的支持

GiMP帮助发现年轻达芬奇的自画像 移动平台:开放与封闭 我为什么向后端工程师推荐Node.js

高德纳(Knuth)谈计算机程序设计艺术(上) 整洁的代码 VS 卓越的代码 浅谈 HTML5 的DOM Storage 机制

更多知识库文章... China-pub 2011秋季教材巡展 China-Pub 计算机绝版图书按需印刷服务 Cpp/CLI编程宝典

[Cpp写好函数和类] Autodesk(2) BuildRelease(108) BuildTools(76) C++/CLI(7)

C++Tools(14) knowledge(1) OtherLanguage(5) Python(78) 批处理/Shell(33)

2011年11月(27) 2011年10月(7) 2011年9月(17) 2011年8月(42) 2011年7月(16)

2011年6月(15) 2011年5月(5) 2011年4月(11) 2011年3月(16) 2011年2月(22)

2011年1月(31) 2010年12月(13) 2010年11月(14) 2010年10月(9) 2010年9月(7)

2010年8月(5) 2010年7月(22) 2010年6月(17) 2010年5月(9) 2010年4月(7) 2010年3月(6)

2010年2月(11) 2010年1月(4) 2009年12月(9) 2009年11月(6) 2009年10月(5)

2009年9月(19) 2009年8月(27) 2009年7月(4) 2009年6月(1) 2009年5月(12)

2009年4月(9) 2009年3月(2) 2009年2月(8) 2009年1月(7) 2008年12月(1)

guidesignstudio live.sysinternals.com nirsoft.net

unxutils.sourceforge.net win2000.microsoft.com

win2003.microsoft.com backtrack-linux.org chinaunix.net

distrowatch.com howtoforge.com linux blog linuxany.com

linuxdiyf.com linuxsir.org linuxtone.org linuxtopia.org

linuxtoy.org linux-tutorial.info litrin.net rpmfind.net

tinycorelinux.com ubuntu.org.cn unix-center.net yolinux.com

codeproject.com commandwindows.com computerperformance.co.uk

csharp.net c-sharpcorner.com developer.com dotnetslackers.com

effectiveCpp.cppblog functionx.com python.org robvanderwoude.com

visualc.msdn.com w3schools.com 51cnnet.net coderun.com

connectionstrings.com csharpsearch.com freebyte.com gotapi.com

interop123.com interopsystems.com itboba.com net.classes pdfchm.com

pinvoke.net PythonCodeSearch regexlib.com sooset.com

sorting-algorithms.com sourcemaking.com techtarget.com.cn

thefreecountry.com tutorialspoint.com virtuatopia.com agiledon.com

asp.net debugging blogs.vmware.com cnblogs.com.stbchina csharp3and4

dbanotes.net DotNetDebugging dotnetperls.com

frameworkdesignguidelines frameworkdesignguidelines2 Pythonexample

technetscript voidnish.com aosabook.org apache.org cfx.codeplex.com

code.google.com codeplex.com csharp-source.net mozilla.org

ogre3d.org orchardproject.net silk.codeplex sourceforge.net

1code.microsoft.com channel9.msdn.com downloads.microsoft.com

forums.microsoft.com interoperabilitybridges.com

microsoft.com.chopsticks microsoft.com.web microsoftpdc.com

msdn.magazine msdn.microsoft.com netframeworkcenter

windowsclient.net 我的sharpdownloadsdk gamedev.net nehe.gamedev.net

osdata.com reactos.org businessweek.com cnbeta.com diggsoft.com

inezha.com itxinwen.com kekenet.com sl.iciba.com speak2me.cn

testing.hj.com xiaohuawang.org

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。


http://www.ppmy.cn/news/584802.html

相关文章

学习英语有用的网站(转自天涯)

1 http://www.speak2me.cn/main/home/cn/member_register.php?uid298073&code3276d4b9d5a5fdfaa7b2021c3de55995 (免费学英语口语听力,大量免费课程) 2.http://www.ywhc.net/article/Index.asp(英文荟萃)&#xf…

英语学习站点

1.http://www.speak2me.cn/main/home/cn/member_register.php?uid275368&code0af1651186a7481d550f88a012839223    强烈推荐,对提高英语口语和听力非常有帮助。    2 http://www.24en.com/ 我学习外贸英语的地方    3 http://www.putclub.com/ 去…

2009.4.22 speak2me笔记

safari:狩猎旅行personal savings account:个人储蓄账户actionable items:可以完成的工作 celebrity:名人,名流,名称,名誉idol:偶像lousy:差劲的,糟糕的fickle:善变的stink:散发出恶臭,名声臭,恶臭giraffe:…

Android Camera2获取图像的最简编程

通过Android官方的Camera2Basic工程源码&#xff0c;总结出的Android摄像头获取图像的最简编程实现: 步骤1: 申请权限 因摄像头是一个隐私性非常强的设备&#xff0c;所以需要弹框向用户申请权限。 在工程配置文件AndroidManifest.xml中标明使用权限: <uses-permission and…

Android应用程序开发需要哪些编程语言?

开发一款Android上的应用程序通常需要以下编程语言&#xff1a; Java&#xff1a;Java是Android开发的主要编程语言。几乎所有的Android应用程序都使用Java进行核心开发。你可以使用Java编写应用程序的业务逻辑、界面设计和数据处理等。 刚好我这里有嵌入式、plc、单片机的资料…

简析电力用户预付费模式转变及前景

【摘要】随着电力市场发展水平的不断提高以及电力体制改革事业的不断推进&#xff0c;电力企业面临的电费回收风险越来越大&#xff0c;管理也更加复杂。积极采用电力用户预付费模式&#xff0c;促进预付费系统的建设&#xff0c;不仅能够提升企业的电力服务水平&#xff0c;同…

黑苹果识别Intel 蓝牙驱动

本人是黑苹果使用i ntel nuc 8 打开 链接 https://github.com/OpenIntelWireless/IntelBluetoothFirmware/releases 下载 IntelBluetooth.zip 并解压出.kext 文件 打开 Clover Configuator 然后 open Partition 找到 EFI/CLOVER/kexts/Other 目录 把解压的文件放进去 最后…

计算机无法安装蓝牙驱动,win7电脑蓝牙驱动安装失败怎么解决_win7电脑蓝牙驱动安装失败的解决方法 - 系统家园...

在我们日常使用win7系统电脑时&#xff0c;应该有很多用户遇到过蓝牙驱动安装失败的情况&#xff0c;那么win7电脑蓝牙驱动安装失败怎么解决呢&#xff1f;下面小编就为大家带来win7电脑蓝牙驱动安装失败的解决方法&#xff0c;感兴趣的小伙伴快来看看吧。 win7电脑蓝牙驱动安装…