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 中 的 早期版本
改寫.
[中文版維護人]¶
徐明 <xuming@users.sourceforge.net>
[中文版最新更新]¶
2003/05/13
《中國Linux論壇man手冊頁翻譯計劃》¶
http://cmpp.linuxforum.net