linux使用xmodmap管理键位映射。
一、xmodmap
(一)语法格式
xmodmap [选项] [filename]
(二)选项
-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
(三)参数
文件名:可以把xmodmap支持的命令,写进文件里,然后由xmodmap批量执行
(四)示例用法
1.-e选项
如果命令很少,可以用
xmodmap -e expression
2.使用文件
把命令写到file里,然后执行
xmodmap file
二、概念原理
(一)keycode
键盘某个键位按下去之后会向Linux系统发送一个code,这个code叫keycode,该code是不可更改的。
keycode是一个数字,值从8到255
(二)keysym
keysym可以理解为输入字符函数。
linux系统输入一个字符,比如a,是系统调用某个函数实现的。可以简单理解,keysym就是那个函数。
举一些keysym的例子:
(a) (A)
(s) (S)
(d) (D)
(f) (F)
(g) (G)
(h) (H)
(j) (J)
(k) (K)
(l) (L)
(semicolon) (colon)
(apostrophe) (quotedbl)
(三)keycode绑定keysym
keycode与keysym之间存在映射。
比如,a键keycode与a字符的keysym绑定,那么当按下键盘的a键时,对应的函数就会调用,系统就输入了字符a。
可以手动绑定keycode与keysym,也就是说,完全可以实现,按下a键,输入b字符。
使用如下命令绑定:
keycode <keycode> = <keysym>...
如,
keycode 50 = Caps_Lock
keycode 38 = a A
上面命令可以用xmodmap -e执行,也可以把它们写到文件里,然后用xmodmap file执行。
使用xmodmap -pke 命令查看目前keycode与keysym的绑定
(四)modifier
也叫修饰符。
像control、alt等按键,多了一个叫“修饰符”的概念,就是在按下键之后,除了输入字符,还多出一种功能(比如切换大小写),这个功能就是修饰功能。
有如下修饰符:
shift
lock
control
mod1
mod2
mod3
mod4
mod5
(五)绑定modifier与keysym
可以手动绑定modifier与keysym,也就是说,完全可以实现按下a键,切换大小写
使用如下命令绑定:
add MODIFIER = KEYSYM ...
如,
add Lock = Caps_Lock
add shift = Shift_L Shift_R
清除modifier的所有绑定:
clear MODIFIER
如,
clear Lock
clear shift
清除modifier的某个keysym:
remove MODIFIER = KEYSYM ...
如,
remove shift = Shift_R
上面可以使用xmodmap -e执行,也可以把它们写到文件里,然后使用xmodmap file执行。
使用xmodmap -pm查看目前modifier与keysym的绑定
shift Shift_R (0x3e), Shift_L (0x42)
lock Caps_Lock (0x32)
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)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c)
三、实战
互换shift和capslock
(一)~目录中创建.Xmodmap文件把下面的代码填进去
clear Lock
clear shift
keycode 50 = Caps_Lock
keycode 66 = Shift_L
add Lock = Caps_Lock
add shift = Shift_L Shift_R
代码意思就是:先清除modifier的keysym绑定,然后再重新绑定keycode与keysym,最后再绑定modifier与keysym。