XMODMAP
Section: User Commands (1)
Updated: Release 6.3
名稱 (NAME)
xmodmap - 在 X 環境中調節鍵盤映射和鼠標鍵映射
總覽 (SYNOPSIS)
xmodmap
[-options ...] [filename]
描述 (DESCRIPTION)
xmodmap 用來 編輯 或 顯示 鍵盤的
修飾鍵映射(modifier map) 和 鍵盤映射表(keymap table),
客戶程序 用 它們 把 鍵碼(keycode) 事件 轉換為 keysym. 通常 在 用戶會話 的
啟動腳本 中 使用 xmodmap, 把 鍵盤 配置成 用戶 喜愛的 風格.
選項 (OPTIONS)
xmodmap 可以 使用 下列 選項:
- -display display
-
這個選項 指定 主機 和 顯示器.
- -help
-
這個選項 在 標準錯誤設備 顯示 命令行參數 的 說明. 如果 出現了 無法識別 的
參數,
xmodmap
也會 執行 這個 功能.
- -grammar
-
這個選項 在 標準錯誤設備 顯示 表達式 的 語法. 該語法 適用 文件 或
-e expression 選項.
- -verbose
-
這個選項 要求
xmodmap
在 分析 輸入數據 的 時候 顯示 日志信息.
- -quiet
-
這個選項 要求 關閉 verbose 日志信息. 這是 缺省選項.
- -n
-
這個選項 不要求
xmodmap
真的改變 (鍵盤,鼠標) 映射, 而只是 顯示出 它 可能 做什, 如同
make(1) 的 相同 選項 一樣.
- -e expression
-
這個選項 執行 一個 給定的 表達式. 命令行上 可以 指定 任何 數量 的 表達式.
- -pm
-
這個選項 要求 在 標準輸出設備 顯示 當前的 修飾鍵(modifier)映射.
- -pk
-
這個選項 要求 在 標準輸出設備 顯示 當前的 鍵盤映射表(keymap).
- -pke
-
這個選項 要求 在 標準輸出設備 顯示 當前的 鍵盤映射表(keymap). 輸出格式
能夠 作為 xmodmap 的 輸入.
- -pp
-
這個選項 要求 在 標準輸出設備 顯示 當前的 鼠標(pointer)映射.
- -
-
單獨的 短橫線(-) 說明 把 標準輸入設備 作為 輸入文件 使用.
filename 指定 一個文件, 其中 包含 xmodmap 將要 執行的 表達式.
這個文件 通常 命名為 .xmodmaprc, 存放在 用戶的 根目錄下.
語法 (EXPRESSION GRAMMAR)
xmodmap
讀入 一連串的 表達式, 在 執行 它們 以前, 對 所有 表達式 進行 分析.
這樣 就可以 不用擔心 重定義 的 keysym 出現 名字沖突.
- keycode NUMBER = KEYSYMNAME ...
-
把 這一串 keysym 賦 指定的 鍵碼.
(鍵碼 可以是 十進制數, 十六進制數, 八進制數, 可以用
xev
程序 測出.)
- keycode any = KEYSYMNAME ...
-
如果 不存在 分配了 上述 keysym 序列 的 鍵, xmodmap 就 選擇 鍵盤上 的
空閑鍵, 把 這些 keysym 分配 給 它. keysym 可以是 十進制數, 十六進制數 或者
八進制數.
- keysym KEYSYMNAME = KEYSYMNAME ...
-
左邊的 KEYSYMNAME 翻譯為 對應的 鍵碼, 該鍵碼 應用 相應的
鍵碼表達式集.
你 可以 在 頭文件 <X11/keysymdef.h> 中 找到 keysym 的 名稱列表
(去掉 XK_ 前綴), 也可以 查 keysym 數據庫 <XRoot>/lib/X11/XKeysymDB,
這裡的 <XRoot> 指 X11 的 安裝樹. 注意, 如果 多個 鍵碼 編聯(bind)了 相同的
keysym, 那 每個 對應的 鍵碼 都要 執行 這個 表達式.
- clear MODIFIERNAME
-
刪除 給定 修飾鍵 在 修飾鍵映射表 中 的 所有 表項, 修飾鍵 的 名字 有:
Shift,
Lock,
Control,
Mod1,
Mod2,
Mod3,
Mod4,
和 Mod5 (修飾鍵名字 不分 大小寫, 但是 其他 名字 對 大小寫 敏感).
例如, ``clear Lock'' 將 刪除 所有 編聯為 shift lock 的 鍵.
- add MODIFIERNAME = KEYSYMNAME ...
-
這條語句 把 所有 包含 指定 keysym 的 鍵 加入到 修飾鍵映射表 中.
讀取完 全部 輸入表達式 之, xmodmap 才分析 這些 keysym, 這樣 有利
編寫 一些 交換 鍵位 的 表達式. (見 EXAMPLES 節)
- remove MODIFIERNAME = KEYSYMNAME ...
-
這條語句 在 指定的 修飾鍵映射表 中 刪除 所有 包含 指定 keysym 的 鍵. 和
add
不同, xmodmap 每 讀取 一行 就 執行 一行. 這樣 可以 避免 考慮 這些鍵
是否 被 重分配過.
- pointer = default
-
這條語句 把 鼠標映射 設置為 缺省值 (按鍵1 產生 代碼1, 按鍵2 產生 代碼2, 等等).
- pointer = NUMBER ...
-
這條語句 把 鼠標映射 設置為 指定的 按鍵代碼. 這個 代碼列表 總是 從 第一個
按鍵 開始.
注釋行 以 感嘆號(!) 開始.
如果 你 打算 改變 某個 修飾鍵 的 編聯, 你 必須 把它 從 相應的
修飾鍵映射表 中 同時 刪除.
示例 (EXAMPLE)
大多數 鼠標 設計成 右手 食指 按 第一個鍵, 左撇子 卻覺得 如果 把 按鍵
代碼 反過來, 使 左手 食指 按上 主鍵 會 更舒服些. 對 三鍵鼠標 可以 這樣:
% xmodmap -e "pointer = 3 2 1"
很多 應用程序 支持 Meta 鍵,
然而, 有些 服務器 的 鍵盤映射表 中 沒有 提供 Meta keysym, 因此 需要 手工
添加. 下面的 命令 將把 Meta 附加到 Multi-language 鍵上 (有時也 稱為
Compose Character). 另一個 有利方面 是, 需要 Meta 鍵 的 程序 只是要求 獲得
鍵碼, 不要求 keysym 位 鍵盤映射表 的 第一列.
這 意味著 需要 Multi_key 的 程序 不會 發覺 有 任何 變化.
% xmodmap -e "keysym Multi_key = Multi_key Meta_L"
類似的, 有些 鍵盤 只有 Alt 鍵, 而沒有 Meta 鍵. 這種情況下 可以 用:
% xmodmap -e "keysym Alt_L = Meta_L Alt_L"
xmodmap 最簡單, 也是 最合適的 用途 之一 是 設置 鍵盤的 "rubout" 鍵,
產生 替換的 keysym. 它 經常 用 交換 Backspace 和 Delete 鍵.
如果 xterm 的 ttyModes 資源 也 做了 同樣的 設置,
所有的 終端模擬窗口 將 用 相同的鍵 刪除 字符.
% xmodmap -e "keysym BackSpace = Delete"
% echo "XTerm*ttyModes: erase ^?" | xrdb -merge
有些鍵盤 按下 shift 鍵 和 逗號, 句號鍵 時, 不能 產生 小號 和 大號.
這個現象 可以 通過 重新編聯 逗號鍵 和 句號鍵 矯正:
!
! make shift-, be < and shift-. be >
!
keysym comma = comma less
keysym period = period greater
鍵盤間 最煩人 的 區別 之一 就是 Control 和 Shift Lock 鍵 的 位置.
xmodmap 的 一個 常用功能 就是 交換 這兩個 鍵, 象這樣:
!
! Swap Caps_Lock and Control_L
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
如果 要 對 多個 鍵碼 分配 同一個 keysym, 可以 使用 keycode 命令.
盡管 這個做法 不能 移植, 但是 你可以 用它 寫一段 腳本, 把 鍵盤 復位為
已知狀態.
下面的 腳本 把 backspace 設為 Delete (如上所示), 清除 cap lock 的 編聯,
把 CapsLock 設為 Control 鍵, F5 設為 Escape, Break/Reset 設為 shift lock.
!
! On the HP, the following keycodes have key caps as listed:
!
! 101 Backspace
! 55 Caps
! 14 Ctrl
! 15 Break/Reset
! 86 Stop
! 89 F5
!
keycode 101 = Delete
keycode 55 = Control_R
clear Lock
add Control = Control_R
keycode 89 = Escape
keycode 15 = Caps_Lock
add Lock = Caps_Lock
環境變量 (ENVIRONMENT)
- DISPLAY
-
指示 缺省的 主機 和 顯示器號.
另見 (SEE ALSO)
X(1), xev(1), Xlib 關 鍵盤 和 鼠標 事件 的 文檔.
BUGS
服務器 每執行 一個 keycode 表達式, 就要在 每一個 客戶機 上 產生 一個
MappingNotify 事件. 這可能 導致 某些 異常情況. 所有的 改變 都應該
收集 在一起, 然 一次 完成. 那些 接收了 鍵盤輸入, 卻 忽略了
MappingNotify 事件 的 客戶機 將 無法 注意到 對 鍵盤映射 的 任何 改變.
如果 編聯了 某個 修飾鍵 的 鍵碼 發生 變化,
Xmodmap
將 自動 產生 "add" 和 "remove" 表達式.
應該 有 某種辦法, 當你 確實 搞亂了 鍵盤映射 的 時候, 使
remove
表達式 接受 鍵碼 以及 keysym.
作者 (AUTHOR)
Jim Fulton, MIT X 協會, 根據 David Rosenthal 在 Sun Microsystems 中 的
早期版本 改寫.
[中文版維護人]
徐明 Email: xuming@bigfoot.com
[中文版最新更新]
2001/8/5
《中國Linux論壇man手冊頁翻譯計劃》
www.linuxforum.net/man-pages/
(http://www.fanqiang.com)
進入【