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

溫故知新,那就從用戶界面開始吧!

開發(fā) 架構(gòu)
用戶界面(User Interface)是進(jìn)行人機(jī)交互活動的系統(tǒng)部件,是人與計算機(jī)通訊與對話的接口。早期的計算機(jī)是通過面板上的指示燈來顯示二進(jìn)制數(shù)據(jù)和指令,人們則通過面板上的開關(guān)、扳鍵及穿孔紙帶送入各種數(shù)據(jù)和命令。

從人機(jī)交互到用戶界面,從GUI到窗口系統(tǒng),進(jìn)而到X 系統(tǒng)。從X 系統(tǒng)的設(shè)計思想,到Xserver和Xclient以及X11協(xié)議,一直到窗口管理器乃至wayland。溫故知新,那就從用戶界面開始吧!

圖片

1. 從用戶界面開始

用戶界面(User Interface)是進(jìn)行人機(jī)交互活動的系統(tǒng)部件,是人與計算機(jī)通訊與對話的接口。早期的計算機(jī)是通過面板上的指示燈來顯示二進(jìn)制數(shù)據(jù)和指令,人們則通過面板上的開關(guān)、扳鍵及穿孔紙帶送入各種數(shù)據(jù)和命令。50年代中后期,由于采用了控制臺及打字機(jī)等設(shè)備,使計算機(jī)可以批處理多個計算任務(wù),從而代替了原來笨拙的手工扳鍵方式,提高了計算機(jī)的使用效率。

1963年,美國麻省理工學(xué)院在 709/7090計算機(jī)上成功地開發(fā)出第一個分時系統(tǒng),該系統(tǒng)連接了多個分時終端,并最早使用了文本編輯程序。從此,以命令行形式的多用戶分時終端成為70乃至80年代用戶界面的主流。

20世紀(jì)80年代初,由美國施樂公司在Alto計算機(jī)首先使用Smarttalk-80程序設(shè)計了開發(fā)環(huán)境,以及后來的Mactosh等計算機(jī),將用戶界面推向圖形用戶界面的新階段。隨之而來的用戶界面管理系統(tǒng)和智能界面的研究均推動了用戶界面的發(fā)展。

圖片

GUI的核心特征是WIMP:

  • W(window)指窗口,是用戶或系統(tǒng)的一個工作區(qū)域,一個屏幕可以有多個窗口。
  • I(icons)指圖標(biāo),是形象化的圖形標(biāo)志,易于人們隱喻和理解。
  • M(menu)指菜單,可供用戶選擇的功能提示。
  • P(pointer)指鼠標(biāo)器等,便于用戶直接對屏幕對象進(jìn)行操作。

GUI采用了不少桌面辦公的隱喻,應(yīng)用者共享一個直觀的界面框架。人們熟悉辦公桌的情況,因而對計算機(jī)顯示的圖標(biāo)含義容易理解,諸如 文件夾、收件箱、畫筆、工作簿、鑰匙及時鐘等。采用GUI后,用戶可直接對屏幕上的對象進(jìn)行操作,如拖動、刪除、插入以至放大和旋轉(zhuǎn)等。執(zhí)行操作后,屏幕能立即給出反饋信息或結(jié)果,實現(xiàn)了所見即所得。

2. 關(guān)于GUI的點滴

一個GUI系統(tǒng)通常由三個基本層次組成。它們是顯示模型,窗口模型和用戶模型。用戶模型包含了顯示和交互的主要特征,因此,圖形用戶界面這一術(shù)語有時也僅指用戶模型,這也是一個令人誤解的地方。

圖片

最底層是計算機(jī)硬件平臺,如Intel,PowerPC等,硬件平臺的上面是計算機(jī)的操作系統(tǒng)。大多數(shù)圖形用戶界面系統(tǒng)都只能在一兩種操作系統(tǒng)上運(yùn)行,只有少數(shù)的產(chǎn)品例外。操作系統(tǒng)之上是圖形用戶界面的顯示模型,它決定了圖形在屏幕上的基本顯示方式。不同的GUI系統(tǒng)所采用的顯示模型各不相同,例如,大多數(shù)在Unix/Linux 之上運(yùn)行的圖形用戶界面系統(tǒng)都采用 X窗口作顯示模型 ,MS windows 則采用公司自己設(shè)計的GDI作為顯示模型。

顯示模型之上是GUI系統(tǒng)的窗口模型。窗口模型確定窗口如何在屏幕上顯示,如何改變大小,如何移動,及窗口的層次關(guān)系等。它通常包括兩個部分,一個是編程工具 ,另一個是對如何移動,輸出和讀取屏幕顯示信息的說明。因為X窗口不但規(guī)定了如何顯示基本圖形對象也規(guī)定了如何顯示窗口,所以它不但可以充當(dāng)圖形用戶界面的顯示模型,也可以充當(dāng)它的窗口模型。

窗口模型之上是用戶模型,圖形用戶界面的用戶模型又稱為GUI的視覺感受。它也包括兩個部分 :構(gòu)造用戶界面的工具和對于如何在屏幕上組織各種圖形對象,以及這些對象之間如何交互的說明。例如,每個GUI模型都會說明它支持什么樣的菜單和什么樣的顯示方式。

GUI系統(tǒng)的應(yīng)用程序接口由其顯示模型,窗口模型和用戶模型的應(yīng)用程序接口共同組成。

GUI 系統(tǒng)一般分為三類:

  • 基于操作系統(tǒng)內(nèi)核的GUI:這類GUI的絕大多數(shù)功能都與操作系統(tǒng)的內(nèi)核融合在一起,圖形用戶界面與操作系統(tǒng)密切配合,協(xié)調(diào)工作,來實現(xiàn)系統(tǒng)管理,應(yīng)用程序采用系統(tǒng)調(diào)用的方式來完成對窗口的各類操作。這類圖形用戶界面主要實現(xiàn)于個人機(jī)環(huán)境,如蘋果的Mac 。雖然圖形用戶接口與操作系統(tǒng)的緊密結(jié)合給GUI的開發(fā)帶來了方便,但是這類圖形用戶界面依附于特定的操作系統(tǒng)與硬件支撐環(huán)境,使得GUI變得不易修改、難擴(kuò)展、可移植性差。
  • 基于CS模型型的GUI:這類GUI由與硬件直接相關(guān)的服務(wù)器部分和與硬件無關(guān)的客戶部分共同組成,實現(xiàn)了GUI的設(shè)備獨(dú)立性。當(dāng)面對不同的硬件環(huán)境時,僅僅需要修改直接操作硬件的服務(wù)器部分,因而具有較好的可移植性。這一類圖形用戶界面的代表是 X window。
  • 基于庫函數(shù)的GUI:這類GUI實現(xiàn)于操作系統(tǒng)的上層,可視為操作系統(tǒng)的擴(kuò)展,它以庫函數(shù)的形式提供給對窗口進(jìn)行操作的應(yīng)用程序進(jìn)行調(diào)用。這種圖形用戶界面比較容易修改、擴(kuò)充和移植。但在其基礎(chǔ)上編制的應(yīng)用程序還是與操作系統(tǒng)強(qiáng)相關(guān),并對它的移植帶來了一些障礙。這類GUI的典型產(chǎn)品是 MS windows 。

3. 窗口系統(tǒng)

窗口系統(tǒng)是在屏幕某限定區(qū)域管理程序輸入和輸出的一組工具。它與操作系統(tǒng)類似,操作系統(tǒng)管理的是存儲空間和I/O設(shè)備,而窗口系統(tǒng)管理的是窗口、事件、文本的輸入、文本和圖形的輸出以及各種對象屬性;操作系統(tǒng)用調(diào)度算法和I/O封鎖來調(diào)度,窗口系統(tǒng)使用用戶生成的事件來調(diào)度。 

所謂窗口,是指屏幕上的一塊矩形區(qū)域,用戶通過窗口可以顯示、觀察其區(qū)域內(nèi)的全部或部分內(nèi)容,并可以對所顯示的內(nèi)容進(jìn)行各種系統(tǒng)預(yù)先規(guī)定好的正文或圖形操作。一般把窗口稱為虛擬屏幕,把顯示器稱為物理屏幕。現(xiàn)代窗口系統(tǒng)支持多窗口重疊顯示,這必然涉及到各個窗口在屏幕上的疊放順序,一般采用一種稱為窗口“Z序”的機(jī)制來進(jìn)行管理?!癦序”實際是相對屏幕坐標(biāo)而言的,假設(shè)一根過屏幕原點垂直于屏幕的Z軸,它由外指向屏幕內(nèi),窗口在這個Z軸上的值就確定了它的Z序, Z序值大的窗口覆蓋了Z序值小的窗口,因此, Z序?qū)嶋H定義了各個窗口在屏幕上的層疊順序。

