自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

下一代X Server:揭開(kāi)Wayland的面紗

系統(tǒng)
自 Ubuntu 決定未來(lái)將啟用 Wayland 之后,根據(jù) Phoronix 的消息,來(lái)自于 Red Hat 的 Adam Jackson 在 Fedora 項(xiàng)目的郵件列表里表示,F(xiàn)edora 也有計(jì)劃部署 Wayland。究竟Wayland是什么呢?本文將從X Window開(kāi)始回顧,繼而揭開(kāi)Wayland的面紗。

自 Ubuntu 決定未來(lái)將啟用 Wayland 之后,根據(jù) Phoronix 的消息,來(lái)自于 Red Hat 的 Adam Jackson 在 Fedora 項(xiàng)目的郵件列表里表示,F(xiàn)edora 也有計(jì)劃部署 Wayland,但目前它只是有可能被作為軟件包放置在 Fedora 15 中,并不會(huì)默作為安裝組件。

Wayland是什么呢?它是X Window?還是要取代X Window?它的優(yōu)勢(shì)在哪里?Linux桌面/移動(dòng)會(huì)因此有什么變化?在本篇中,我將回顧歷史,展望未來(lái),通過(guò)簡(jiǎn)易的文字,來(lái)先回顧一下X Window,從而繼續(xù)解答Wayland。

來(lái)源:http://imtx.me 作者:TualatriX

古老的X Window和現(xiàn)代的桌面技術(shù)

X Window在1984年由MIT研發(fā),它的設(shè)計(jì)哲學(xué)之一是:提供機(jī)制,而非策略。舉個(gè)最簡(jiǎn)單的例子吧:X Window提供了生成窗口(Window)的方法,但它沒(méi)規(guī)定窗口要怎么呈現(xiàn)(map)或擺放(place),這個(gè)策略是由外部程序——窗口管理器(Window Manager)所決定的。另外一個(gè)X Window的主要特點(diǎn)便是:Server/Client網(wǎng)絡(luò)模型。不論是本地、遠(yuǎn)程的應(yīng)用程序,都統(tǒng)一通過(guò)Server/Client模型來(lái)運(yùn)作,比如:讓遠(yuǎn)程的應(yīng)用程序跑在本地上。

X Window在推出之后快速演化,在1987年時(shí)候,其核心協(xié)議已經(jīng)是第11版本了,簡(jiǎn)稱:x11。這個(gè)版本已經(jīng)將“提供機(jī)制,而非策略”這個(gè)哲學(xué)貫徹地非常徹底,以致于核心協(xié)議基本穩(wěn)定,不需要特別大的改動(dòng)。于是乎,你看到了,現(xiàn)在是2010年,整整23年了,X Window依然是X11。

你可能會(huì)詫異,23年了,X Window的核心都沒(méi)有特別大的變化,它能適應(yīng)現(xiàn)代桌面的快速發(fā)展嗎?這就要再次提到X Window的設(shè)計(jì)優(yōu)勢(shì)了,X Window在核心層之外提供一個(gè)擴(kuò)展層,開(kāi)發(fā)者可以開(kāi)發(fā)相應(yīng)擴(kuò)展,來(lái)實(shí)現(xiàn)自己的擴(kuò)展協(xié)議,比方說(shuō):

標(biāo)準(zhǔn)的Window都是矩形的,我如何用它來(lái)畫(huà)一個(gè)圓形的窗口?X Window協(xié)議并未提供,但是通過(guò)“shape”這個(gè)擴(kuò)展,X Window可以實(shí)現(xiàn)不規(guī)則的窗體。

所以啊,這23年,X Window除了繼續(xù)完善核心協(xié)議、驅(qū)動(dòng)以外,很大程度上,都是擴(kuò)展使它保持“與時(shí)俱進(jìn)”,比如說(shuō):

  • 要多頭顯示支持,這個(gè)是由“Xinerama”擴(kuò)展實(shí)現(xiàn)的;
  • 要有多媒體視頻回放的支持,這個(gè)是由“X Video”擴(kuò)展實(shí)現(xiàn)的;
  • OpenGL的3D支持,則是通過(guò)“GL”擴(kuò)展來(lái)實(shí)現(xiàn)的;
  • Compiz那樣的合成桌面特效是怎么弄的?沒(méi)錯(cuò),還需要一個(gè)新的擴(kuò)展,它便是:“Composite”;
  • 甚至Keyboard的支持,都是通過(guò)“X Keyboard Extension”(也就是“XKB”)的!

