歡迎您光臨本站 註冊首頁

X WINDOWS 系統使用指南(二)

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  第3章 從使用者介面的面貌概觀X

在本章,我們將觀察重點擺到系統控制的使用者介面,例如,系統如何顯示有人使用它,以及包含那些結構等。

X設計的目標之一就是能支援許多不同型式的使用者介面,一般其它的視窗系統提供特殊的交談方法,而X則提供一般性的架構,讓系統建立者(system builder)據以建造所需的交談的風格。例如,在一個X系統中你可藉從選單中選一個動作來構建視窗,但其他對視窗的操作則全靠滑鼠來做,這種彈性允許系統開發者(developers)完全在X的基礎上產生全新的介面,也因為介面並未內建於視窗系統,因此使用者在任何時刻根據他們特別的需求可選用適當的介面。例如,對於完成一些相同的工作 -- 建立、移動、重定大小螢幕上的視窗,初學者較老手喜歡簡單的系統,而X可分別提供最適合他們的使用者界面。

使用者界面分為兩個部份:

管理界面:命令最高層的視窗如何在螢幕上建構或重建構(re-configured),也就是說,如何管理你的案頭。

應用界面:決定你和應用程式間交談的」風格」(style): 你如何利用視窗系統的設備程式來控制應用程式及輸入資料給它。


3.1 管理界面:視窗管理器

管理界面(management interface)是系統的一部份,用以控制你螢幕上最上層的視窗(換句話說:如何重新建構你的案頭),這個部份在系統中稱之為視窗管理器(window manager),它的功能有改變視窗的大小或位置、將視窗在堆疊 (stack)中重新安排位置、或將視窗改變成表徵圖 (icon) 等等。

在X中,視窗管理器只是另一個client程式而已,它以及系統介面的發展,和server是完全分開的,因此你可以更換它們,這類似於Unix系統中的shell命令列直譯器(interpreter) :shell 只是一個使用者處理程式(process) ,如果你改變它,你也改變了系統的使用者介面。


3.1.1 手動的和自動的視窗管理器

有兩類的視窗管理器:手動的和自動的。手動的視窗管理器,視窗在螢幕上的位置和大小完全由使用者控制,手動的視窗管理器只是使用者用來完成工作的工具,大部份的手動視窗管理器允許應用視窗重疊。

相對的,自動的視窗管理器儘可能的由它自己來控制案頭,對於螢幕的布置儘可能讓使用者少插手。它在新建立一個視窗時自動決定視窗的大小和位置,和當視窗移動時如何重新安排其餘的視窗,通常自動的視窗管理器將螢幕分成一塊塊像磁磚一樣(tile)的區域,也就是說安排應用視窗彼此不會重疊,而且盡量佔用最多的螢幕空間。

手動的視窗管理器如何工作 -- 攫取(Grabbing)

通常當你告訴手動的視窗管理器你要完成什麽動作時,是藉著使用選單或者結合了按滑鼠的按鈕和移動指標,例如,重新擺放一個視窗的位置,你可以移動指標進入視窗,按住左邊的按鈕,移動指標然後在新位置鬆開按鈕,視窗管理器是如何知道這些滑鼠 "事件" 的意圖的?或是換個角度,server是如何知道 "事件" 是來自應用視窗或視窗管理器?

答案是由視窗管理器告知server有哪些特定的 "事件" (碰觸按鈕等等)需要被送達,這和哪一個視窗發生的無關,這種處理稱之為攫取(Grabbing),視窗管理器可以指定哪一個滑鼠按鈕希望被攫取,而這攫取發生在滑鼠的按鈕被按下且鍵盤上一些特定的鍵(一般稱為修飾鍵(modifer) )也被按住(例如當CONTROL 和SHIFT 兩個鍵被按住時且滑鼠中間的按鈕被按下),當按鈕被按下時,攫取開始動作,server送出所有滑鼠的事件(包括滑鼠的移動事件)到視窗管理器直到按鈕再度鬆開,視窗管理器把這些 "事件" 的資料解釋成來自使用者的指令來工作。以移動視窗為例,視窗管理器在按鈕按下時被告知指標的 位置,而當按鈕鬆開時再度被告知,對指標的位移做一些簡單計算便可據以移動視窗。

有一件事需要使用者配合,那就是滑鼠和修飾鍵組合而成的攫取不應該為應用程式所知道,所以必需確定視窗管理器這種攫取鍵的組合不會和應用程式衝突,大多數的視窗管理器可以很容易的定義這些攫取的組合鍵,而保留給它自己使用。


