歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

X Window 系統使用指南--18


第18章 鍵盤和滑鼠 -- 對應和參數
在前章我們看到了Toolkit 所提供的轉譯結構,它讓你對一個應用程式的個別
成員,定制你的鍵盤和滑鼠。在本章,我們來看另一種較低層次的定制,它是
由server所管理,稱之為對應(mapping) ,你只需要告訴server你的鍵盤所需
的不同的配置,它就會被每一個連接到你server上的應用程式應用到。例如:
取代通常的QWERTY鍵盤,你可能希望重新安排鍵盤以適應那些對鍵盤並不熟悉
的使用者 (你可能把鍵盤按ABCDEF... 重新排過,當然鍵盤按鈕上所印的字也
需更改成相符)。你也能對一些Control,Shift等等的修飾鍵作指定。對滑鼠
按鈕,一樣有一個相關的對應,可將 "邏輯的" 按鈕對應到實際動作。整體而
言,你使用這些鍵盤和滑鼠的對應的頻率,將小於轉譯。
此外,尚有非常常用的第三種型態的定制可用:你可以設定有關你鍵盤和
滑鼠各種不同的參數。例如響鈴聲音的大小,按下鍵時是否有滴答聲等等。
在本章,我們先描述鍵盤、滑鼠和修飾鍵的對應,接下來描述你如何使用
xset程式,來定義類似像鍵盤有無滴答聲的參數設定。
18.1 鍵盤和滑鼠對應 -- xmodmap
server本身處理一個層次的定制,它對於所有使用到此server或顯示器的應用程
式均發生效用:這就是鍵盤對應 (keyboard mapping)。
每一個鍵,有一個單獨的碼對應它,稱之為鍵碼(keycode)。鍵和鍵碼之間
的關系是絕對固定的。 (粗略來說,你可以說 "鍵碼就是鍵")。
連接到每一個鍵碼 (或鍵)的是一個keysym的表列。一個keysym是一個代表
印在鍵盤符號上的數字常數。在預設的情況,大多數的鍵只有一個keysym 與之
對應,例如 SHIFT,A,B,Delete,Linefeed等等。keysym既非ASCII或EBCDIC
字元,也非server用以維持keysym和字元的關系。你可以對每一個鍵有兩個
keysym。在預設對應中,有很多連接到兩個keysym的鍵,例如冒號(:) 和分號(;)
,7 和 &等等。對一個鍵附屬的keysym表列中,第一個keysym是未按下修飾鍵
的狀況下的鍵。第二個keysym是指當SHIFT (或Lock)已被同時按下時的鍵,如
果在表列中只有一項,且為字母,則系統自動假設第二項為相對的大寫字母。
超過兩項的keysym並沒有特別的意義,鍵盤和keysym之間的關系被稱之為鍵盤
對應。
盡量地以server處理一般的鍵和keysyms 。它對鍵碼沒有附屬意義,且它
自己本身不會使用對應從鍵碼對應至keysyms :它只是傳遞資訊給client應用
程式。特別的是,server對ASCII 或其它的字元集合 (character sets) 毫無
概念;它只是說明 "某鍵被按下,某修飾鍵也同時被按下,keysym表列中某
keysym和某鍵相關" 。它是client (典型的使用標准的X Library) 對keysym
和修飾鍵附屬的意義:例如,它決定如果keysym產生時ctrl也被按下,它必需
被解釋為ASCII 字元 hex 0x1,也就是說ctl-A。 特定的client可以決定特殊
的修飾鍵的意義;例如在xterm 中,當你和MTEA鍵同時按下一個鍵,程式將此
轉換為ESC 後面跟隨著被按下的字元。 (也就是說,如果你按下meta-A,實際
上會產生兩個字元 ASCII 0x1b, ASCII 0x41)。
server在此領域內提供一個額外的設施。你可以定義讓server將鍵碼解釋
成修飾鍵,例如 "當鍵碼為若干的鍵被按下時,它相同於CONTROL修飾鍵被實際
按下"。這種定義並不互斥:如果你定義鍵F7為Shift 修飾鍵,它並不會影響任
何現存的修飾鍵。此種設施稱之為修飾鍵對應 (modifier mapping)。X提供八
個修飾鍵:Shift、Lock(caps-lock)、Control、Mod1到Mod5。習慣上,Mod1被
解釋為Meta。
最後,對滑鼠按鈕有一個類似的指標對應 (pointer mapping)。對每一個
實際的按鈕,你可以對它們指定一個相關的邏輯按鈕數字。
實際上,如果你改變你的鍵盤或滑鼠的對應,你相當於是說制造廠商對你
的輸入裝置配置不當,你將把它修正為適合你所需要的。當然,如果你改變了
對應,你應該把對應鍵上面所印的符號也隨之修改;不過,通常更改的都是一
些控制和修飾鍵,所以就不是那麽需要了。換句話說,如果你改變了對應,使
得鍵盤配置和一個特定國家標准 (例如:法國或德國) 相符,你必需更換實際
鍵盤上的符號。
你可以預期得到,改變鍵盤對應是一件相當稀罕的事,你可能設定它一次
之後就不再改變它。在以下幾節,我們將很快的看一看如何使用程式xmodmap
,查看現有的對應和修改它們。
18.1.1 查看現有的對應
你使用xmodmap 來列出現有的對應,就如同改變它們一樣。你可以指定不同的
命令列選項,來選擇想要印出的不同的對應:
列出現有鍵的對應:指定 -pk選項。
列出現有修飾鍵的對應:指定 -pm選項 (或是什麽選項也不選,因為這是
xmodmap的預設作用)。
列出現有指標 (按鈕)的對應:指定 -pp選項。
例如,將所有的對應一起印出,使用命令:
xmodmap -pm -pk -pp
列出鍵、修飾鍵、指標的對應之□例如圖18 - 1,18 - 2,18 - 3。(鍵對應只
有列出一部份,因為完整的對應實在太長了。)
┌————————————————————┐
│ p228 fig 18.1 │
│ │
│ 圖18-1 列出鍵盤對應的□例 │
└————————————————————┘
┌————————————————————┐
│ p229 fig 18.2 │
│ │
│ 圖18-2 列出修飾鍵對應的□例 │
└————————————————————┘
┌————————————————————┐
│ p229 fig 18.3 │
│ │
│ 圖18-3 列出指標對應的□例 │
└————————————————————┘
18.1.2 執行 xmodmap 改變對應 -- 一般性選項
當xmodmap 用來改變或設定對應,它可以處理一或多個表式 (expression) 的
作用。你可以把這些輸入在一個檔案中,假設此檔案名稱叫myfile,可用下列
命令兩者之一:
xmodmap myfile
xmodmap - 第二列的短橫線是必需的,如果少了它,程式將只完成預設的作用 (列出修飾
鍵的對應) 。除了在檔案中輸入規格之外,你也可以在命令列中用 -e 選項直
接指定它們:
xmodmap -e expression
xmodmap -e expression-1 -e expression-2
為了得到更多有關xmodmap 作用的資訊,可以指定冗贅 (verbose)選項,-v 或
-verbose。你可以藉著使用 -n 選項不實際的改變對應而獲得相同的列印輸出
(printout) 。 (此功能和Unix中make命令的 -n 選項相同,其意為 "假裝執
行我要求你做的事,正確的告訴我你將如何進行,但並不實際地完成作用")。
這個選項對新手或不確定自己是否做的正確的情況非常有用。
每一個表式的語法並不相同,但一般性的格式為:
keyword target = value(s)
(等號的兩邊均需為空白)。
18.1.3 改變指標對應
指標對應是一個邏輯按鈕數字的表列。 (邏輯的button-1我們稱為LEFT,邏輯
的 button-2 稱為MIDDLE等等,實際的 button-1 是滑鼠左邊的按鈕,button-2
是隔壁的按鈕等等,所以預設的邏輯的按鈕和實際的一致)。在表列中的第一個
項目是邏輯的按鈕和實際的 button-1 的關系,下一個則是對實際的 button-2
的關系,以此類推。例如,顛倒按鈕的次序,使用命令:
xmodmap -e "pointer = 3 2 1 "
結果按下滑鼠右邊的按鈕,會被解釋成LEFT。
18.1.4 改變鍵對應
xmodmap 讓你將一個鍵 (也就是說鍵碼) 連結到一個新的keysym表列,使用表
式:
keycode keycode = keysym-1 [keysym-2 ...]
安排keysym-1連結到鍵時沒有修飾鍵,當SHIFT 按下時keysym-2連結到鍵,如果
還有下一個keysym的話,對keycode 而言是第三順位等等。 (請記住,在前兩個
之後的keysym,系統並未附屬特別的意義,應用程式如果需要的話可以附屬意義
)。
讓我們舉實際的例子。一些鍵盤把一些非字母數字 (alphanumeric)鍵放在
不標准的地方,所以我們假設你要將F6鍵重定義當沒有修飾鍵按下時為 "9",
當SHIFT 按下時為 "("。要寫入這個xmodmap 的表式,你需要知道三件事:F6
的鍵碼,和 "9"與 "("的keysym。我們在第12章提到過,執行xev 便可獲得
這些:分別按下"F6", "9", "("三個鍵,你便可得到它們的鍵碼和keysym。然
後將它們放入你的表式中。例如在我們的系統中我們使用命令:
xmodmap -e "keycode 21 = 9 parenleft"
為了容易一些,你通常不需要查問鍵碼,xmodmap 允許你使用下列格式:
keysym target-keysym = keysym-1 [keysym-2 ...]
它的意義為 "附屬在此鍵的keysym表列現在改由target-keysym來附屬"。例如
針對我們方才的□例,我們可以用:
xmodmap -e "keysym F6 = 9 parenleft"
如果你將相同的keysym附屬到數個鍵,xmodmap 會搞混掉,像這種情況你應堅
持使用keycode ... 這種符號表示法。
18.1.5 改變修飾鍵對應
在server中修飾鍵對應是一個表列的集合,每個修飾鍵有一個表列。對一個修
飾鍵的表列中,包含了所有當此修飾鍵被按下時會有意義的鍵 (鍵碼) 。xmodmap
允許你在一個表列中增加項目,去除項目,或完全清除一個表列。對此三個操
作的格式為:
add modifier = list-of-keysyms
remove modifier = list-of-keysyms
clear modifier
不幸的是,語法有點兒混淆,因為取代你所需的鍵碼,你必需指定keysym附屬
到鍵碼。
舉一個例子:假如你需要在你鍵盤的右邊有一個第二個的Ctrl鍵。在我們
的鍵盤上有一個Alternate 鍵沒有被用來做任何事,所以我們將修改它,命令
為:
xmodmap -e "add Control = Alt_R"
為了多解釋一些情況,讓我們假設你沒有一個多馀的鍵,但有一個第二個的
Meta鍵在鍵盤的右手邊,而我們要用它。我們首先必需去除它的Mod1對應 (你
必須使用 "Mod1" ,"Meta"沒有用) ,而後將它加入Control 對應。 (如果有
需要的話,我們可以擁有雙重的對應,所以在Control-Meta組合鍵時才會有作
用,在一些編輯器中常會用到)。命令為:
remove Mod1 = Meta_r
add Control = Meta_r
將上述命令列放入一個比方說叫mymaps的檔案中,執行命令xmodmap mymaps。
它可以工作,但如果你用xmodmap -pm 去查看,你會發覺Control 和Meta混合
在一起,所以最好改變鍵上的keysym為:
remove Mod1 = Meta_R
add Control = Meta_R
keysym Meta_R = Control_R
在xmodmap 的指南頁中,有幾個更多的交換修飾鍵的□例。
注意:當增加一個鍵到修飾鍵對應,keysym只是用來指定xmodmap 中的鍵
。它完全是xmodmap 本地的,且只是一個符號而已:只有當相關的鍵碼傳遞到
server,才實際上的改變對應。同樣地,keysym 和 keycode 表式對修飾鍵對
應絕對沒有影響。一個常見的錯誤是執行下面這個命令:
xmodmap -e "keysym F1 = Contrl_R"
期望F1鍵能像一個control 鍵般作用。它不會 -- 因為你相當於告訴系統 "我
已經把這個符號印在F1鍵上面" 而已。你應該這樣作:
xmodmap -e "add Control = F1"
如果你合並上一列的命令會使得對應表列看起來清楚些。
我們對不同對應的處理的描述到此告一結束。
18.2 鍵盤和滑鼠參數設定 -- xset
最後我們來看一看最平常的設施,對你的鍵盤、滑鼠和螢幕設定不同的參數的
設施。這些參數使用xset程式 (我們曾經用來控制server的字型搜尋路徑) 來
設定。在以下的敘述,我們只用一組引數來展示xset,但你可以同時指定多組
你所要的不同定義的設定。
控制終端機響鈴
用xset你可以讓鈴聲響或不響,設定它的音調 (pitch),和它持續的時間 (假
設你的機器提供這些操作):
讓鈴聲不響 xset -b
xset b off
讓鈴聲能響 xset b
xset b on
設定鈴聲的音量 xset b vol
(最大音量之vol%) 例:xset b 50
設定鈴聲的音量,和 xset b vol p
音調(單位Hertz(赫)) 例:xset b 50 300
設定鈴聲的音量,音調, xset b vol p d
和持續的時間(單位百萬 例:xset b 50 300 100
分之一秒)
控制鍵的滴答(click)
讓鍵的滴答不作用 xset -c
xset c off
讓鍵的滴答作用 xset c
xset c on
設定滴答聲的音量 xset c vol
(最大音量之vol%) 例:xset c 50
控制鍵的自動重復(auto-repeat)
讓鍵的自動重復不作用 xset -r
xset r off
讓鍵的自動重復作用 xset r
xset r on
滑鼠參數 -- 加速和門檻
指標在螢幕上的移動和滑鼠的移動是成比例的。加速 (multiplier) 是應用在
指標移動上的一個乘數,例如你的加速是四,當你移動滑鼠時,指標將以正常
四倍的速度移動。 (如果指標正常時移動n 個像素,現在則會移動 4 X n個像
素)。
當你希望在螢幕上將指標移動一段長距離時,相當高的加速是很方便,但
當你要作一些細部的指引時,它看起來就很笨拙 -- 指標看起來在來回跳動。
為了克服此點,server提供了一個門檻 (threshold):如果當指標一次移動超
過門檻個像素,加速也會被帶進來執行。
設定滑鼠的加速到a xset m a
例:xset m 5
設定加速,設定門檻到t xset m a t
例:xset m 5 10
控制螢幕節約器結構
螢幕節約器 (screen saver)是一種設施,它意圖降低一個固定的圖樣(pattern)
老是燃燒你螢幕的螢光體的機率。它的理念為螢幕損害大都起因於讓系統□置
(idle)一長段時間,所以螢幕節約器在一段特定的時間內如果沒有輸入動作後
,不是整體性的閃動螢幕,便是顯示一個不同的圖樣。
如果你選擇的是顯示一個不同的圖樣,根視窗的背景涵蓋整個螢幕,一個
大X 的游標出現在螢幕上,且會周期性的移動。當大X 游標在移動時,會改變
大小,而且背景也會隨機的變動。 (在背景圖樣較小時你可能不會注意到,但
若比較大時,你可以看到它在跳動)。
當螢幕節約器結束作用後,如果要花許多的時間才能重畫應用視窗,你可
以指定只有在重畫螢幕而不需產生任何曝光(exposure)事件 (也就是不必要求
應用程式重畫它們自己的視窗) 的情況下,螢幕節約器才會作用。 這只應用
於顯示不同的圖樣的情況,整體性的閃動螢幕純為硬體作用,不會影響到應用
程式。
讓螢幕節約器能作用 xset s
讓螢幕節約器不能作用 xset s off
用螢幕閃動的方式 xset s blank
只有在無曝光事件下才作用 xset s noexpose
允許有曝光事件下仍然作用 xset s expose
用不同圖樣的方式 xset s noblank
當系統□置t 秒後作用 xset s t
例:xset s 600
每p 秒之後改變圖樣 xset s t p
例:xset s 600 10
讓我們將這些組合起來,假設我們希望螢幕節約器在系統□置80秒後開始作用
,用不同的圖樣的方式,周期為3 秒,不介意曝光事件是否發生:
xset s noblank s 80 3 s expose
注意:xset s 並不提供 on 這個值。
18.3 結論
本章的第一個部份,告訴你如何改變從實際的到邏輯的鍵和按鈕的對應,這些
對應可被client應用程式解釋。你看到如何使用xmodmap 來列出或改變每一個
鍵盤的鍵、修飾鍵和滑鼠按鈕的對應。這些對應由server維護,所以可以被每
一個使用到此server的應用程式應用到。這種結構讓你有改變鍵盤配置的自由
,不論是個人的喜好或是一個額外的標准。
在本章的第二個部份,你看到如何使用xset對一些常見的特性作設定,如
鍵的滴答聲、終端機的響鈴、螢幕節約器和滑鼠的速度 ("加速")。
Copyright © Linux教程網 All Rights Reserved