xmodmap修改键映射

xmodmap修改键映射 by:lqk

 

获取操作系统代码到功能的映射

>xmodmap

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), Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3     
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

这里几个是功能键映射,前面3个可以直接看出来,mod1是alt功能,mod2是 Num_Lock,mod4是 super也就是窗口,mod5不知是什么。

————————————————————————————————————————————————————————————

获取物理按键到操作系统代码的映射

>xmodmap pk | grep Alt_R

108        0xffea (Alt_R)    0xffe8 (Meta_R)    0xffea (Alt_R)    0xffe8 (Meta_R)0xffea (Alt_R)    0xffe8 (Meta_R)   

也可以xenv来测试。

————————————————————————————————————————————————————————————

xmodmap的键总共有3个层次的概念, 以键盘上右alt键为例子。

1、键盘上那个物理按键代码 。(右alt键,物理键代码是0x6c,也就是108)

2、物理按键按下去后操作系统内表示为什么代码。(0xffea (Alt_R), 可以看出Meta_R也绑定在右alt键上。)

3、功能。(这里是mod1 也就是alt功能)

这3个层次间存在两个映射,1和2,2和3。

————————————————————————————————————————————————————————————

键盘        操作系统代码  功能代码

右alt键  -      Alt_R     -    mod1

————————————————————————————————————————————————————————————

 

 

 

1.改12映射,keycode 或 keysym可以改12间的映射。

>sudo xmodmap -e "keycode 108 = Control_L NoSymbol Control_L NoSymbol Control_L"

这条执行后,右alt键 映射为 Control_L了,但是使用中却没有效果。

>xmodmap

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69), 
mod1        Alt_L (0x40), Control_L (0x6c), Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3     
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

发现mod1里面包含Control_L (0x6c),也就是说 右alt键(0x6c),已经变成Control_L了,但是还是执行mod1(alt)的功能。但是远程的时候已经表现ctl功能了。

 

 


2.改23映射,add和remove、clear可以改23间的映射。

在~下建立.Xmodmap 文件。

内容为:

!Use right alt as left control
remove mod1 = Alt_R
add control = Alt_R
>xmodmap ~/.Xmodmap

可以正常使用右Alt键作为control使用了,Alt_R(操作系统内的表示)已经在control功能组了。

>xmodma

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69),  Alt_R (0x6c),
mod1        Alt_L (0x40), Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3     
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

但是右Alt键在操作系统内还是Alt_R。这时候远程到另一台机子,你就会发现右Alt键还是alt功能。因为发给远程计算机的指令还是Alt_R的。

 


3.只有12映射和23映射都改了才能实现右alt表现为control。

最好先改23,再改12。

在~下建立.Xmodmap 文件。

内容为:

!Use right alt as left control
remove mod1 = Alt_R
add control = Alt_R

keycode 108 = Control_L

>xmodmap ~/.Xmodmap

 

 

如果先改12,再改23。

!Use right alt as left control

keycode 108 = Control_L

remove mod1 = Control_L
add control = Control_L

因为要把右alt映射到Control_L,这时系统就有两个Control_L了,add control = Control_L会有歧义了。试了下,发现是add 两个都加上去,remove两个都去掉。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值