窗口管理技術(shù)是屏幕管理技術(shù)的核心,在實現(xiàn)時首先要定義一個窗口的數(shù)據(jù)結(jié)構(gòu)。各類窗口風(fēng)格迥異,但它們的基本信息都可以歸納為下面幾類:

  • 標(biāo)志信息,作為一個窗口的標(biāo)志,以正整數(shù)表示,不同的窗口,標(biāo)志不同。
  • 風(fēng)格信息,表示窗口的顯示風(fēng)格。
  • 位置信息,描述窗口及其各個組成部分在屏幕上的位置。
  • 內(nèi)容信息,包括窗口內(nèi)各組成部分相關(guān)的數(shù)據(jù),如菜單等。
  • 圖像信息,存放與窗口相關(guān)的屏幕圖像,如窗口的圖標(biāo)。
  • 父子信息,指一個窗口的父窗口和其子窗口的信息。
  • 消息過程,指窗口對各種消息的處理函數(shù)。

窗口管理提供了一組工具函數(shù),實現(xiàn)對窗口的創(chuàng)建、關(guān)閉、刪除等基本操作功能,此外還實現(xiàn)設(shè)置、獲取窗口屬性、移動等控制窗口的功能。這里要注意的是,對窗口進(jìn)行創(chuàng)建、關(guān)閉、等操作時,要相應(yīng)修改系統(tǒng)的窗口Z序鏈表以及各個有關(guān)窗口的信息。

4. X window

X window是由麻省理工學(xué)院推出的窗口系統(tǒng),1984年發(fā)行了其最早版本,簡稱X,旨在建立不依賴于特定硬件系統(tǒng)的圖形和文字顯示窗口系統(tǒng)的標(biāo)準(zhǔn)。X window是一個圖形顯示、服務(wù)和管理系統(tǒng),包含了光柵圖形技術(shù)、用戶界面技術(shù)、操作系統(tǒng)技術(shù)和計算機(jī)網(wǎng)絡(luò)技術(shù),為用戶提供了一個靈活多樣的交互式圖形界面。X window完善的管理功能和高效的程序開發(fā)環(huán)境也成為一個事實上的工業(yè)標(biāo)準(zhǔn)。

圖片

從一般用戶的視角看, 窗口系統(tǒng)具有下述特征:

  • 支持實現(xiàn)不同風(fēng)格的用戶界面
  • 具有網(wǎng)絡(luò)透明性
  • 本身獨(dú)立于顯示設(shè)備和輸入設(shè)備
  • 支持并行顯示和多程序并行運(yùn)行
  • 支持重疊型和瓦片型窗口
  • 提供了多種窗口管理器,但系統(tǒng)中只能有一個活動的窗口管理器
  • 具有很好的可擴(kuò)展性

從軟件開發(fā)者的視角看,窗口具有下述特征:

  • 提供了多種資源及其管理機(jī)制。
  • 窗口系統(tǒng)的資源包括屏幕、窗口、象素映象、調(diào)色板、字體、光標(biāo)、設(shè)備及繪圖屬性集。
  • 提供了基于網(wǎng)絡(luò)的窗口協(xié)議提供了各類庫函數(shù)、工具箱和對象類等編程機(jī)制,將窗口環(huán)境下的各種動作或行為抽象為請求和事件,并提供了相應(yīng)的數(shù)據(jù)流和管理機(jī)制,大大簡化了程序設(shè)計工作。

5. X 系統(tǒng)的設(shè)計思想

