虽然linux下小键盘还是不能用,但是找到一篇好文章

linux系统下键盘按键的重新映射——xmodmap工具和xev工具

文章目录

  • 1. xev工具:
  • 2. xmodmap工具
大家会不会有时候,感觉键盘上的某几个键用起来不是很方便,打字打久了很容易手指头疼呢?

例如大家使用vim编辑器时, 经常需要使用到esc键,而该键在左上角,很不方便的。再比如写程序的时候,经常会使用到shift键与其它键的组合等。把键盘按键进行必要的重新映射,可以提高生产率的。对键盘按键重新映射的大致过程如下:
第一步,通过 xev 工具获得需要修改的按键的 keycode 值;

第二步,通过xmodmap工具修改由keycode到keysym的映射。(keycode与keysym的含义正文会说明)

1. xev工具:

功能:通过它可以知道键盘上每一个按键的编码,即keycode, 这个键码与键盘硬件有关系,固定不变的。你想想啊,键盘上这么多按键,怎么让计算机去区分啊?就是通过这个keycode值,每当我们按下一个键时,内核中中断系统就会接收到一个keycode, 从而判断你按下了哪个键。具体操作系统怎么处理这个按键,那就需要keycode值到keysym的映射来决定了。

yin@debian:~$ xev

如何安装:在我的debian系统上,已经默认存在了,这个工具在安装系统的时候应该就会安装上的,直接运行命令如何命令即可(如果没有自带的话, 我还真不知道怎么安装呢):

上图中显示了我keycode 50 对应 keysym: Control_L和keycode 66 对应 keysym: Shift_L的相关信息。(我已经重新映射之后的信息)

2. xmodmap工具

功能:用于修改按键keycode值到按键功能keysym的映射。

如何安装:它在我的debian系统上,也已经默认存在了,没有研究怎么安装,拿来直接用的。

什么是keysym呢? 即key symbol,咱们可以把它理解了符号或功能,我按下这个键,我就想要得到一个符号对不对?例如我按下A键,就是想知道一个 a 或者 A吧,这个就是keysym. 再例如,我按下了control_L对应的键, 我就想得到control_L 符号或使用这个功能吧。

从keycode到keysym的映射不是一一对应的,一个keycode值可以对应多个keysym:例如 a键(keycode为 )就对应的 a, 与对应的 A 。具体是这么规定的,举个例子来说吧,例如A 键的映射如下:

1 keycode 38 = a A a A
它表示键盘上A键对应的keycode为38, 它被映射为的keysym为四个:a / A / a / A, 它们的含义分别为按以下组合时对应的:A键 / Shift + A键 / Mode_switch + A键 / Mode_switch + Shift + A 键。除了A键之外,其它的组合键称作修饰键 (modifier), 每一个 keycode值最多应该可以映射6个或8个的keysym吧,反正够咱们用了。前6个keysym的意义如下:

1 Key
2 Shift+Key
3 Mode_switch+Key
4 Mode_switch+Shift+Key
5 ISO_Level3_Shift+Key
6 ISO_Level3_Shift+Shift+Key
当我们定义我们自己的映射时,这6个或8个的keysym不需要全部都写满,你想用几个就写几个就可以了。假如我想用第一个和第三个keysym时,第二个keysym的值使用 NoSymbol 代替,它表示空。

如何映射呢? 直接 使用 keycode 值 = keysym 即可。例如下面是我自己设置的键盘映射: (使用!表示注释, 下面的内容位于 ~/.Xmodmap文件内)

复制代码
1 ! 把esc键更换为Caps_Lock
2 keycode 9 = Caps_Lock NoSymbol Caps_Lock
3
4 !把Caps_Lock键更换为Shift_L
5 keycode 66 = Shift_L NoSymbol Shift_L
6
7 !把Shift_L键更换为Control_L键
8 keycode 50 = Control_L NoSymbol Control_L
9
10 ! 把Control_L键更换为Alt_L键
11 keycode 37 = Alt_L Meta_L Alt_L Meta_L
12
13 ! 把Alt_L键更换为ESC键
14 keycode 64 = Escape NoSymbol Escape
15
16 ! 把Enter键更换为Shift_R键
17 keycode 36 = Shift_R NoSymbol Shift_R
18
19 ! 把Shift_R键更换为Return 键
20 keycode 62 = Return NoSymbol Return
复制代码

接下来说说按键中的修饰符,即modifier.  例如我们常用的shift/ ctrl /alt/等都起着修饰的作用,它们可以和别的按键进行组合 ,产生不同的效果。

在我们系统中,一共存在着8个修饰符:分别为: shift/ lock/ control/ mod1/ mod2/ mod3 /mod4/ mod5. 我们可以把每一个keysym 设置为修饰符,例如我把 a 设置为修饰符的control修饰符的话,把以后按 a + c 就可以表示复制了。 每一个修饰符都可以对应多个keysym的, 下面是我的电脑的修饰符:

复制代码
1 shift Shift_R (0x24), Shift_L (0x42)
2 lock Caps_Lock (0x9)
3 control Control_L (0x32), Control_R (0x69)
4 mod1 Alt_L (0x25), Alt_R (0x6c), Alt_L (0xcc), Meta_L (0xcd)
5 mod2 Num_Lock (0x4d)
6 mod3
7 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
8 mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
复制代码

如果设置呢?常用的命令包括:clear/ remove/ add 操作,举例来说:(下面的内容也是位于.Xmodmap文件中)

复制代码
1 ! 把绑定到control修饰符的Control_L移除:
2 remove control = Control_L
3
4 ! 把绑定到control修饰符上的所有 keysym 都移除:
5 clear control
6
7 ! 现在添加Control_R 都shift 修饰符:
8 add shift = Control_R
复制代码
需要说明的是: 修饰符是与 keysym 对应的keycode值绑定的,当我们修改了与修饰符相关的按键之后,记得更新一下相关的修饰符,否则的话,修饰符还是绑定在的物理按键上,而还是绑定到你新映射的物理按键上。

  1. 配置
    如何使用xmodmap这个工具来配置按键映射呢? 有两种方法 ,一种是命令行的形式,一种是配置文件的形式。

  2. 命令行形式:

当我们输入xmodmap -h 时,会显示如下:

复制代码
yin@debian:~$ xmodmap -h
usage: xmodmap [-options …] [filename]

where options include:
-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
复制代码
因此呢,我们可以都过 -e 参数,运行我们刚才介绍的命令,例如:


# a的物理按键对应的keycode值为38
# 把a按键映射成b按键
yin@debian:~$ xmodmap -e "keycode  38 = b B NoSymbol B"
  1. 使用配置文件

我们可以把配置文件放到~/目录下,命名为 .Xmodmap文件,当我们定义好配置文件之后 ,使用命令 xmodmap ~/.Xmodmap 运行就即了。我们可以把该命令增加到~/.bashrc文件中:

# 执行按键的重新映射   ---- 殷大侠 2018-12-18
if [ -f ~/.Xmodmap ]; then xmodmap ~/.Xmodmap; fi

额外说明: xmdomap软量级的键盘映射方案,电脑重启之后 就重置了,如果想要有更高级的需求,请使用 X keyborad extension。

附:我的.Xmodmap文件:

复制代码
1 !!! 修改相应的键盘映射: !!!
2 !
3 ! 把esc键更换为Caps_Lock
4 keycode 9 = Caps_Lock NoSymbol Caps_Lock
5
6 !把Caps_Lock键更换为Shift_L
7 keycode 66 = Shift_L NoSymbol Shift_L
8
9 !把Shift_L键更换为Control_L键
10 keycode 50 = Control_L NoSymbol Control_L
11
12 ! 把Control_L键更换为Alt_L键
13 keycode 37 = Alt_L Meta_L Alt_L Meta_L
14
15 ! 把Alt_L键更换为ESC键
16 keycode 64 = Escape NoSymbol Escape
17
18 ! 把Enter键更换为Shift_R键
19 keycode 36 = Shift_R NoSymbol Shift_R
20
21 ! 把Shift_R键更换为Enter键
22 keycode 62 = Return NoSymbol Return
23
24
25 ! 如果修改的按键涉及到了修饰键(modifier), 那么就需要更新一下相应的修饰键,因为它们是和keycode绑定的
26 !
27 ! 更新modifier键之前的结果:
28 ! xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
29 !
30 ! shift Shift_L (0x32), Shift_R (0x3e)
31 ! lock Caps_Lock (0x42)
32 ! control Control_L (0x25), Control_R (0x69)
33 ! mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
34 ! mod2 Num_Lock (0x4d)
35 ! mod3
36 ! mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
37 ! mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
38
39 !: 更新相应的修饰键的值:
40 clear shift
41 clear lock
42 clear control
43 clear mod1
44 add shift = Shift_L Shift_R
45 add lock = Caps_Lock
46 add control = Control_L Control_R
47 add mod1 = Alt_L Alt_R Meta_L
48
49 !更新后的修饰键之后的结果:
50
51 ! xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
52 !
53 ! shift Shift_R (0x24), Shift_L (0x42)
54 ! lock Caps_Lock (0x9)
55 ! control Control_L (0x32), Control_R (0x3e)
56 ! mod1 Alt_L (0x25), Alt_R (0x6c), Alt_L (0xcc), Meta_L (0xcd)
57 ! mod2 Num_Lock (0x4d)
58 ! mod3
59 ! mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
60 ! mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
61 !

