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