X窗口系統(tǒng)設(shè)計思想是創(chuàng)立一個與系統(tǒng)硬件無關(guān)的圖形界面接口(簡稱GUI)?并且能夠通過網(wǎng)絡(luò)進(jìn)行完全擴(kuò)展的系統(tǒng)。因此?X窗口系統(tǒng)設(shè)計上遵循Client/server模式?該模式滿足了X窗口系統(tǒng)的完全可擴(kuò)展性,?在網(wǎng)絡(luò)上采用了X協(xié)議封裝實現(xiàn)了網(wǎng)絡(luò)的透明性。

X窗口系統(tǒng)的Server負(fù)責(zé)管理所有與顯示有關(guān)的資源,不同的硬件平臺往往對應(yīng)不同的Server,因此,X Server是與硬件相關(guān)的,往往由硬件廠商提供其驅(qū)動。另一方面,由于X窗口系統(tǒng)是基于事件驅(qū)動的,因此X Server會將諸如鼠標(biāo)移動等驅(qū)動事件傳送給客戶機(jī)。Client根據(jù)程序需要負(fù)責(zé)向Server提出服務(wù)請求,Server根據(jù)Client的請求將涉及圖形部分顯示在顯示設(shè)備上,并將服務(wù)請求結(jié)果回送給客戶機(jī)?整個流程。因此,X Server的設(shè)計是由廠商完成,而Client是由用戶設(shè)計,并通過X Server完全將顯示設(shè)備和客戶機(jī)隔離開來,使Client具有可移植性。

圖片

X Client的設(shè)計是通過調(diào)用Xlib庫來實現(xiàn)對服務(wù)器的服務(wù)請求,從Xlib中調(diào)用函數(shù),并將請求采用X協(xié)議封裝通過網(wǎng)絡(luò)傳遞給X Server,X Server負(fù)責(zé)依次將請求傳遞給指定設(shè)備,由設(shè)備負(fù)責(zé)處理。Xlib開發(fā)X Client的工作量非常大,在X窗口系統(tǒng)的設(shè)計中經(jīng)常使用Xt庫和窗口組件集。Xt庫提供了多種用于容納數(shù)據(jù)和提供用戶界面的對象,稱作組件或Widget,并管理Widget的幾何特性和事件處理。在Xt庫提供的Widget基礎(chǔ)上,窗口組件集是建立了一些基本的Widget類和專門化的Widget子類,用以完成用戶界面的各種功能,常見的窗口組件集有Motif、Athena、Qt和Gnome等庫。

6. X server

X Server 是一個跟蹤所有輸入信息的程序,這些輸入信息來自鍵盤和鼠標(biāo)器等輸入設(shè)備及任何正在運(yùn)行的其他客戶程序。服務(wù)器起到客戶應(yīng)用程序和本地工作站硬件之間的媒介的作用執(zhí)行下列任務(wù):

  • 允許多個客戶程序訪問多屏工作站
  • ·解釋理解從客戶程序來的網(wǎng)絡(luò)消息
  • 通過發(fā)送網(wǎng)絡(luò)消息把用戶的輸入傳送給客戶程序
  • 繪制二維圖形,這些圖形是由多屏工作站服務(wù)器而不是由客戶程序完成的
  • 把復(fù)雜的數(shù)據(jù)結(jié)構(gòu) ,包括窗口 、光標(biāo) 、字體和圖形信息作為資源來維護(hù),由服務(wù)器維護(hù)資源就減少了由每個客戶程序維護(hù)的數(shù)據(jù)量 , 也減少了必須在網(wǎng)絡(luò)上傳送的數(shù)據(jù)量

從結(jié)構(gòu)的觀點看,X Server可分為三個層次:頂層是與設(shè)備無關(guān)部分,負(fù)責(zé)接收和解釋符合協(xié)議格式的客戶請求消息,中間層是與操作系統(tǒng)相關(guān)部分,這部分使能接口到特定的操作系統(tǒng);低層是與設(shè)備相關(guān)部分,這是特定支持硬件的設(shè)備驅(qū)動程序集。

圖片