3.1.2 視窗管理器額外提供的功能

視窗管理器除了具有重新建構視窗的基本功能外,也提供額外的功能改進介面的品質,通常,加入額外功能的目的是為了降低鍵盤輸入的需要,而改成盡量多用指標。

一個常見的功能是提供一個你自己可以建構的一般性選單,這樣你只要選取一個選單選項便可啟動視窗應用程式。這個啟動的命令通常包含了指示應用視窗在何處出現,大小多少,本文用什麽顏色等等。所以應用程式不需要太多的使用者輸入便能啟動。一個常見的選單用法為當你在網路上工作時,你可以定義一個選單列出所有你在網路上可用的主機,如此你便可藉著在選單上選擇主機名稱便能和任一主機建立連接。


3.1.3 視窗管理器和表徵圖

當一個視窗轉換成一個表徵圖時,表徵圖是如何來的?視窗又發生了哪些事?

表徵圖的結構非常的簡單,它只是視窗的代表圖案,當系統表徵圖化(iconify)一個應用視窗,視窗管理器只是不對應出(unmap) 這視窗(也就是說,告訴server不再顯示這個視窗到螢幕上)而把表徵圖視窗對應出來。解除表徵圖化(deiconify)則把上述的處理反過來。視窗管理器可以辦得到的原因是它沒有」 存取控制」(access control)或許可限制來防止一個client(例如視窗管理器)不對應出其它的client的視窗,所有在同一個server上的client都可以對任意視窗或多或少做一些動作。

視窗管理器通常提供預設的表徵圖,但是client可以提供它自己的表徵圖並建議使用它,有些視窗管理器接受這個要求,有些則忽略不接受仍用自己的表徵圖,只把這個需求當作給視窗管理器的暗示(hint)。

當應用程式被表徵圖化,它的主視窗便不再被對應出來,如果視窗管理器因任何理由中斷了,則這個視窗永遠也無法再對應出來了。要避免這點,當視窗管理器表徵圖化一個視窗時,它把這個視窗加入一個名為save set的名單中,這個名單由server負責維護,如此當視窗管理器被中斷時便可重新對應出來。


3.1.4 應用程式傳遞建構資訊給視窗管理器

就如同要求顯示一個特定的表徵圖一般,應用程式也能傳遞其它的暗示或建構資訊給視窗管理器,這包括:

. 應用程式和表徵圖視窗的名稱。

. 當應用程式和表徵圖視窗被建立時,它們在螢幕上位置的資訊。

. 對視窗大小的限制(例如,client可以宣告」我所佔用的視窗大小絕不可小於寬度若干x 長度若干」)。

. 對視窗重定大小的特別要求(例如,一個顯示本文的視窗,可以要求在重定大小時按特定的間隔放大或縮小,以使得視窗內的字元永遠是完整的一個,不致視窗邊框的那一行 (列) 有半個字的情況出現。)。

這種將訊息傳遞給視窗管理器的結構稱之為性質結構(property mechanism),下一節我們會討論它。

我們可以注意到大部份重定大小或表徵圖化的事是由視窗管理器做的,這是因為它是一個公有的client,任何client均可隨意重定大小,但如果所有client都這樣做,便會造成混亂,因此要這些應用程式和平共存的原則是:不要自行重定大小,把它交給視窗管理器,也就是讓使用者去決定。

在第6章中我們會看到一個視窗管理器uwm 如何使用。



3.2 應用程式介面和工具箱

應用程式介面決定了使用者和應用程式間交談的風格,舉例來說,如何用指標選一個選項等,X不提供標準的應用程式介面,只提供基本的結構以便建造它們。

當那些具有一貫性的應用程式介面被放在一起,便叫做工具箱(toolkit),它是基礎視窗系統軟體中最高最有效率的層次,較低層次的細節,被隱藏起來,因此簡化程式和維持介面的一貫風格變得容易執行,當使用者控制應用程式時好像有一套」虛擬文法(virtul grammer)」一般,需要注意很重要的一點是,工具箱在編譯程式的時候被指定,所以一個client的應用程式介面在編譯的時候就被決定了,如果不重新編譯便無法改變。

MIT 版的X大多數的應用程式均使用標準的工具箱和一套來自MIT 的工具箱軟體構成要素,這造成你可以得到一致性的介面。除此之外,有些結構更提供了定製的應用程式操作方法和設定它們的預設值。


3.3 其它的系統面貌

在本節中,我們討論將應用程式之間傳遞資訊所用的性質結構(property mechanism),視窗的樹狀階層組織,和X不包含在作業系統中的優點。


3.3.1 client之間的通訊 -- 」性質」

client和server之間的通訊是藉著送出 "需求" 和接收 "事件" ,但有時client需要和其它的client傳遞資訊,例如,正常的應用程式需要告訴視窗管理器它的位置和大小,這就需要X的性質結構了。

」性質」是一小段資料的名稱,這一小段資料存在server中且關聯到一個特定的視窗,任何client均可向server查詢某一特定視窗」性質」的值。

讓我們看一個client如何把它所喜歡的表徵圖名稱傳遞給視窗管理器的範例:client把表徵圖名稱存到這個視窗的WIM_ICON_NAME 」性質」去,當視窗管理器執行表徵圖化這個應用視窗時,它會去找這個應用視窗的WIM_ICON_NAME的」性質」,而後顯示」性質」中的表徵圖名稱。

應用程式也可以和不是視窗管理器的其它的應用程式通訊,一個常見的例子是在分屬不同應用程式的視窗之間做剪貼(cut-and-paste) 操作,一段本文從一個應用程式中」切下」(cut) 稍後再」貼」到另一個應用視窗,」性質」在此被用到,」性質」依序編成」CUT_BUFFER0」,」CUT_BUFFER1」…等等,所有的應用視窗便可藉此交換資料。

最後一個例子是稱為resources 的」性質」,它被用來定義應用程式的預設值設定,在根視窗(root window) 中有一個名為RESOURSE_MANAGER的性質存放著所有設定的名單,它會被所有的應用程式存取,用來做是否要執行任何設定的依據。


3.3.2 在X中視窗的階層性

本節描述視窗在系統中的組織及如何建立,和對應用程式的影響。

所有在X中的視窗都可視為一個樹狀結構階層 (hierarchy)的一部份,樹的根部便是根視窗,涵蓋了整個螢幕,應用視窗都是根視窗的子代(children),上層的視窗可以擁有它自己的子視窗,圖3-1 有兩個應用視窗。

┌———————————————┐
│ p34 fig 3.1 (???) │
│ │
│ 圖3-1 在螢幕上重疊的視窗 │
└———————————————┘

」paint 」程式包含了一個被當做選單用的子視窗,對每一個選擇又有一個子視窗對應,相關的視窗樹見圖3-2 。

┌———————————————┐
│ p35 fig 3.2 │
│ │
│ 圖3-2 視窗的樹狀結構階層 │
└———————————————┘

在X的設計理念下,製造一個視窗非常容易,你可以利用視窗來控制選項,像選單、捲動棒(scrollbars)、控制鈕(control button)等等,即使是大量也無妨,例如像試算表中的一個cell等。這種觀點從程式設計師的角度大於使用者,但的確對使用者當他」定製」(customising) 特定的程式時有影響,在本章以後的章節會再度提到。

為了允許應用程式有子視窗,X提供了大量的設備程式供client程式使用,如此不但能達成一致性,也避免了相同的需求造成了重複的工作,例如像圖3-1的下拉式選單,可以在應用程式中以一致子視窗完成,這個子視窗有它們自己的選單選擇方框(pane),和用以偵測使用者碰觸滑鼠按鈕的標準結構,如果沒有子視窗,複雜的程式和輸入處理將無可避免。

子視窗的位置和大小並不受父視窗的限制,子視窗可大可小,可以大過父視窗或只佔父視窗的一部份,但是它會被父視窗剪裁(clipped) ,也就是說,子視窗所有超出父視窗的部份將會消失不見。見圖3-3

┌———————————————┐
│ p36 fig 3.3 (???) │
│ │
│ 圖3-3 受父視窗限制的子視窗 │
└———————————————┘

在實際的應用上,你可以將上層的視窗定義成幾乎佔住整個螢幕,就不必擔心子視窗有些部份會看不到了。

另外一種方式就是把下拉式選單定義成為根視窗的子視窗,如此選單便可以比應用視窗還大,如圖3-4

┌————————————————┐
│ p36 fig 3.4 (???) │
│ │
│ 圖3-4 選單比用它的應用視窗還大 │
└————————————————┘


3.3.3 X不是深植於作業系統

不像其它大多數的系統,X並非深植(embedded)於作業系統中,而只是比使用者層次稍高而已。更精確地說,X不需要深植於系統,雖然有些製造廠商可能是為了效率(performance) 的理由將server和作業系統結合在一起,但不深植於作業系統的結構有下列利益:

.易於安裝和改版,或甚至去除。這種工作不需要重新啟始系統,也不會對其它應用程式造成干擾。

.第三集團很容易支援加強它的功能。例如你的製造廠商提供的系統不夠好,你可以向別人買更好或更快的版本。

.X不會指定作業系統,因此成為一種標準,這也是第三集團發展軟體的原動力。

.為了發展者利益。在server上發展工作時,當程式當掉只會當掉視窗系統,不會造成機器的損壞或作業系統核心的破壞,沒有作業系統核心碼的程式也較易除錯。


3.4 結論

在本章中我們描述了許多X提供的使用者介面,我們介紹了你用以管理案頭的程式 -- 視窗管理器的概念,也描述了被用來做使用者和client應用程式間交互作用的設備程式。我們介紹了用來做client間通訊的性質結構,X視窗的階層結構對系統的影響,最後對視窗系統不深植於作業系統的好處做一摘要。

本章所強調的著眼點,在於針對你每天都用到的視窗系統的部份作一整體性的概觀,了解這些將幫助你學習得更快,更能好好地運用系統。

本書第一部份 -- 系統概觀就此結束,下一個部份將告訴你如何實際使用系統。

第4章 術語和符號

本書大部分使用的術語是在第一次碰到時再作解釋,但有些術語我們認為應該先在本章作一個介紹,此外在本章中我們介紹了一些本書使用符號的習慣,以及本書中所有範例所使用的機器場景 (scenario).


4.1 術語

在X中,一個視窗 (WINDOW) 是指螢幕上的一塊長方形區域,它的邊平行於螢幕的邊,大多數的視窗以一種顏色作為背景色 (background),而以另一種顏色作為前景色 (foreground),例如一個典型的文字視窗,背景色為白色,前景色 (也就是文字本身) 則為黑色.視窗可以有一個邊框 (border),通常邊框的顏色和背景色不同. 有些視窗在視窗上方可能有一個標題棒
(title bar) 或控制棒 (control bar), 在某些情況下用以顯示有關這個視窗的資訊, 你可以對控制棒作某些固定的動作來管理視窗. 系統會顯示一個指標 (pointer,有時也稱為游標 (cursor))在螢幕上, 當你移動滑鼠, 整個螢幕只有一個指標在對應移動. 相對的, 螢幕上許多文字視窗擁有自己專屬的文字游標, 這些游標通常指示你輸入文字的位置. 以上的術語可由圖 4-1
來解釋.

┌———————————————┐
│ p. 42 圖 4-1 (???) │
│ │
│ │
│ │
│ 圖 4 - 1 視窗的元素 │
└———————————————┘


geometry -- 位置和大小

X用到一些幾何學的術語來說明一個視窗的位置和大小, 大部份的X程式接受一個含有geometry的命令列 (command line) 來啟動 (stratup)它們, 這個命令列說明了這個程式的視窗有多大, 以及在螢幕的哪一個位置顯示
. 通常geometry的格式如下:

寬度 x 高度 + X偏移量 + Y偏移量

寬度和高度的單位為像素 (pixel,螢幕上的一點) 或字元 (character), 視應用的狀況而定, 程式的說明通常會告訴你用什麽單位. 上述的式子是說明建立一個大小為寬 x 高 的視窗, 視窗的位置為左邊框距螢幕左邊界 X偏移量個像素, 上邊框距螢幕上邊界 Y偏移量個像素. 例如假設一個程式以字元為視窗大小單位, 則格式

80 x 24 + 600 + 400

的意義為: 建立一個 80 字元寬 24 字元高的視窗, 並且視窗的左邊框距螢幕左邊界 600個像素, 上邊框距螢幕上邊界 400個像素.

如果需要的話, 也可以只指定大小或只指定位置, 程式對未指定的部份會使用預設值 (default value), 或給你一些提示, 視實際在系統中執行的狀況而定.


滑鼠和指標的術語:

有一些輸入裝置會在執行X時在顯示器上指出螢幕上你有興趣的項目或區域,通常為一個有數個按鈕 (button) 的滑鼠 (一般為三個按鈕,分別稱為左按鈕, 中按鈕, 右按鈕).當你移動滑鼠, 系統會對應地移動螢幕上的指標.接下來, 我們對滑鼠上的三種操作術語作一嚴謹的定義:

碰觸按鈕 (clicking a button): 按下滑鼠的按鈕隨即鬆開, 按鈕被按下的時間, 僅有一瞬間而已.