X Window的核心,基本上就是在處理Server/Client、驅(qū)動(dòng)之類的,而外部的那些支持,基本上全是通過(guò)“擴(kuò)展”進(jìn)行的。這沒(méi)什么不好,X Window的結(jié)構(gòu)設(shè)計(jì)精良,盡管是擴(kuò)展,但它們沒(méi)有任何效能上的問(wèn)題。通過(guò)擴(kuò)展方便地實(shí)現(xiàn)了一些對(duì)新技術(shù)、新事物的支持,而且方便維護(hù),這再好不過(guò)了。

所以你看到了盡管23年過(guò)去了,基于X Window的GNOME、KDE,還能保持與同期Windows、Mac OS X競(jìng)爭(zhēng)甚至某些方面更好,你就不得不佩服這些前輩在最初設(shè)計(jì)時(shí)定下的設(shè)計(jì)哲學(xué)是多么正確了。

雖然擴(kuò)展的眾多沒(méi)有給X Window造成什么問(wèn)題,也跟X Window的設(shè)計(jì)哲學(xué)相符,但是其Server/Client的網(wǎng)絡(luò)構(gòu)架,卻一直倍受質(zhì)疑,這便是:

X Window的效率問(wèn)題

經(jīng)常聽(tīng)到有人說(shuō),X Window的Server/Client結(jié)構(gòu)嚴(yán)重影響效率,導(dǎo)致Linux桌面的效應(yīng)速度一直不如Windows、Mac OS X。事實(shí)是不是這樣呢?讓我們還是透過(guò)原理來(lái)說(shuō)話吧。

#p#

這張,便是當(dāng)前X Window系統(tǒng)的架構(gòu)圖,稍微解釋一下:

  • X Client:圖形應(yīng)用程序,如Firefox、Pidgin等;
  • X Server:你看不見(jiàn)的控制中心;
  • Compositor:合成桌面系統(tǒng),如Compiz;
  • Kernel/KMS/evdev:這便是Linux Kernel,后面會(huì)提到KMS技術(shù)了,其中還有一項(xiàng)evdev,是管理輸入設(shè)備的。

X Architecture

