xmodmap
简介
xmodmap
是一个用于修改键盘映射和指针按钮映射的实用程序,通常在 X Window 系统上使用。
原理
X11是什么
X11,通常被称为 X Window System,是一种提供窗口系统的软件。它广泛用于 Unix 和 Unix-like 操作系统(比如 Linux),为用户提供图形界面。X11 基于客户端-服务器模型:
- 服务器:在用户的机器上运行,管理屏幕、键盘、鼠标等输入输出设备。
- 客户端:应用程序,连接到服务器并通过服务器显示图形界面。
什么是键盘映射
键盘映射: 指的是按键和字符(或功能)之间的映射关系。在 X11 中,每个按键被赋予一个 keycode,而每个 keycode 可以映射到一个或多个 keysyms(键符)。
- Keycode:是一个数字,代表物理键盘上的一个特定的按键。每个按键的 keycode 是固定的,不会随不同的键盘布局或语言设置而改变。
- Keysym:是一个表示按键功能的符号名。比如,字母 "A" 的 keysym 是
XK_A
,回车键的 keysym 是XK_Return
X11 如何处理键盘输入
当你在键盘上按下一个键时:
- 键盘硬件生成一个 keycode。
- X 服务器接收到这个 keycode,并根据当前的键盘映射,将它转换成一个或多个 keysyms。
- 如果有程序(X 客户端)注册了对这些 keysyms 的兴趣,这些 keysyms 将被发送到这些程序。
安装
sudo apt-get update
sudo apt-get install x11-xserver-utils
安装完毕后,你可以通过在终端输入 xmodmap
来检查 xmodmap
是否成功安装。
使用
查看命令帮助
xmodmap -h
usage: xmodmap [-options ...] [filename]
where options include:
-display host:dpy X server to use
-verbose, -quiet turn logging on or off
-n don't execute changes, just show like make
-e expression execute string
-pm print modifier map
-pk print keymap table
-pke print keymap table as expressions
-pp print pointer map
-help print this usage message
-grammar print out short help on allowable input
-version print program version
- read standard input
-
-display host:dpy
: 此选项指定要使用的主机和显示器。 -
-grammar
: 此选项指示应在标准错误上打印描述文件中使用的表达式语法和带有 -e 表达式的帮助消息。 -
-verbose
: 解析输入时打印日志记录信息。 -
-quiet
: 此选项将关闭详细日志记录。这是默认设置。 -
-n
: 这个选项表明 xmodmap 不应该改变映射,而应该显示它会做什么,就像 make(1) 在给定这个选项时所做的那样。 -
-e expression
: 此选项指定要执行的表达式。可以从命令行指定任意数量的表达式。 -
-pm
: 此选项指示应在标准输出上打印当前修改器贴图。 -
-pk
: 此选项指示当前键盘映射表应打印在标准输出上。 -
-pke
: 此选项指示当前键盘映射表应以表达式的形式打印在标准输出上,这些表达式可以反馈给 xmodmap。 -
-pp
: 此选项指示当前指针映射应打印在标准输出上。 -
-
: 单破折号表示应将标准输入用作输入文件。
示例
# 禁用左Alt键
xmodmap -e 'keycode 64 = '
# 禁用右Alt键
xmodmap -e 'keycode 108 = '
xmodmap -e 'keycode 67= '
xmodmap -e 'keycode 68= '
xmodmap -e 'keycode 69= '
xmodmap -e 'keycode 70= '
xmodmap -e 'keycode 71= '
xmodmap -e 'keycode 72= '
xmodmap -e 'keycode 73= '
xmodmap -e 'keycode 74= '
xmodmap -e 'keycode 75= '
xmodmap -e 'keycode 76= '
xmodmap -e 'keycode 95= '
xmodmap -e 'keycode 96= '
xmodmap -e 'keycode 133= '
xmodmap -e 'keycode 134= '
持久化
为了持久化这些改变,你可以在你的 home 目录下创建一个名为 .Xmodmap
的文件:
xmodmap -pke > ~/.Xmodmap
这会将当前键盘映射输出到 .Xmodmap
文件。然后你可以编辑这个文件来改变键映射,系统每次启动时都会读取这个文件。
一些桌面环境可能不会自动加载 .Xmodmap
。如果你发现你的映射在重启后没有被应用,你可以在你的桌面环境的自动启动脚本中添加以下命令:
xmodmap ~/.Xmodmap
调试
如果你的更改没有如预期那样生效,你可以使用 xev
工具来调试。xev
创建了一个窗口,可以报告所有从键盘或鼠标收到的事件,非常适合查看按键的 keycode。
#xmodmap# #Linux键盘限制#
附录
keycode | 键名 | keycode | 键名 | keycode | 键名 | |
---|---|---|---|---|---|---|
9 | ESC | 49 | ~ | 22 | BacksSpace | |
67 | F1 | 10 | 1 | 23 | Tab | |
68 | F2 | 11 | 2 | 66 | Caps Lock | |
69 | F3 | 12 | 3 | 50 | 左Shift | |
70 | F4 | 13 | 4 | 37 | 左Ctrl | |
71 | F5 | 14 | 5 | 133 | 左Window | |
72 | F6 | 15 | 6 | 64 | 左ALT | |
73 | F7 | 16 | 7 | 108 | 右ALT | |
74 | F8 | 17 | 8 | 65 | 空格 | |
75 | F9 | 18 | 9 | 134 | 右Window | |
76 | F10 | 19 | 0 | 135 | 目录键 | |
95 | F11 | 20 | - | 105 | 右Ctrl | |
96 | F12 | 21 | = | 62 | 右Shift | |
24 | Q | 38 | A | 36 | Enter | |
25 | W | 39 | S | 51 | \ | \ |
26 | E | 40 | D | 52 | Z | |
27 | R | 41 | F | 53 | X | |
28 | T | 42 | G | 54 | C | |
29 | Y | 43 | H | 55 | V | |
30 | U | 44 | J | 56 | B | |
31 | I | 45 | K | 57 | N | |
32 | O | 46 | L | 58 | M | |
33 | P | 47 | ;: | 59 | <, | |
34 | {[ | 48 | "' | 60 | >. | |
35 | }] | 61 | ?/ | |||
Print Screen | 78 | Scroll Lock | 127 | Pause Break | ||
118 | Insert | 110 | Home | 112 | Page Up | |
119 | Delte | 115 | End | 117 | Page Down | |
82 | - | 111 | ↑ | 86 | + | |
113 | ← | 116 | ↓ | 114 | → | |
77 | Num Lock | 106 | / | 63 | * | |
79 | 7 | 80 | 8 | 81 | 9 | |
83 | 4 | 84 | 5 | 85 | 6 | |
87 | 1 | 88 | 2 | 89 | 3 | |
90 | 0 | 91 | . | 104 | Enter |