X Server 通過X協(xié)議與客戶程序的X協(xié)議 xlib接口通信,有四類通過協(xié)議傳遞的信息:請求、響應(yīng)、事件和錯誤。協(xié)議請求由xlib產(chǎn)生并送到服務(wù)器,請求可以攜帶各種各樣的信息,如一個畫線說明,對當(dāng)前某個窗口尺寸的詢問等。服務(wù)器把協(xié)議對某些請求的響應(yīng)送給xlib,不是所有的請求都能通過響應(yīng)得到答復(fù),如畫圖請求就不產(chǎn)生答復(fù)。事件是服務(wù)器傳給xlib的,它含有關(guān)于某個設(shè)備動作的信息,事件是客戶程序用以獲取信息的主要手段。錯誤有兩種,一種是可恢復(fù)性錯誤,另一種是致命性錯誤,由服務(wù)器發(fā)送到xlib的某一個錯誤管理庫程序。

在這四種信息包中,請求和事件是主要的,Xlib先將請求存儲起來,不是立即送給服務(wù)器,在適當(dāng)?shù)那闆r下再送到請求緩沖區(qū)的內(nèi)容到服務(wù)器中。一旦用戶引發(fā)了事件,而且網(wǎng)絡(luò)允許,服務(wù)器就把事件送往xlib,xlib為每個服務(wù)器管理一個事件隊列,每當(dāng)來自服務(wù)器的事件到達(dá),就被排隊,等待客戶程序讀取。

7. X client

Xlib是X窗口系統(tǒng)的C語言編程接口,是向應(yīng)用程序提供底層的編程接口。Xlib把參數(shù)封裝為協(xié)議請求,通過IPC機(jī)制發(fā)送給服務(wù)器進(jìn)程。Xlib共有320多個函數(shù),可分為系統(tǒng)功能(連接的建立和拆除等)、窗口功能(窗口屬性與操作)、圖形功能(圖元、圖形屬性、正文字體、區(qū)域、圖像等)、色彩功能(顏色表操作等)、時間功能(輸入時間及窗口事件)及其它功能(使用函數(shù)等)。

X Client不用標(biāo)準(zhǔn)的 C 函數(shù)來獲取輸入,而是接收事件,然后根據(jù)事件類型發(fā)生分支,執(zhí)行適當(dāng)?shù)捻憫?yīng)。傳統(tǒng)程序是由程序控制,在確定的時間查詢確定類型的輸入。X 程序絕大多數(shù)情況是由 用戶控制,在任何時間為任何類型事件的發(fā)生做好準(zhǔn)備。

事件在 X 應(yīng)用程序編程中處于中心地位。X Client使用事件與服務(wù)器或其他客戶端進(jìn)行通信。從程序員的角度看,一個事件可以包含很多信息:

應(yīng)用程序想獲取的信息,比如用戶輸入、其他客戶端傳來的有用信息。

其他客戶端想知道你的應(yīng)用程序正在做的一些事情,比如將可用文本傳輸給第三方客戶端。

窗口管理器想知道的一些信息,比如在映射視窗時,應(yīng)用程序發(fā)送的一個想改變屏幕布局的請求報文。

X Client對事件的處理過程分為三步:首先,選擇每個視窗都需要的事件。然后,將視窗映射到屏幕上。最后,當(dāng)事件產(chǎn)生后,應(yīng)用程序提供一個事件循環(huán)(Event Loop)來從事件隊列中一一讀取事件并處理之。這個過程非常簡單,唯一復(fù)雜的因素是各種事件可能同時發(fā)生,而且同一事件在不同的視窗發(fā)生可能具有不同的意義。所以,必須要了解每個事件產(chǎn)生的特定環(huán)境來確保應(yīng)用程序會采取正確的行為來處理它。

圖片

8. X 協(xié)議

X Window系統(tǒng)網(wǎng)絡(luò)協(xié)議即X11協(xié)議定義了在客戶和服務(wù)器之間傳送信息所使用的數(shù)據(jù)結(jié)構(gòu)即信息格式定義。它是一個基于流處理通信而不是基于過程或核心調(diào)用的異步接口。X11的實現(xiàn)有許多種,其中用C語言實現(xiàn)的函數(shù)庫Xlib提供了直接訪問協(xié)議的原語,提供了信息交換的能力。

X.11.3共有120多個請求,且具有可擴(kuò)充性,描述了客戶與服務(wù)器進(jìn)程通信的結(jié)構(gòu)、語法及語義。X 協(xié)議的主要特點如下:

協(xié)議將用戶接口事件和核心窗口系統(tǒng)本身分開,就是窗口管理器與圖形用戶接口的模式,這一特點表現(xiàn)在協(xié)議本身與用戶接口的策略無關(guān)。簡而言之,接口策略即為各個窗口在顯示終端的布局,窗口大小、位置的控制,這些策略在一個高級程序中由應(yīng)用程序本身去完成。窗口的動態(tài)布局管理是由窗口管理器來完成的,這一特點有利于實現(xiàn)與操作系統(tǒng)和顯示沒備無關(guān)。

協(xié)議提供了網(wǎng)絡(luò)透明性,開發(fā)者使用協(xié)議函數(shù)而不需了解下層的網(wǎng)絡(luò)如何完成各種數(shù)據(jù)和管理信息傳輸。

為了減小網(wǎng)絡(luò)開銷,提高網(wǎng)絡(luò)性能,客戶和服務(wù)器之間的通信是異步的。也就是說,在客戶和服務(wù)器之間傳送的大多數(shù)報文不必直接由對等實體給出應(yīng)答。當(dāng)一個報文被客戶或服務(wù)器發(fā)送后,接收和處理都被默認(rèn)為正確地進(jìn)行。這個假定加快了X11的操作,因為在假定網(wǎng)絡(luò)傳輸是可靠的情況下,客戶或服務(wù)器不必等待X11應(yīng)答。實際執(zhí)行所帶來的遲延如果超過一定限度,則協(xié)議規(guī)定重發(fā)請求。

提高網(wǎng)絡(luò)性能的另一種方法是將許多相關(guān)的請求或應(yīng)答合成一組用一個數(shù)據(jù)包分組發(fā)送,這大大縮小了在網(wǎng)絡(luò)中傳輸?shù)姆纸M個數(shù)?;谶@一特點,X11協(xié)議有時也被稱為面向塊的協(xié)議,不同的實現(xiàn)解決服務(wù)數(shù)據(jù)包的分解和重組的方法有所不同。

用OSI的觀點來看,X11被認(rèn)為是一個支持分布式應(yīng)用的協(xié)議,但該協(xié)議并不提供太多的諸如中的第一層到第六層所提供的服務(wù),因此被認(rèn)為最接近應(yīng)用層。但由于X11在中存在著表示層數(shù)據(jù)表示,會話層維護(hù)一次會話,確定異步請求和應(yīng)答的特點,很多人認(rèn)為相當(dāng)于參考模型中的上三層,而其本身應(yīng)作為運(yùn)輸層上的一個模塊。另一種觀點是從嚴(yán)格的OSI七層結(jié)構(gòu)出發(fā),認(rèn)為X11僅僅能作為一個應(yīng)用層中的應(yīng)用服務(wù)元素,并將它的服務(wù)原語映射到聯(lián)系控制服務(wù)元素以及表示層服務(wù)上。應(yīng)用層映射觀點則代表了將 X系統(tǒng)映射到 OSI模型的戰(zhàn)略方向。

9. 窗口管理器

在Xwindow系統(tǒng)中,窗口管理器是一種特殊的客戶端程序,其功能是將服務(wù)器和客戶端之間的交互數(shù)據(jù)重定向到窗口管理器中,所以,窗口管理在GUI體系結(jié)構(gòu)中處于中間角色。

窗口管理器是決定X外觀風(fēng)格的重要程序,能夠改變窗口的大小或位置、將窗口在堆疊中重新安排位置、或?qū)⒋翱诟淖兂蓤D標(biāo)等等。在X中,窗口管理器類似于Linux系統(tǒng)中的shell命令行解釋器:shell只是一個用戶進(jìn)程,如果改變它也就改變了系統(tǒng)的用戶界面。

但是,窗口管理器和X的關(guān)系與shell和命令行的關(guān)系還是有本質(zhì)上的不同。簡單一點,沒有窗口管理器也可以使用X,只不過界面簡陋一點,使用不太方便;但沒有了shell就沒有了命令行。窗口管理器除了具有管理窗口的基本功能外,還改進(jìn)了界面的品質(zhì)。原來的目的是為了降低鍵盤輸入的需要,而改成盡量多地使用鼠標(biāo)。一個常見的功能是提供一個自己可以建構(gòu)的一般性菜單,只要選取一個菜單選項便可啟動窗口應(yīng)用程序。這個啟動的命令通常包含了指示應(yīng)用窗口在何處出現(xiàn)、大小多少、文本用什么顏色等等,使用者不需要輸入很多的信息便能啟動應(yīng)用程序。