通過(guò)這些箭頭,你已經(jīng)可以明白一些X Window的工作機(jī)制了,不過(guò)還從一個(gè)應(yīng)用場(chǎng)景來(lái)解釋一下,想像一下,當(dāng)你點(diǎn)擊了Firefox(X Client)的“刷新”按鈕,將會(huì)發(fā)生以下事情:

  1. 你用鼠標(biāo)點(diǎn)擊了Firefox的“刷新”按鈕,這時(shí)內(nèi)核收到了鼠標(biāo)發(fā)來(lái)的事件,并將其通過(guò)evdev輸入驅(qū)動(dòng)發(fā)送至了X Server。這時(shí)內(nèi)核實(shí)際上做了很多事情,包括將不同品牌的鼠標(biāo)發(fā)出的不同信號(hào)轉(zhuǎn)換成了標(biāo)準(zhǔn)的“evdev”輸入信息。
  2. 這時(shí)X Server可以判斷哪個(gè)Window該收到這個(gè)消息,并將某座標(biāo)按下按鈕的消息發(fā)往X Client——Firefox。但事實(shí)上X Server并不知道它得到的窗口信息是不是正確!為什么呢?因?yàn)楫?dāng)前的Linux桌面早已經(jīng)不是10年前的那樣了,現(xiàn)在是“Composite”即合成桌面的時(shí)代,合成桌面的一個(gè)特點(diǎn)便是:Compositor(如Compiz)管理窗口的一切,X Server只能知道屏幕的某個(gè)點(diǎn)收到了鼠標(biāo)消息,卻不知道這個(gè)點(diǎn)下面到底有沒(méi)有窗口——誰(shuí)知道Compiz是不是正在搞一個(gè)漂亮的、緩慢的動(dòng)畫(huà),把窗口收縮起來(lái)了呢?
  3. 假設(shè)應(yīng)用場(chǎng)景沒(méi)這么復(fù)雜,F(xiàn)irefox順利地收到了消息,這時(shí)Firefox要決定該如何做:按鈕要有按下的效果。于是Firefox再發(fā)送請(qǐng)求給X Server,說(shuō):“麻煩畫(huà)一下按鈕按下的效果。”
  4. 當(dāng)X Server收到消息后,它就準(zhǔn)備開(kāi)始做具體的繪圖工作了:首先它告訴顯卡驅(qū)動(dòng),要畫(huà)怎么樣一個(gè)效果,然后它也計(jì)算了被改變的那塊區(qū)域,同時(shí)告訴Compiz那塊區(qū)域需要重新合成一下。
  5. Compiz收到消息后,它將從緩沖里取得顯卡渲染出的圖形并重新合成至整個(gè)屏幕——當(dāng)然,Compiz的“合成”動(dòng)作,也屬于“渲染(render)”,也是需要請(qǐng)求X Server,我要畫(huà)這塊,然后X Server回復(fù):你可以畫(huà)了。
  6. 整個(gè)過(guò)程可能已經(jīng)明了了,請(qǐng)求和渲染的動(dòng)作,從X Client->X Server,再?gòu)腦 Server->Compositor,而且是雙向的,確實(shí)是比較耗時(shí)的,但是,事實(shí)還不是如此。介于X Window已有的機(jī)制,盡管Compiz已經(jīng)掌管了全部最終桌面呈現(xiàn)的效果,但X Server在收到Compiz的“渲染”請(qǐng)求時(shí),還會(huì)做一些“本職工作”,如:窗口的重疊判斷、被覆蓋窗口的剪載計(jì)算等等(不然它怎么知道鼠標(biāo)按下的坐標(biāo)下,是Firefox的窗口呢)——這些都是無(wú)意義的重復(fù)工作,而且Compiz不會(huì)理會(huì)這些,Compiz依然會(huì)在自己的全屏幕“畫(huà)布”上,畫(huà)著自己的動(dòng)畫(huà)效果……

從這個(gè)過(guò)程,基本可以得出結(jié)論:

  1. X Client <-> X Server <-> Compositor,這三者請(qǐng)求渲染的過(guò)程,不是很高效;
  2. X Server,Compositor,這兩者做了很多不必要的重復(fù)工作和正文切換。

當(dāng)然,這里我沒(méi)有直接說(shuō)明這種模式有沒(méi)有給X Window造成效率問(wèn)題,因?yàn)槲覀冞€少一個(gè)對(duì)照組。再看對(duì)照組之前,再來(lái)看看X Server的另一個(gè)趨勢(shì):

#p#

從“什么都做”到“做得越來(lái)越少”的X Window

X Window剛出現(xiàn)那會(huì),主要提供一個(gè)在操作系統(tǒng)內(nèi)核上的抽象層,來(lái)實(shí)現(xiàn)一個(gè)圖形環(huán)境。所謂圖形環(huán)境,最主要的便是:圖形+文字。當(dāng)時(shí)的X Window便提供“繪圖”和“渲染文字”的機(jī)制。圖形桌面上的圖案和文字,都通過(guò)X Window合成并繪制出來(lái)。

一個(gè)典型的例子,如果你要用X來(lái)畫(huà)點(diǎn),就要在你的程序中通過(guò)“XDrawPoint”來(lái)進(jìn)行,X Server收到消息后,便會(huì)畫(huà)出相應(yīng)的點(diǎn)。

現(xiàn)在,稍微接觸過(guò)圖形開(kāi)發(fā)的人都知道了,在X Window下,一般都通過(guò)GTK+和Qt來(lái)進(jìn)行了。更深一層的是,通過(guò)Cairo(Qt不是)來(lái)繪制圖形。Cairo是什么?它是一個(gè)繪圖+渲染引擎,著名的瀏覽器Firefox,便是使用Cairo來(lái)渲染網(wǎng)頁(yè)和文字的。