linux系统下键盘按键的重新映射——xmodmap工具和xev工具相关推荐

  1. Linux系统中键盘按键背光变化无法反映到图形界面问题的深入分析1 —— 问题现象及初步定位

    最近一直在发关于ideapad-laptop.c(位于<内核源码根目录>/drivers/platform/x86/下)的系列文章,究其原因,是因为工作中遇到了一个问题,描述如下: 在笔者 ...

  2. linux时序图工具,在Linux系统下通过IAuto.deb或星火商店安装IAuto流程图工具

    以下将提供针对Linux系统的IAuto.deb包下载,也可以通过星火应用商店来安装IAuto,亲测在Deepin 20系统中可用.其实IAuto流程图软件可以解决Linux没有Visio软件的问题, ...

  3. Linux系统下键盘输入错乱,鼠标滚轮只调整图标大小

    正在使用的电脑突然遇到了这些问题:点击子文件夹不跳转,点击父文件夹弹出了新窗口,键盘输入错乱,滑动鼠标滚轮调整图标大小 在网上搜了很多解决方案,但是找不到设置路径什么的 最后解决办法很简单! ctrl ...

  4. android:添加usb键盘+按键布局和映射的修改

    android下的按键布局和映射 这个笔记整理一下使用usb键盘遇到的问题,比如添加usb键盘的keylayout,添加按键,修改按键映射等. 本文参考了: http://blog.csdn.net/ ...

  5. 浅谈linux系统下常见的故障与处理方法

    与windows系统一样,linux操作系统也会存在很多问题和故障,很多linux新手都害怕故障,面对出现的问题显得无可奈何,更有甚者,由此放弃了linux,其实,我们不应该惧怕问题,学习就是一个发现 ...

  6. Linux系统下的进程间通信(IPC)

    Linux系统下的进程间通信(IPC) 进程间通信作用: 通信方式: 一.早期unix系统的ipc 1.匿名管道(pipe) 2.命名管道(fifo) 3.信号 二.Sytem -V ipc Syst ...

  7. linux系统下grub.cfg详解和实例操作

    linux系统下grub.cfg详解和实例操作 简介 grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文 ...

  8. cmd调取windows组件的dos命令大全和常用网络工具,及Linux系统下命令大全

    前言 windows与liunx系统,有许多相同,但有些不通的地方,通过一下的比较,可以加深记忆.若在windows下,某个组件不工作,或者网络不通,或许cmd调取windows组件的dos命令大全: ...

  9. Windows和Linux系统下的共享文件夹配置

    说明 Linux和Windows系统下共享文件夹的方法,我所掌握实现的有samba与xftp两种.虽说有办法可以实现文件夹或文件的直接拖动传输.但是对于内存较大的文件可能不太方便;同样,直接拖动传输文 ...

最新文章

  1. python[外星人入侵] 项目
  2. Xamarin.Android开发实践(一)
  3. 独家 | 林元庆新征程:创立AIbee估值8亿,毗邻百度,吴恩达助攻
  4. Dive into Spring framework -- 了解基本原理(二)--设计模式-part2
  5. Android内存泄漏分析心得
  6. Android 逐帧动画isRunning 一直返回true的问题
  7. 智能合约语言 Solidity 教程系列3 - 函数类型
  8. 天正的计算机快捷命令大全,天正建筑快捷键大全:天正建筑cad快捷键命令大全...
  9. 单片机 MSP430 串口 计算 波特率
  10. c# EASYUI+MVC filebox示例
  11. HighNewTech:元宇宙(metaverse)的简介(多角度理解与探讨)、发展历史、现状与未来
  12. Arch Linux 下安装 st (终端模拟器)
  13. python项目实战:实现王者荣耀敏感词汇过滤器
  14. Python-day11~13-前端初步
  15. 前序遍历、中序遍历、后序遍历
  16. mysql查找附近算法_Java+MySQL实现附近功能
  17. N4 新标日初级下 问法总结和课后练习题12答案
  18. 小区门禁卡可以复制到手机上吗_如何用手机复制小区门禁卡,一招就可以解决!...
  19. 关于ArcGIS中选择属性值为空的语句
  20. eBoostr v4.0 Build 544b中文特别版

热门文章

  1. python统计excel中重复数据_Python中用pandas对标Excel自带功能——去除重复项
  2. dva是什么游戏_Dva爱你哟 她原来就是韩国少女宋哈娜原型
  3. matlab下载光盘刻录,最新的linux下dvd刻录软件,支持DVD+RW、DVD-RW光盘刻录。
  4. TpLink路由访问控制
  5. 数据类型、变量、字符串(工匠工坊第二课)
  6. java中mysql分组查询_ES对应mysql的group by分组查询javaApi,多对多关系的分组查询...
  7. 12306从上海到湖南境内的终点站车次或从湖南境内始发到上海的车次
  8. 用html做成的音频播放器,HTML5制作酷炫音频播放器插件图文教程
  9. 【图书】前端工程化:体系设计与实践
  10. CentOS 7提供的ISO镜像文件