XMODMAP(1) | General Commands Manual | XMODMAP(1) |
xmodmap - 在 X 環境中調節鍵盤對映和滑鼠鍵對映
xmodmap [-options ...] [filename]
xmodmap 用來 編輯 或 顯示 鍵盤的 修飾鍵對映(modifier map) 和 鍵盤對映表(keymap table), 客戶程式 用 它們 把 鍵碼(keycode) 事件 轉換為 keysym. 通常 在 使用者會話 的 啟動指令碼 中 使用 xmodmap, 把 鍵盤 配置成 使用者 喜愛的 風格.
xmodmap 可以 使用 下列 選項:
filename 指定 一個檔案, 其中 包含 xmodmap 將要 執行的 表示式. 這個檔案 通常 命名為 .xmodmaprc, 存放在 使用者的 根目錄下.
xmodmap 讀入 一連串的 表示式, 在 執行 它們 以前, 對 所有 表示式 進行 分析. 這樣 就可以 不用擔心 重定義 的 keysym 出現 名字衝突.
註釋行 以 感嘆號(!) 開始.
如果 你 打算 改變 某個 修飾鍵 的 編聯, 你 必須 把它 從 相應的 修飾鍵對映表 中 同時 刪除.
大多數 滑鼠 設計成 右手 食指 按 第一個鍵, 左撇子 卻覺得 如果 把 按鍵 程式碼 反過來, 使 左手 食指 按上 主鍵 會 更舒服些. 對於 三鍵滑鼠 可以 這樣:
% 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
X(1), xev(1), Xlib 關於 鍵盤 和 滑鼠 事件 的 文件.
伺服器 每執行 一個 keycode 表示式, 就要在 每一個 客戶機 上 產生 一個 MappingNotify 事件. 這可能 導致 某些 異常情況. 所有的 改變 都應該 收集 在一起, 然後 一次 完成. 那些 接收了 鍵盤輸入, 卻 忽略了 MappingNotify 事件 的 客戶機 將 無法 注意到 對 鍵盤對映 的 任何 改變.
如果 編聯了 某個 修飾鍵 的 鍵碼 發生 變化, Xmodmap 將 自動 產生 "add" 和 "remove" 表示式.
應該 有 某種辦法, 當你 確實 搞亂了 鍵盤對映 的 時候, 使 remove 表示式 接受 鍵碼 以及 keysym.
Jim Fulton, MIT X 協會, 根據 David Rosenthal 在 Sun Microsystems 中 的 早期版本 改寫.
徐明 <xuming@users.sourceforge.net>
2003/05/13
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
Release 6.3 | X Version 11 |