X Window System的一些概念

Linux/Unix系統下的顯示模式都是採用X的架構,這裏說明一下,其實我們常說的X其實不是現實設備,而是現實協議,Xserver和Xclient通過X協議進行交互,由Xserver對目標設備進行顯示,然後Xserver把中間的信息和用戶反饋的信息發送給Xclient。可以這樣形容:
Xserver:負責終端設備的顯示。並告知Client發生了什麼
Xclient:負責告訴Xserver顯示什麼,通過server告訴的“發生了什麼”,做相應的處理。

Display :
  若干個屏幕(screen)以及一套輸入設備(鍵盤和鼠標)構成一個display,display概念的關鍵就是有一套完整的輸入輸出。屏幕不一定必須是一個,可以有多個,各個屏幕可以用來顯示相同的內容,也可以用來構成矩陣顯示一個大屏幕的內容。
  一個x server可以支持多個display。
Screen :
  Screen的層次在display之下,是x server顯示管理的次級單位。一個screen對應一個根窗口(root window),根窗口的大小與screen相同。如果在命令行執行"X"的話,啓動了x server,這時在屏幕上看到一個單調的桌面,以及一個"X"形的鼠標,不過因爲沒有啓動window manager,所以什麼都不能做,只能動動鼠標。這時你看到的這個單調的“桌面”正是根窗口。
Window :
  Window是比screen還要小一級的概念了。Window是有樹形繼承關係的,每一個屏幕上都對應有一個“窗口樹”,樹的根就是root window,即根窗口,它沒有父窗口;除此之外,所有window都有父窗口。一個窗口還可能有子窗口,但並不是必須的。


  Xlib把應用程序的圖形操作轉換爲發送給x server的請求,xlib與xserver之間的通信是異步的。當應用程序調用Xlib與xserver通信時,xlib不會每次都立刻把請求發送出去,而是把請求進行排隊,放在一個緩衝區裏,當某種條件被滿足時,再一次性地把多個請求一起發出。
  如果應用程序需要馬上得到響應的話,可以調用類似於SYNC之類的xlib接口來強制清空緩衝。
  因爲與server之間是通過網絡來通信的,所以Xlib並不能保證請求立刻就能到達server,因爲可能有網絡的延時;即使到達了,也不能保證server立刻就處理請求。
  從server到xlib的消息一般是event,應用需要處理這些event。同樣,event的傳遞也是異步的,會有排隊也會有網絡延時。

關於資源,當應用調用xlib創建某種資源時,比如window, font, pixmap, colormap, cursor或gcontext時,會返回給應用一個ID,而資源本身是在server上的。這些資源是有可能在應用之間共享的,其中是font和 cursor是自動被同一display上所有screen的所有window共享的。

  關於error。有兩種,一種是調用xlib時的返回值錯誤,如果函數調用失敗的話,一般的xlib函數會返回0;另一種是error是由server發出的,在與xlib通信中,如果發現了錯誤,按照x protocol的規範,server會發error到xlib,進而到達應用程序,應用程序需要處理這樣的錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章