Cairo是一個(gè)全能的、跨平臺(tái)的矢量繪圖庫(kù),它不是簡(jiǎn)單的包裝一下各個(gè)平臺(tái)的繪圖庫(kù)而已,盡管它最初是基于X Window開(kāi)發(fā)出來(lái)的繪圖庫(kù)?,F(xiàn)在Cairo支持各種不同的后端,來(lái)向其輸出圖形,比如X、Windows的GDI、Mac OS X的Quartz,還有各種文件格式:PNG、PDF,當(dāng)然還有SVG。可以說(shuō),Cairo是一個(gè)很徹底的、全能的繪圖庫(kù),現(xiàn)在無(wú)論繪制什么圖形,都不會(huì)考慮到用XLib了。

在Cairo之上,還有文字排版庫(kù):Pango,同樣很明顯的,處理文字排版,都不會(huì)用XFont之類的東西了,而是直接用Pango畫(huà)。當(dāng)然Pango也是跨平臺(tái)的。

盡管在Linux平臺(tái)下,Cairo、Pango的發(fā)揮依然是基于X Window的,但X Window充其量?jī)H僅是一個(gè)“backend”而已,并不是少它不行。同理,跨平臺(tái)的GTK+、Qt也只是視X為其中所支持的后端之一,假如哪天X真的不在了,更換一個(gè)新后端,當(dāng)前的GNOME、KDE也能完整的跑起來(lái)。

再提另外一個(gè)比較典型的關(guān)于“X曾經(jīng)做的,但現(xiàn)已不做”的例子,便是“模式設(shè)置(mode-setting)”,說(shuō)通俗點(diǎn),就是“分辨率的設(shè)置”,但后面會(huì)說(shuō)明不僅僅如此。

大家都知道,Linux只是一個(gè)內(nèi)核,它只有控制臺(tái),通過(guò)Shell來(lái)進(jìn)行交互,而控制臺(tái)默認(rèn)是80x24(單位:字符)的,要進(jìn)入分辨率1024x768或更高的圖形模式,就需要X進(jìn)行一次“模式設(shè)置”,設(shè)置正確的分辨率等等。

盡管后來(lái)Linux也支持了各種用戶層(user-space)的模式設(shè)置,讓終端也支持標(biāo)準(zhǔn)的分辨率,但是X的模式設(shè)置與此是不相干的,所以一兩年前,在Linux的啟動(dòng)過(guò)程中,從終端進(jìn)入圖形界面時(shí),屏幕會(huì)“閃”一下,這時(shí)便在進(jìn)行“模式設(shè)置”——這里就一定要用“模式設(shè)置”這個(gè)術(shù)語(yǔ)了,因?yàn)榧词菇K端是1024的,進(jìn)入X圖形也是1024的,模式的變更還是要進(jìn)行。

后來(lái)呢,嗯,2009年初期,KMS(內(nèi)核模式設(shè)置)終于出現(xiàn)了!??!很少關(guān)心桌面圖形的Linux內(nèi)核,在當(dāng)時(shí)引入了“內(nèi)核級(jí)”的模式設(shè)置,也就是說(shuō),在內(nèi)核載入完畢、顯示驅(qū)動(dòng)初始化后很短的時(shí)間內(nèi),即設(shè)置好標(biāo)準(zhǔn)的分辨率和色深,通過(guò)在X層做相應(yīng)的更改,從此X的初始化就可以省去“模式設(shè)置”這一過(guò)程了!也就是從Fedora 10開(kāi)始,Linux的啟動(dòng)非常平滑、漂亮,沒(méi)有任何閃爍了。現(xiàn)在的Ubuntu 10.10也一樣,KMS的應(yīng)用已經(jīng)相當(dāng)成熟。

X從此又少了一樣圖形任務(wù)……“X淚奔~你們都不要我了。”