窗口管理器和客戶端之間遵循ICCCM協(xié)議,大多數(shù)通信建立在父窗口的屬性之上,也可以通過窗口管理器產(chǎn)生的事件進(jìn)行通信。Shell處理客戶端和窗口管理器之間的通信,客戶端不需要直接處理屬性或事件,通過設(shè)定Shell的資源來指定窗口的屬性。

X Client 應(yīng)用程序可以最小化成圖標(biāo)。圖標(biāo)的結(jié)構(gòu)常簡單,只是窗口的代表圖案,當(dāng)系統(tǒng)圖標(biāo)化一個應(yīng)用窗口時,窗口管理器告訴 Server 不再顯示這個窗口到屏幕 上。窗口管理器通常提供預(yù)設(shè)的圖標(biāo),但是 Client 應(yīng)用程序可以提供它自己的圖標(biāo)并建議使用,有些窗口管理器接受這個要求,有些則不接受仍采用自己的圖標(biāo),只把這個需求當(dāng)作給窗口管理器的提示。 

就如同要求顯示一個特定的圖標(biāo)一樣,應(yīng)用程序也能傳遞其他的提示或信息給窗口管理器,這包括:

  • 應(yīng)用程序和圖標(biāo)窗口的名稱
  • 當(dāng)應(yīng)用程序和圖標(biāo)窗口被建立時?它們在屏幕上的位置信息
  • 對窗口大小的限制(例如x?Client可以要求“所占用的窗口長度/寬度不得少于多少”)
  • 對窗口重定大小的特別要求

這種將信息傳遞給窗口管理器的機(jī)制稱之為屬性機(jī)制。大部分重定大小或圖標(biāo)化的工作是通過窗口管理器實現(xiàn)的,這是因為它是一個公有的 Client。從理論上來說,任何Client均可隨意重定自己的大小,但如果所有Client都這樣做,便會造成不必要的混亂。因此,要這些應(yīng)用程序和平共存的原則是:不要自行重定大小,把它交給窗口管理器也就是讓用戶去決定。

窗口管理器負(fù)責(zé)以下3個核心任務(wù):

  • 接受窗口進(jìn)入的消息,并使消息正確路由至目的窗口并觸發(fā)窗口過程;
  • 更新活動窗口和焦點窗口控件;
  • 維護(hù)窗口的序列和各個窗口的剪切矩形鏈,正確進(jìn)行窗口重繪,執(zhí)行窗口過程。

當(dāng)使用窗口管理器時,服務(wù)器并不直接和其他客戶端通信,而是通過窗口管理器中轉(zhuǎn),當(dāng)一些消息被定義為WM指令時,它們會被攔截。

X Window努力做到和桌面(Desktop Enviroment)分離, 但還是出現(xiàn)了很多功能上的重合,很多桌面提供者都開始自己制作窗口管理器,并與桌面直接捆綁在一起,例如GNOME 和KDE。

圖片

KDE的價值不僅在于它包含了窗口管理器、文件管理器、工具面板、控制中心以及其他用戶想得到的現(xiàn)代桌面系統(tǒng)應(yīng)包含的組件,其真正的力量體現(xiàn)在內(nèi)部各組成部分之間的互操作能力。KDE試圖建立一個桌面環(huán)境,而不只是一個窗口管理器。KDE達(dá)到了令人驚訝的成熟程度,但由于KDE基于的QT庫的許可證問題,有些人拒絕使用它。所幸的是QT庫已開放源代碼,但好像還是沒有變成是基于GPL的方式。

GNOME是GNU網(wǎng)絡(luò)對象模型環(huán)境的縮寫,項目的目標(biāo)是在完全基于免費(fèi)軟件的基礎(chǔ)上建立一個完整的、用戶友好的桌面環(huán)境。GNOME是GNU項目的一部分,同時也是開放源碼運(yùn)動的一部分,包含一組有一致外觀的小工具和大的應(yīng)用,所有應(yīng)用程序都使用GTK+作為其GUI工具箱。GNOME并不與某個窗口管理器綁定,它的組件之間的互操作性不限于應(yīng)用,而是可以跨越計算機(jī)和系統(tǒng)平臺,因為它采用了公共對象請求代理結(jié)構(gòu)(CORBA)。同時,它基于的GTK+庫是完全免費(fèi)且開放源碼的,這和Linux的哲學(xué)一致。

