歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

X windows系統使用指南(十六)

  第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來附屬"。例如





Copyright © Linux教程網 All Rights Reserved