我想把右ALT映射成Super键,也就是mod4键位,折腾了半天没有成功。问AI也没有解决,与是只好自己去看wiki了,发现原来很简单。只是我没有clear。
https://wiki.archlinuxcn.org/wiki/Xmodmap
安装xorg
sudo pacman -S xorg
直接选择全部安装。
基础操作。
xmodmap
#显示按键信息
xmodmap -pke
#生成配置文件
xmodmap -pke > ~/.xmodmap
#编辑配置文件
nvim ~/.xmodmap
实战
我这里实现目标是ALT_R 当作 Super_L使用。
1. 生成配置文件
#生成配置文件
xmodmap -pke > ~/.xmodmap
2. 修饰键
xmodmap也可以用来覆盖修饰键,例如交换Control和Super(即 Windows 键)。
打印当前完整的修饰符表:
itkey@archlinux: ~ $ xmodmap -pm
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Alt_L (0xcc), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3 ISO_Level5_Shift (0xcb), Hyper_L (0xcf)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce)
mod5 ISO_Level3_Shift (0x5c)
3. 重新安排修饰键位
注意:xmodmap是区分大小写的。使用不正确的大小写,如Mode_Switch,(正确的是 Mode_switch)会导致错误。
在重排之前,需要清除修饰键。原来的键和新的键都得清除。例如,如果您打算将Caps_Lock换到A键,将B换成NumLock键,那么Caps_Lock,Num_Lock,A,B四个键都得清除,然后分配键位,最后再把他们加回来。
~/.Xmodmap
[...]
clear lock
clear mod2
keycode 38 = Caps_Lock
keycode 77 = Num_Lock
add lock = Caps_Lock
add mod2 = Num_Lock
我这里是要把Alt_R当作Super_L使用的,所以要先clear mod1和mod4
1 清除原修饰键
文件的开头
clear mod1
clear mod4
2 修改按键的映射
找到ALT_R 的配置,修改成Super_L
! keycode 108 = Alt_R NoSymbol Alt_R
keycode 108 = Super_L NoSymbol Super_L
这里的!是注释
3 加回来修饰键
文档末尾
! 加回修饰键
add mod1 = Alt_L Alt_R
add mod4 = Super_L Super_R
激活自定义映射表
对于GDM、XDM或LightDM,不需要特别激活~/.Xmodmap。对于startx,请使用:
~/.xinitrc
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
也可以编辑全局启动脚本 /etc/X11/xinit/xinitrc。
总结
不看wiki真容易搞错。我一开始就不清楚要修改的键要clear一下,而且涉及的两个键都要clear,最后在加一下,确实感觉繁琐。