10. 從X 到 Wayland

X11已經(jīng)很古老了,X server協(xié)議提供的大部分功能不再使用,X11所做的幾乎所有工作都重新分配給了各個應(yīng)用程序和窗口管理器。

Wayland 由X Org開發(fā)人員Kristian Hogsberg于2008年作為個人項目開始。它是一種通信協(xié)議 ,用于指定顯示服務(wù)器與其客戶端之間的通信。Wayland最初是作為一個免費(fèi)的開源項目開發(fā)的,目的是用現(xiàn)代、安全和簡單的窗口系統(tǒng)代替X11。

圖片

在Wayland中,Compositor是一個窗口管理器,它為應(yīng)用程序提供每個窗口的屏幕外緩沖區(qū)。窗口管理器將窗口緩沖區(qū)合成為代表屏幕的圖像,并將結(jié)果寫入顯示內(nèi)存。Wayland協(xié)議允許合成器將輸入事件直接發(fā)送到客戶端,并讓客戶端將事件直接發(fā)送到合成器。與X情況一樣,客戶端在接收到事件時會作為響應(yīng)更新用戶界面。但是,在Wayland中,渲染發(fā)生客戶端,并且客戶端只是向合成器發(fā)送請求以指示已更新的區(qū)域。Wayland的”直接渲染架構(gòu)”徹底結(jié)束了傳統(tǒng)X 系統(tǒng)在渲染圖形時需要不停的向Server請求、確認(rèn)再繪制這個繁瑣的過程,理論上響應(yīng)速度有了本質(zhì)的增長。

圖片

也就是說,Wayland從根本上消除了”Server+Compositor”的重復(fù)勞動,僅有且只需要有一個”Compositor”合成器而已。Wayland Compositor的角色,就像是”X Server”+”Window Manager”,但它只做自己分內(nèi)之事而已。Wayland構(gòu)架簡單高效,試圖解決”X Window”發(fā)展這么多年來積累的、通過“擴(kuò)展”去解決的那些問題。

但是,到目前為止,現(xiàn)有的絕大多數(shù)應(yīng)用程序都是為X編寫的。在移植所有這些應(yīng)用程序之前,需要維護(hù)Xorg,與Xorg相比,Wayland還不是很穩(wěn)定。

?【參考資料】 

https://www.x.org/wiki/

https://wayland.freedesktop.org/

https://en.wikipedia.org/wiki/Wayland_(display_server_protocol)

http://www.gnome.org

http://www.kde.org

https://blog.csdn.net/a8039974/article/details/122867167


責(zé)任編輯:武曉燕 來源: 喔家ArchiSelf
相關(guān)推薦

2024-05-13 10:27:37

DevOps云技術(shù)IT

2019-01-14 15:31:42

HTTP23

2023-04-02 23:22:04

GPU流水線體系

2022-11-15 07:30:04

EverDB云端alive

2022-10-25 07:23:45

2022-10-18 07:17:31

2022-11-01 07:25:27

EverDB數(shù)據(jù)庫SQL

2013-08-20 10:40:54

EIGRPOSPF區(qū)別

2018-11-09 11:10:11

微軟沈向洋人工智能

2022-11-08 07:20:55

EverDB混沌測試

2023-01-03 00:00:17

2020-07-13 11:00:06

前端JavaScript自測清單

2020-04-14 11:48:59

密碼網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全

2014-01-23 16:24:09

網(wǎng)易郵箱

2023-11-01 10:38:46

Linux高性能網(wǎng)絡(luò)編程

2024-07-08 12:03:41

2020-09-04 07:33:12

Redis HashMap 數(shù)據(jù)

2011-04-12 09:53:32

Spring

2016-10-26 22:32:34

曙光

2011-09-05 10:31:10

Ubuntu 11.1Ubuntu
點贊
收藏

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