Ubuntu下修改键盘映射

原创 2016年08月29日 00:13:47

由于公司的电脑是MAC,而我自己家里面的电脑是Ubuntu,在开发环境中,各种快捷键经常离不开ctrl和alt键,但是mac和其他电脑键盘这两个键的位置正好相反,因此在家和在公司来回切换键盘的使用习惯是相当痛苦的事情。
其实,最简单的方法就是修改MAC下面的键盘映射,这样在使用的时候就统一了。但是由于我之前一直使用的是MAC,对于其中的快捷键使用已经习惯并产生了依赖,因此我决定将家里的电脑的ctrl和alt映射成MAC的键盘布局。

xmodmap

我开始使用的是xmodmap来修改键盘映射,由于在Unbuntu14.06之后系统已经集成了Xmodmap,因此修改起来相对简单,即将如下内容保存为~/.Xmodmap文件,并使用xmodmap ~/.Xmodmap执行使映射生效就可以更改完成。

remove mod1 = Alt_L 
remove control = Control_L 
keysym Control_L = Alt_L 
keysym Alt_L = Control_L 
add mod1 = Alt_L 
add control = Control_L 

这种方法成功将我的笔记本的键盘的左ctrl和左alt交换位置,使用起来和MAC的体验差不多了。

HWDB

但是后面我将我的外接键盘接入后发现,这种映射方式对于外接键盘没有生效。google了一下,最后在这里找了解决方法,简单来说就分为以下几个步骤:

  1. 使用lsusb来确定外接键盘的ID并记下,后面会用到。例如:

    Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 096: ID 046a:0014 Cherry GmbH 
    Bus 001 Device 094: ID 046a:0011 Cherry GmbH G83 (RS 6000) Keyboard
    Bus 001 Device 005: ID 17ef:100a Lenovo ThinkPad Mini Dock Plus Series 3
    Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
    
  2. 确定需要映射键位的keycode,推荐使用getscancodes来检测对应键位的keycode,下载地址在这里, 下载后可以根据自己的情况进行编译:

    $ tar -xzf getscancodes-1.0.tar.gz
    $ cd getscancodes
    $ make
    gcc -O2 -Wall -c -o getscancodes.o getscancodes.c
    gcc -o getscancodes getscancodes.o
    $ ./getscancodes 
    Usage: ./getscancodes /dev/input/eventX
    Where X = input device number
    

    当然我是直接使用的下载文件夹中编译好的getscancodes文件。由于每个输入设备在/dev/input目录下都有一个对应的event文件,可以通过插拔对应的输入设备来确定设备对应的是哪个event文件,然后就可以使用getscancodes来确定对应键盘键位的keycode,例如$ sudo ./getscancodes /dev/input/event11

    Input driver version is 1.0.1
    Input device ID: bus 0x3 vendor 0x46a product 0x14 version 0x111
    Input device name: "HID 046a:0014"
    458850 (0x70062)
    

    其中按下对应键后屏幕输出的信息就是这个键位对应的信息,其中第四行中的0x70062就是对应键的keycode。

  3. 创建映射配置文件。在确定了输入设备ID和对应键位的keycode后,就可以在/etc/udev/hwdb.d/目录下创建配置文件来实现映射,配置文件必须以hwdb作为扩展名,示例内容如下:

    keyboard:usb:v046Ap0014*
     KEYBOARD_KEY_0x70062=mute
     KEYBOARD_KEY_0x70059=calc
     KEYBOARD_KEY_0x70029=prog1
    

    其中第一行指明了需要修改映射的输入设备,其中v046Ap0014*就对应输入键盘的ID,注意:ID中的字母必须为大写,并以v开头,p分隔和*号结尾。
    后面的几行必须以空格开头,等号前的16进制数据部分就是对应键的keycode,等号后面为键映射后的标示符,其中有效的标示符大家可以查看这里。创建好了配置文件4. 后就可以通过重启或者$ sudo udevadm -d hwdb –update;sudo udevadm -d control –reload来使配置生效。
    最后测试使用第二种方法成功将我的外接键盘进行了映射。但是还有一个问题是,如果在映射生效后如果再插拔设备,那么本次映射就失效了,需要重新执行第4步来重新使配置生效。不过好在这个问题应该可以通过shell脚本解决。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ubuntu14.04 修改键盘映射 CapsLock->Ctrl

sudo vim /etc/default/keyboard 修改下面这一行:(改变capslock为ctrl) XKBOPTIONS="ctrl:nocaps" 如下图所示: ...

Ubuntu 14.04 下通过 XKB 修改键盘映射, 实现自定义按键

https://github.com/Chunlin-Li/Chunlin-Li.github.io/blob/master/blogs/linux/ubuntu-xkb-keyboard-remap...

Ubuntu下更改键盘映射--Caps_Lock、Esc和Control_L

由于最近使用AS编程的时候安装了Vim插件,慢慢开始学习使用。但是频繁的Esc及Control操作给左手小指带来很大的负担,所以参考网上的方案将Caps_Lock键替换为Control左键,将~(Es...
  • wwl0115
  • wwl0115
  • 2016年07月14日 14:05
  • 669

notes Ubuntu 重新映射键盘布局

google xmodmap 老 失效 http://forum.ubuntu.org.cn/viewtopic.php?t=463634 xkeyboard-configgoogle linux...

Ubuntu修改默认键盘布局的方法(适用于13.04|14.04)

http://blog.csdn.net/jdpshq/article/details/9672065方法1:也许是以前的Ubuntu版本可以用这个命令改,现在的键盘布局被独立分开设置,于是我尝试了一...

Ubuntu修改默认键盘布局的方法(适用于13.04)

由于一下大意,当初安装Ubuntu的时候选了键盘布局为英国的键盘布局,打代码的时候‘#’打成了一个类似‘f’的符号,‘|’打成了'~',非常烦人,想直接用图形界面改,发现改了以后有时会莫名其妙地自动变...
  • jdpshq
  • jdpshq
  • 2013年07月31日 20:07
  • 33491

Ubuntu下键盘按键替换

首先要知道键盘每个击键的Keycode, 这个可以使用xev在一台键盘layout相同的电脑上查到。 得知ESC的keycode是9,Symbol为"Escape" 准备替换为WinKey(就是...

修改Ubuntu键盘布局

Ubuntu默认的英文键盘布局非常的奇怪,

Ubuntu16.04 自定义快捷键

刚刚使用Ubuntu系统时,遇到了快捷键无法自定义的问题,走了许多弯路,这里给大家总结一下。 很多大神说打开系统首选项或者使用命令gconf-editor,但是我用的系统是Ubuntu 16.04 ...

使用synergy设置mac和ubuntu共享一套鼠标键盘

版本信息: mac os版本 10.10.5  64bit ubuntu版本 14.04 64bit 提示: 1.ubuntu作为server;mac作为client 2.都需要安装synergy...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ubuntu下修改键盘映射
举报原因:
原因补充:

(最多只允许输入30个字)