Manpages

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 鍵 . 如 果 xtermttyModes 資 源 也 做 了 同 樣 的 設 置 , 所 有 的 終 端 模 擬 窗 口 將 用 相 同 的 鍵 刪 除 字 符 .

%  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 [AT] users.net>

[中 文 版 最 新 更 新 ]

2003/05/13

《 中 國 Linux論 壇 man手 冊 頁 翻 譯 計 劃 》

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh