键盘按键重映射
最近发现用了几年键盘,有些按键失灵了,并且还发现某些键和另外的按键串了起来,比如按“backspace”会出现退格键与“pageup”键一起按下的现象,让我十分不爽。但除单独几个按键之外,其他按键都比较正常,估计内部硬件存在问题。
也不想排查了,干脆重新改一下,让系统忽略这些按键。因为“pageup”这种按键基本用不上,忽略也没关系。
使用方法
Ubuntu 22.04 LTS以下
在旧版本Ubuntu(或使用X11的环境),可以用xmodmap命令。
1、安装x11-xserver-utils
1 2
| sudo apt install x11-xserver-utils
|
2、查看各按键键码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| xmodmap -pke # 示例如下: keycode 9 = Escape NoSymbol Escape keycode 10 = 1 exclam 1 exclam keycode 11 = 2 at 2 at keycode 12 = 3 numbersign 3 numbersign keycode 13 = 4 dollar 4 dollar keycode 14 = 5 percent 5 percent keycode 15 = 6 asciicircum 6 asciicircum keycode 16 = 7 ampersand 7 ampersand keycode 17 = 8 asterisk 8 asterisk keycode 18 = 9 parenleft 9 parenleft keycode 19 = 0 parenright 0 parenright keycode 20 = minus underscore minus underscore keycode 21 = equal plus equal plus keycode 22 = BackSpace BackSpace BackSpace BackSpace keycode 23 = Tab ISO_Left_Tab Tab ISO_Left_Tab keycode 24 = q Q q Q keycode 25 = w W w W keycode 26 = e E e E
|
3、创建文件
1 2 3 4 5 6 7
| vim ~/.Xmodmap # pageup 按键键码是112 ,忽略pageup按键 keycode 112 =
# CapsLock键码是66,映射为 ESC keycode 66 = Escape
|
4、配置文件生效
1 2
| # 可以配置到profile中,设置开机加载 xmodmap ~/.Xmodmap
|
Ubuntu 22.04 LTS及以上
因为Ubuntu 22.04+ 默认 Wayland,xmodmap在Wayland 下不生效,改用hwdb方式。
1、获取按键扫描码(scancode)
示例如下:

发现按下退格时候,上报了两个键值。首先是退格键,然后是pageup键。退格键扫描码为7002a,pageup键扫描码为7004b.
2、编写hwdb规则
1 2 3 4 5
| sudo vim /etc/udev/hwdb.d/90-disable-pageup.hwdb # 添加如下内容 evdev:input:b*v*p* KEYBOARD_KEY_7004b=reserved
|
3、按键重映射(视情况修改)
如果你不只是想屏蔽,而是重新映射,只需要把扫描码改为对应的按键,然后保存退出。
例如:
1 2 3
| evdev:input:b*v*p* KEYBOARD_KEY_7002a=esc KEYBOARD_KEY_7004b=reserved
|
以下是我整理的按键对应的名称,字母和数字键可以直接用键名,其他按键需要用下面表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| esc 退出 tab 制表 enter 回车 space 空格 backspace 退格
leftshift 左Shift rightshift 右Shift leftctrl 左Ctrl rightctrl 右Ctrl leftalt 左Alt rightalt 右Alt
capslock 大写锁定
f1-f12 功能键
up/down/left/right 方向键
pageup/pagedown home/end insert/delete
reserved 屏蔽(不触发任何键)
|
4、更新udev数据库
1 2 3 4
| # 更新 sudo systemd-hwdb update # 触发更新 sudo udevadm trigger
|