Linux 中的鍵盤映射

 

Linux 中的鍵盤映射

 

對於英語來說,鍵盤上的字母鍵直接和英語字母表中的字母對應,但是對於非英語的語種來說,情況就不太一樣了。例如,德語中的“ß”字母就沒有直接的鍵和它對應,爲此,Linux 提供“鍵盤映射”或“鍵盤翻譯”,利用鍵盤映射可將某些鍵轉換爲特殊鍵。
前面提到,X Window 直接處理了鍵盤的輸入輸出端口,因此,在 Linux 虛擬控制檯下和 X Window 下使用不同的鍵盤映射方法。在 Linux 虛擬控制檯上,可利用 loadkeys 命令將特殊按鍵映射爲特殊字符;而在 X Window 中,必須使用 xmodmap 命令完成鍵盤映射。這些命令均按照字符映射表文件(文本文件)中的規定完成相應的轉換。在 X Window 啓動時,它會參考 Linux 文本模式下的字符映射表,因此可獲得某些一致的鍵映射。
字符映射表文件保存在 /usr/lib/kbd/keytables 目錄下,defkeymap.map 是默認的字符映射表文件。利用命令:
$ loadkeys fr.map
可裝入 fr.map 所規定的字符映射表。這時,按下“.”會顯示“:”。命令
$ loadkeys –d
可裝入默認字符映射表。對於非默認的鍵盤映射,可在啓動時在 shell 腳本中裝入特殊的映射表。
對X Window 而言,它對鍵盤的處理過程分如下兩個步驟:
1.X Server 首先將鍵碼轉換爲鍵符號名(keysym)。文件 /usr/include/X11/keysymdef.h 中包含所有的符號名。X Server 能夠區分修飾鍵帶來的不同,因爲 keysymdef.h 中區分了兩種不同的鍵,例如對“a”和“A”,分別用“KS_a”和“KS_A”定義。
2.X Server 將鍵符號翻譯爲 ASCII 字符串。對於大多數的鍵來說,該字符串只包含一個字符,而對於功能鍵等特殊按鍵來說,則包含多個字符。例如,F5 鍵對應的默認 ASCII 字符串爲 “5~”。
利用 xmodmap 工具可修改鍵盤和鍵符號名之間的對應關係。例如,X Window 中“A”的鍵碼爲 30,而“Q”的鍵碼爲16。如果建立文件 maptest:
keycode 38 = A
keycode 24 = Q
在 xterm 中運行
$ xmodmap maptest
之後,將發現“A”鍵和“Q”鍵交換了過來。
上述的 maptest 文件實際就是一個簡單的 X Window 映射文件。但需要注意的是,文件中的 keycode 和 Linux 內核對鍵值的定義是不一樣的,一般而言,X Window 中的鍵碼要比內核的鍵值大 8。利用 showkey 命令可以查看內核對鍵值的定義。例如,運行 showkey 並前後按下“A”和“Q”後,程序的輸出爲:
$ showkey
kb mode was RAW
...
keycode 30 press
keycode 30 press
keycode 16 press
keycode 16 press
該程序給出的是“A”和“Q”的內核鍵值。
在 XF86Config 文件中,Keyboard 段用來指定鍵盤參數,一般而言,這些參數不需要特殊設置:
Section “Keyboard”
    Protocol    “Standard”
    AutoRepeat 500 5
EndSection

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