关闭

Ubuntu下修改键盘映射

标签: ubuntu
1422人阅读 评论(0) 收藏 举报
分类:

由于公司的电脑是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脚本解决。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:229933次
    • 积分:2013
    • 等级:
    • 排名:第19894名
    • 原创:33篇
    • 转载:1篇
    • 译文:5篇
    • 评论:57条
    文章分类
    最新评论