按住按鈕 (pressing a button): 將滑鼠的按鈕按下, 且一直保持按住按鈕的狀態.

鬆開按鈕 (releasing a button): 將先前按住的按鈕鬆開.

通常碰觸按鈕被用來指定螢幕上的一個物件, 按住按鈕再鬆開按鈕 (一般在這期間會移動滑鼠) 往往用來移動或描繪一塊區域.

拖拽 (dragging) 一個物件: 利用指標指定一個物件, 按住按鈕, 保持按住狀態移動指標直到某處再鬆開按鈕。做這種操作時, 系統通常有一些方式來表示物件被移動, 例如在拖拽一個物件的期間, 系統會將物件周圍加上一個細線的方框.

我們常常利用拖拽方式來改變一個物件的大小, 通常系統顯示方框, 根據你的拖拽動作改變大小, 此種方法叫作橡皮筋法 (rubber-banding). (因為方框好像用橡皮筋做的一樣.)

在本書的圖形表示法中, 我們用一個下箭頭表示按鈕被壓住, 虛線表示滑鼠 (指標) 的移動, 上箭頭表示鬆開按鈕, 見圖 4 - 2


┌———————————————————┐
│ 43 頁 , 圖 4 - 2 │
│ │
│ │
│ │
│圖 4 - 2 滑鼠拖拽的圖形表示法 │
└———————————————————┘

鍵盤的術語:

標準的終端機鍵: SHIFT, DELETE, BACKSPACE, ESC 或 ESCAPE, RETURN, CAPSLOCK.

游標控制鍵: 采有上下左右箭頭的鍵, 如 UP, DOWN, LEFT, RIGHT.

特殊鍵: 壓住CTRL或CONTROL 鍵, 再按其它的鍵 (例如 A鍵),用CTRL-A表示, 有些終端機有META鍵, 也同樣的用META-A表示.



4.2 符號

連續數列

在一些情況下, 你輸入的命令列或系統輸出的文字, 因為太長而無法在同一列而必需分為數列, 如果它是shell 命令, 或是一段 C語言程式碼, 我們在第一列的最後加上一個倒斜線(backslash"")後, 在下一列繼續, 例如:

mkfontdir/usr/lib/X11/fonts/misc
/usr/lib/X11/fonts/15dpi
/usr/lib/X11/fonts/100dpi

然而極少數的情況下, 我們用符號 "(contd.)" 表示本列因排版限制的緣故在下列繼續,如:

PID TT STAT TIME COMMAD
1901 c0 S 0:01 x :0
1902 c0 S 0:01 xterm -geometry +1+1 (contd.)
-n login -display unix:0 -c
1903 p1 S 0:00 -sh (csh)

當X裝設時, 需要定一些目錄樹 (directory tree). 我們把目錄樹的頂端定為$TOP, 在我們的系統中, $TOP對應的目錄為 /usr/local/src/X11,相同地,家目錄 (home directory) 參考自 $HOME。



4.3 本書範例的場景

本書使用大量的範例來說明,這些範例是假設我們在一個擁有下列機器的網路下工作:

venus 彩色螢幕,普通解析度
saturn  單色螢幕,普通解析度,檔案工作站(file server)
mars   彩色螢幕,高解析度
neptune 非圖形螢幕,擁有磁碟儲存裝置,電腦工作站(computer server)

我們所擁有的工作站是 venus,大部分的時間我們使用它,當我們需要更高的解析度或在單色螢幕檢查某些情況時,我們會使用 mars 或 saturn,當然,我們會在我們自己的工作站,以遠端(remote)的方式使用所有的機器.

saturn是 venus和 mars 的檔案工作站, 三者之間共享相同的檔案系統,( 例如,它們存取檔案 $HOME/.login 時,實際上是同一個檔案) .neptune

擁有它自己的檔案系統,不和其他的工作站共享.



4.4 本書使用的工作站架構

在本書中,所討論的一些範例、程式名稱、程式碼的片段可能和你系統的有些差異,那是因為系統不同的關係,本書假設使用的系統為:

.硬體:SUN 3/50 工作站,三個按鈕的滑鼠,螢幕大小為 1152x900個像素,單色螢幕。

.作業系統:SunOS 3.4, 以 BSD 4.2 Unix 為基礎。

.視窗軟體:X的 MIT標準版,第11版第3 次發行。



[火星人 ] X WINDOWS 系統使用指南(二)已經有520次圍觀

http://coctec.com/docs/linux/show-post-69978.html