可以說(shuō),這20多年來(lái),X從“什么都做”已經(jīng)到了“做的越來(lái)越少”。絕大多數(shù)的開(kāi)發(fā)者開(kāi)發(fā)圖形應(yīng)用程序,已經(jīng)可以完全無(wú)視X的存在了,X現(xiàn)在更像是一個(gè)中間人的角色。那么,X這個(gè)中間人會(huì)不會(huì)有一天,完全被其他事物所取代呢?

沒(méi)錯(cuò)!那就是下面要介紹的Wayland!

#p#

Wayland究竟是什么?

如果在兩年前,按照那篇《Wayland:Linux的新X Server》的理解,它是一個(gè)新的“X Server”,在于改善當(dāng)前X Server的不足,從而取代它?,F(xiàn)在,我們已經(jīng)可以用更標(biāo)準(zhǔn)的語(yǔ)言來(lái)定義Wayland了,那就是:A Simple Display Server。

沒(méi)錯(cuò),Wayland是一個(gè)簡(jiǎn)單的“顯示服務(wù)器”(Display Server),與X Window屬于同一級(jí)的事物,而不是僅僅作為X Window下X Server的替代(注:X Window下分X Server和X Client)。也就是說(shuō),Wayland不僅僅是要完全取代X Window,而且它將顛覆Linux桌面上X Client/X Server的概念,以后將沒(méi)有所謂的“X Client”了,而是“Wayland Client”。

更確切的說(shuō),Wayland只是一個(gè)協(xié)議(Protocol),就像X Window當(dāng)前的協(xié)議——X11一樣,它只定義了如何與內(nèi)核通訊、如何與Client通訊,具體的策略,依然是交給開(kāi)發(fā)者自己。所以Wayland依然是貫徹“提供機(jī)制,而非策略”的Unix程序。

“什么?Wayland還是Server/Client模式?”可以這么理解,但實(shí)際上與X Window的Server/Client有著本質(zhì)的區(qū)別。

讓我們用一張類似前文所示的圖表來(lái)重新演示一下,在Wayland的框架下,窗口事件的響應(yīng)是如何進(jìn)行的。

在Wayland的架構(gòu)圖中,最顯著的一些特點(diǎn)是:

  • 它復(fù)用了所有Linux內(nèi)核的圖形、輸入輸出技術(shù):KMS、evdev,因此已支持的驅(qū)動(dòng)可以直接拿來(lái)用;
  • Wayland沒(méi)有傳統(tǒng)的Server/Client的模式,取而代之的是:Compositor/Client,這不僅僅是換一個(gè)名稱而已,后面會(huì)講到具體區(qū)別;

Wayland Architecture

還記得前文中“點(diǎn)擊Firefox的刷新按鈕”這個(gè)應(yīng)用場(chǎng)景吧?在Wayland里,所有的流程是這樣的:

  1. 內(nèi)核收到了鼠標(biāo)發(fā)出的信息,經(jīng)過(guò)處理后轉(zhuǎn)發(fā)到了Wayland Compositor,就像之前發(fā)往X Server一樣。
  2. Compositor收到消息后,立馬能知道哪個(gè)窗口該收到這個(gè)消息,因?yàn)樗褪强偪刂浦行模莆沾翱诘膶蛹?jí)關(guān)系、動(dòng)畫(huà)效果,因此它知道該坐標(biāo)產(chǎn)生的鼠標(biāo)點(diǎn)擊信息應(yīng)該發(fā)送給誰(shuí),就這樣,Compositor將鼠標(biāo)的點(diǎn)擊信息發(fā)送給了Firefox。
  3. Firefox收到了消息,這時(shí)如果是在X Window下的話,F(xiàn)irefox會(huì)向X Server請(qǐng)求繪制按鈕被按下的效果。然而在Wayland里,F(xiàn)irefox可以自行進(jìn)行繪制而不需要再請(qǐng)求Compositor的許可!這就是傳說(shuō)中的:直接渲染機(jī)制(Direct Render)!Wayland不管Client的繪制工作,整個(gè)過(guò)程變得十分簡(jiǎn)單而且高效!當(dāng)Firefox自行完成了按鈕狀態(tài)的繪制后,它只需要通知Compositor,某塊區(qū)域已經(jīng)被更新了。
  4. Compositor收到Firefox發(fā)來(lái)的信息的,再重新合成那塊更新的那塊區(qū)域,將最終桌面效果呈現(xiàn)給用戶。這個(gè)過(guò)程主要是跟內(nèi)核、顯卡驅(qū)動(dòng)打交道了。

