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

COMMENTS