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
服务器 每执行 一个 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 |