整個(gè)流程是不是很自然、很簡(jiǎn)單?

所以結(jié)論出來(lái)了:

  1. Wayland的“直接渲染架構(gòu)”徹底結(jié)束了傳統(tǒng)X Window在渲染圖形時(shí)需要不停的向Server請(qǐng)求、確認(rèn)再繪制這個(gè)繁瑣的過(guò)程,理論上響應(yīng)速度有了“爆發(fā)式”增長(zhǎng);
  2. Wayland從根本上消除了“Server+Compositor”的重復(fù)勞動(dòng),僅有且只需要有一個(gè)“Compositor”合成器而已。

Compostior,就是Wayland上的“X Server”,但是它更純粹,它不像X Server一樣,像個(gè)大家長(zhǎng),什么都要管。Compositor只做該做的事情,把上面的過(guò)程簡(jiǎn)化成任務(wù)便是:

  1. 基于Wayland協(xié)議,處理evdev的信息;
  2. 通知Client(即應(yīng)用程序)對(duì)相關(guān)事件做出反應(yīng)(至于應(yīng)用程序想怎么反應(yīng),Compositor不需要過(guò)問(wèn));
  3. 收到Client的狀態(tài)更新,重新合成圖形或管理新的圖形布局。

你意識(shí)到了,Wayland Compositor的角色,就像是“X Server”+“Window Manager”,但它只做份內(nèi)的事情而已。我想你已經(jīng)可以想像Wayland構(gòu)架是如何簡(jiǎn)單而且高效了,它一舉解決了“X Window”發(fā)展這么多年來(lái)積累的、通過(guò)“擴(kuò)展”去解決的那些問(wèn)題。

看似很美好,那么Wayland現(xiàn)在的可用性如何?大家都知道,GTK+、Qt,現(xiàn)在都是基于X的,它們能順利地移植至基于Wayland嗎?當(dāng)然可以!

#p#

逐漸成熟的Wayland周邊應(yīng)用

還記得前面那篇文章中,我說(shuō)過(guò)的這句話吧:“盡管在Linux平臺(tái)下,Cairo、Pango的發(fā)揮依然是基于X Window的,但X Window充其量?jī)H僅是一個(gè)“backend”而已,并不是少它不行。同理,跨平臺(tái)的GTK+、Qt也只是視X為其中所支持的后端之一,假如哪天X真的 不在了,更換一個(gè)新后端,當(dāng)前的GNOME、KDE也能完整的跑起來(lái)。”

你已經(jīng)想到了,GTK+、Qt,只需要簡(jiǎn)單的處理一下后端,便可以跑在Wayland上了。比如:

在當(dāng)前的GTK+3.0開(kāi)發(fā)分支中,有一個(gè)開(kāi)發(fā)分支是“rendering-cleanup”。“清理渲染”?這是做什么的?聯(lián)想一下那個(gè)連Client“怎么渲染”都要管的X Server吧。

對(duì)了!GTK+3.0已經(jīng)徹底移除了所有圖形渲染、繪圖方面跟X相關(guān)的部分了,現(xiàn)在它是一個(gè)100%基于Cairo繪制的圖形工具庫(kù)了(之前GTK+2.x時(shí)在2.8開(kāi)始逐漸轉(zhuǎn)向用Cairo繪制,但一直不徹底)。

這意味著兩點(diǎn):

  • GTK+的一直以來(lái)評(píng)價(jià)不怎么樣的跨平臺(tái)性,在3.0將有顯著的突破;
  • GTK+的Wayland后端,已經(jīng)在路上了!

見(jiàn)GTK+跑在Wayland上,截圖引自:Kristian Shows Off GTK+ 3.0 On Wayland

Wayland and GTK+

當(dāng)然,Qt也有了,限于篇福,這里就不介紹了。

另外一個(gè)已經(jīng)在主開(kāi)發(fā)分支便支持Wayland的東西便是:Clutter。這是一個(gè)基于OpenGL的動(dòng)畫(huà)框架,我以前介紹過(guò)很多次的GNOME Shell、Moblin,都是基于Clutter的。在Clutter當(dāng)前1.5.x的開(kāi)發(fā)分支,Wayland作為其中一個(gè)“backend”,已經(jīng)得到了“experimental”的支持。所以說(shuō),GNOME 3.0、MeeGo Netbook很可能會(huì)成為第一個(gè)應(yīng)用Wayland的桌面環(huán)境。

那么,看來(lái)Wayland真的觸手可及了啰?可以這么說(shuō),但是還差一點(diǎn)。

#p#

Wayland技術(shù)實(shí)現(xiàn)及工作重點(diǎn)

Wayland的核心協(xié)議已經(jīng)實(shí)現(xiàn)的差不多了,它充分利用了Linux內(nèi)核的KMS、GEM、DRM等技術(shù),另外,它默認(rèn)是支持3D加速的,也就是通過(guò)OpenGL ES進(jìn)行圖形的合成——光是這一點(diǎn),X Window又要淚奔了。

使用OpenGL ES這個(gè)子集而非OpenGL,這意味著什么?想想有多少項(xiàng)目是用OpenGL ES的:Android、iOS、WebOS、WebGL……幾乎所有主流的的移動(dòng)操作系統(tǒng)、瀏覽器3D的實(shí)現(xiàn),都選用了精簡(jiǎn)、高效的OpenGL ES。

我不知道當(dāng)前Android的Display Server、Input/Output是如何實(shí)現(xiàn)的,總之跟iOS相比,在觸控的響應(yīng)上是有差距的。未來(lái),對(duì)OpenGL ES有著良好支持的Wayland,不知道會(huì)不會(huì)給這些基于Linux內(nèi)核的移動(dòng)操作系統(tǒng)發(fā)力呢?我想是非常有可能的!

這時(shí)問(wèn)題就來(lái)了,因?yàn)閃ayland所使用的,都是當(dāng)前Linux下最新潮的圖形技術(shù)。所以理所當(dāng)然的,在驅(qū)動(dòng)這一層面會(huì)有一些廠商跟不上。

拿nVIDIA開(kāi)刷吧,KMS技術(shù)都出來(lái)一年多了,Intel的全部顯卡和AMD部分顯卡已經(jīng)獲得支持了,可nVIDIA壓根就沒(méi)有興趣搞這個(gè),以致于開(kāi)源社區(qū)利用反向工程,通過(guò)“Nouveau”項(xiàng)目讓nVIDIA支持了KMS,當(dāng)然比較遺憾的是,性能跟官方閉源的驅(qū)動(dòng)是差了相當(dāng)?shù)木嚯x。

所以說(shuō),基于Wayland的Linux桌面/移動(dòng)要真正得到應(yīng)用,驅(qū)動(dòng)這一關(guān)是一定要解決的。不過(guò)正所謂潮流不可擋,nVIDIA遲早會(huì)支持這項(xiàng)技術(shù)的。

等到驅(qū)動(dòng)完全不成問(wèn)題了,Wayland還需要一個(gè)全功能的“Compositor”,這個(gè)角色,就由Clutter/Mutter、Compiz、KWin等當(dāng)前主流的窗口管理器來(lái)扮演的,相信只要通過(guò)簡(jiǎn)單的修改,這些合成窗口管理器很快地就能轉(zhuǎn)變成一個(gè)全能的“Wayland Compositor”!

把玩Wayland及展望未來(lái)

講了這么多技術(shù)、歷史和業(yè)界,大家肯定枯燥了,究竟現(xiàn)在有沒(méi)有可以跑的“Wayland Compositor”可以玩玩呢?當(dāng)然!

