安装
# Arch系
sudo pacman -S xorg-xmodmap
# Debian / Ubuntu
sudo apt install x11-xserver-utils
# Fedora
sudo dnf install xorg-x11-utils
使用
查看所有按键和键码值映射
xmodmap -pke
命令会打印以表达式格式呈现的键映射表:
[...]
keycode 57 = n N
[...]
每个键码后面都跟着映射到的键符。上面的例子意思是:键码57
被映射到小写n
键符,而大写N
键符则对应按下Shift
输入的57
号键码。
表中的每一列键符都对应着一个特定的修饰键组合,Key为键码所对应的按键:
Key
Shift+Key
Mode_switch+Key
Mode_switch+Shift+Key
ISO_Level3_Shift+Key
ISO_Level3_Shift+Shift+Key
并非所有的键符都必须设置,但如果要跳过一个键符,请将其值设为NoSymbol
使用JavaScript获取键码值的在线网站
JavaScript Key Code Event Tool | Toptal®
自定义映射
临时修改进行测试
假设你想将 Caps Lock
键映射为 Escape
键,首先找到 Caps Lock
和 Escape
键对应的键码(例如 Caps Lock
是 66
,Escape
是 9
),然后运行
xmodmap -e "keycode 66 = Escape"
# 重置键盘映射为系统默认的布局和选项,使用另一个工具setxkbmap
setxkbmap
# or
setxkbmap -option
使映射永久生效
关键字:
- keycode:指定按键的符号映射。
- clear:清除修饰键的所有绑定。
- add:将按键添加到修饰键。
- remove:从修饰键中移除按键。
- pointer:重新映射鼠标按钮。
- keysym:重新映射按键符号。
- shift:修改按键在按下 Shift 键时的行为
创建或编辑 ~/.Xmodmap
文件,添加映射规则:
keycode 66 = Escape
让配置生效
xmodmap ~/.Xmodmap
# 多次修改可以先重置到默认
setxkbmap && xmodmap ~/.Xmodmap
开机自动加载配置
对于GDM、XDM或LightDM,不需要特别激活~/.Xmodmap
。对于startx,请编辑~/.xinitrc
文件:
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
也可以编辑全局启动脚本 /etc/X11/xinit/xinitrc
。
i3wm配置自动加载
# ~/.config/i3/config exec_always --no-startup-id setxkbmap && xmodmap ~/.Xmodmap
鼠标键
反向滚动
由于 synaptics 驱动程序使用 4/5/6/7 按钮进行上/下/左/右滚动,你只需要调换一下 ~/.Xmodmap
中按钮的声明顺序,比如调换4
和5
的顺序:
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
交换鼠标按键
鼠标左、中、右按钮分别对应于 synaptics 驱动程序中的按钮 1、2和3。如果要交换鼠标左键和右键,也只需将它们在~/.Xmodmap
中的顺序颠倒过来即可。
pointer = 3 2 1
修饰键(Mod键)
查看所有修饰键
xmodmap -pm
重新安排修饰键位
在重排之前,需要清除修饰键。原来的键和新的键都得清除。例如,如果您打算将Caps_Lock
换到A键,将B
换成NumLock键,那么Caps_Lock
,Num_Lock
,A,B四个键都得清除,然后分配键位,最后再把他们加回来。!
用于注释一行。
举个🌰,编辑~/.Xmodmap
将CapsLock
修改为Control
,将Shift+CapsLock
修改为CapsLock
clear lock
clear control
add control = Caps_Lock Control_L Control_R
keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol
我的使用场景
⚠️ 我在公司的电脑Garuda Linux i3wm下使用的有线键盘,其他环境和设备的配置和键码可能有点差异,键码值映射和修饰键表需要自行通过
xmodmap -pke
和xmodmap -pm
或者xev
确定。🤔 在键盘映射中,Mode_switch键、Hyper 键(emacs、openbox或i3的附加修饰键)通常并没有物理键盘上的直接对应。Hyper 键最初源自早期的计算机键盘设计,如 Lisp 机器键盘,但在现代键盘中,它几乎不再存在。尽管如此,Hyper 键可以通过重新映射其他按键来创建或模拟。
Garuda Linux i3wm的默认修饰键定义
将右Control转为Hyper,让i3wm多一个修饰键使用
clear lock
remove control = Control_R
remove mod4 = Hyper_L
keycode 105 = Hyper_L
!由于i3wm只认识Mod1~5,所以要把Hyper_L绑定到Mod3上面去
add mod3 = Hyper_L
# ~/.config/i3/config
set $super Mod4
set $alt Mod1
set $hyper Mod3
set $preferredBrowser /usr/bin/firedragon
...
exec_always --no-startup-id setxkbmap && xmodmap ~/.Xmodmap
...
bindsym $hyper+Return exec $preferredBrowser;focus
将CapsLock转为Mode_switch,将q键的Mode_switch层改成BackSpace,将e键的Mode_switch层改成Delete,将空格键的Mode_switch层改成Return
就像QMK
固件的机械键盘能通过VIA
改键盘一样,因为公司的键盘不支持VIA改键,我只能想办法通过软件实现,Windows上也有好多软件实现的办法,什么时候互联网公司能给程序员标配麻将音机械键盘吗🐶
clear lock !如果添加了上面的这里就不用了
keycode 66 = Mode_switch
keycode 24 = q Q BackSpace
keycode 26 = e E Delete
keycode 65 = space NoSymbol Return
这个按键映射还是从CapsLock+ 这个Windows软件上学来的
其他我用过的相关/不相关的键盘鼠标工具
- setxkbmap (Linux)
- xev (Linux)
- showkey (Linux)
- xbindkeys和xdotool (Linux)
- capslock+ (Windows)
- capslox (Windows/macOS)
- autohotkey (Windows)
- Pulover's Macro Creator (Windows)
- Quicker (Windows)
- win-vind (Windows)
- kmonad (Windows/Linus/macOS)
- GestureSign (Windows)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。