現(xiàn)在,只要你從官方取得源碼,然后根據(jù)教程進(jìn)行編譯,就能跑起一個(gè)簡(jiǎn)單實(shí)現(xiàn)的“Wayland Compositor”。由于Wayland協(xié)議的靈活性,Wayland Compositor也可以擁有自己的后端:比如直接在DRM上跑Wayland(不需要X),或者在X Window上跑起一個(gè)Wayland Compositor(相當(dāng)于在X Window上用Xephyr再跑一個(gè)X Window)。

當(dāng)前我在Ubuntu 10.10的圖形環(huán)境下,就跑起了默認(rèn)的這個(gè)簡(jiǎn)易的Wayland Compositor,幾點(diǎn)說(shuō)明:

  • 支持透明、陰影和簡(jiǎn)單的窗口管理;
  • 所有的圖形繪制,都是通過(guò)Cairo-gl(Cairo的OpenGL后端)進(jìn)行;

Wayland Terminal

這是又一個(gè)例子,我編譯了Clutter的Wayland后端,成功地跑起了一個(gè)Clutter的Demo:即同中Ubuntu Tweak的3D Logo。

Wayland and Clutter

除了這個(gè)Wayland Compositor本身是跑在X Window之上,其本身合成效果、處理窗口布局等等,都完全沒(méi)有用到X,而且整個(gè)代碼非常簡(jiǎn)潔。未來(lái)的Linux圖形,就會(huì)像是這樣一個(gè)結(jié)構(gòu)簡(jiǎn)單又高效的樣子。

相信看完我這些介紹,大家對(duì)Wayland是個(gè)什么角色,已經(jīng)比較清楚了吧?

簡(jiǎn)單的說(shuō),它就是一個(gè)去除X Window中不必要的設(shè)計(jì)、充分利用現(xiàn)代Linux內(nèi)核圖形技術(shù)的一個(gè)顯示機(jī)制,它的出現(xiàn)是自然而然的,它的使命不是為了消滅X Window,而是將Linux的圖形技術(shù)發(fā)揮至更高的一個(gè)境界。傳統(tǒng)的X Window(即經(jīng)典X應(yīng)用、Gtk 1.x/2.x等舊應(yīng)用),也會(huì)在相當(dāng)長(zhǎng)一段時(shí)間內(nèi)得到繼續(xù)支持,通過(guò)Wayland Client的形式跑在Wayland Compositor上,直到最終升級(jí)、取代或被淘汰。

2011年后期或2012年,我們將能看到Wayland正式著陸,期待吧!

原文:12

【編輯推薦】

  1. Ubuntu:請(qǐng)你分清桌面端與服務(wù)器
  2. Linux下三大免費(fèi)桌面虛擬機(jī)評(píng)測(cè)
  3. Unix和Linux桌面的背后:理解Xwindow的工作原理
責(zé)任編輯:yangsai 來(lái)源: imtx.me
相關(guān)推薦

2013-07-27 21:28:44

2013-06-27 11:21:17

2010-11-03 13:57:18

Windows Ser

2018-09-27 18:47:45

AIOpsDevOps

2020-09-27 17:27:58

邊緣計(jì)算云計(jì)算技術(shù)

2018-09-11 08:00:00

DevOpsAIOps機(jī)器學(xué)習(xí)

2020-06-02 08:05:28

智能電表蜂窩物聯(lián)網(wǎng)NB-IoT

2024-02-26 14:46:53

移動(dòng)計(jì)算人工智能5G

2025-01-03 09:24:10

模型架構(gòu)論文

2020-09-16 10:28:54

邊緣計(jì)算云計(jì)算數(shù)據(jù)中心

2013-09-09 16:28:36

2016-01-26 11:58:12

2016-11-24 08:29:37

Fedora LinuLinux下載

2015-01-22 16:16:01

思科IT模式

2010-09-01 17:05:04

無(wú)線網(wǎng)絡(luò)

2011-01-27 09:52:43

StuxnetZeus軟件攻擊

2018-09-25 07:00:50

2011-06-30 11:02:22

2012-12-12 10:29:57

2009-01-11 10:13:39

Stripes開(kāi)發(fā)框架JSP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)