Ubuntu18.04下更改或自定义键位(通过xkb)

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

XKB : 全称 X Keyboard Extension, 是 Liunx 下管理键盘输入的一套较为复杂的系统. Ubuntu 18.04采用这套系统来支持图形界面下的键盘管理.

几个基本概念

key code : 键盘上按键的物理代号或者说是物理座标, 比如Q键是 <AD01>, 我们可以改变它的映射,让Q键变成A键, 但是这个键的 Key code 还是 <AD01>。

key symbols : 表示按键的实际意义, 比如 <AD01> 只是一个键盘上按键的位置, 而字母Q是一个具有实际意义的符号, 当 key code 和 key symbols 建立关联后, 按下 <AD01> 位置的按键, 就会输入一个字母 Q.

按键和符号建立了联系, 可是, 我们一个按键上可不止一种符号. 比如, 小写的 q 和 大写的 Q 都是在一个按键上, 这就需要引入以下的概念了

level : 我们键盘上的按键, 通常都是通过切换 level 来实现的, 比如 小写字母是 level 1 , 而大写字母是 level 2. 通常只有 2 个 level , 但是我们也可以增加更多的 level 来让一个按键可以表示更多的意义.

group : 作用类似于 level, 但一般是用于切换整个字符集. 比如要用键盘输入日语啥的.

modifier key : 起修饰作用的键, 比如常见的 Shift, Ctrl, Caps Lock 都属于修饰键.

基本的配置修改步骤

这里以我自己的使用习惯为例, 介绍一下 xkb 的比较简单的配置修改方式. 注意这并不是唯一的修改方式.

使用命令查看当前的键盘方案 : setxkbmap -print

我这里显示的是:

$ setxkbmap -print

xkb_keymap {

        xkb_keycodes  { include "evdev+aliases(qwerty)" };

        xkb_types    { include "complete"      };

        xkb_compat    { include "complete"      };

        xkb_symbols  { include "pc+us+inet(evdev)"    };

        xkb_geometry  { include "pc(pc105)"    };

};

留意 xkb_symbols 这行, 其中显示是 pc + us. 说明我们需要修改的就是这两个 symbols 文件 inet 一般用不到.

根据之前介绍的概念, 我们修改按键映射, 其实就是修改 key code 和 key symbols 之间的映射关系, 这个映射关系主要保存在以下路径下:

配置文件的位置 : /usr/share/X11/xkb/symbols/

在以上路径下可以找到 pc 和 us 两个文件.

强调一下: 注意备份原始的配置文件, 否则改键失败有可能只能重装系统了

使用 vim 等编辑器打开 pc 文件, 会看到类似如下结构

default  partial alphanumeric_keys modifier_keys

xkb_symbols "pc105" {

include "pc(editing)"

key <LCTL> {  [ Control_L ]  };

};

其中前两行的部分是这个区块的头, 可以类比与编程语言中函数或方法的概念. 那这两行其实就是函数(方法)的声明(签名).

花括号中的部分是主体内容.

include 的功能就是其字面意思, 将其他部分的内容包含进来. 小括号左边的部分即例子中的 pc , 其实就是当前我们编辑的这个文件, 当然他也可以是别的 symbols 文件夹下的文件名. 而小括号内的部分是前面的名称指定的文件中的一个区块名称. 这里引入的是 pc 中的 editing 区块, 它其实就在这个文件的最后面. 而我们当前所在的区块, 按照这种命名方式就应该是 pc(pc105) 了.

第四行就是定义按键实际意义的部分了. 左边的格式固定为 key <key code>, 表示要定义哪个物理按键. 右边的花括号中包含其按键意义, 一个中括号是一个 group, 也可以定义多个 group, 可以这样跟在后面写, 中括号内是不同 Level 的意义, level 的个数最多支持 8 个:

key <xxx> { [ level 1 , level 2, level3, ... ],

[ level 1 , level 2 ] }

我要在 pc(pc105) 中找到 Key <CAPS> 的设置项, 把 symbols 改为 [ Mode_switch ]. 这样, 就把大小写切换键改为模式切换键. (模式切换键可以用于将一个按键的符号意义切换到 group 2)

至此, 所有 CAPS + AnyKey 会被映射到这个键的 Group1 符号组. (模式切换键也可以按照同样的思路改为其他按键, 只要自己觉得习惯, 并且和现有的其他组合键尽量避免冲突即可)

下来需要将我需要的功能绑定到对应的按键上了, 需要编辑 us 文件, 这是 English us 键盘布局. 这个文件的结构与 pc 类似, 只不过要长得多.

虽然 us 文件很长, 但是我所要实现的功能只需要关注 us(basic) 区块就足够了.

key <AD08> { [ i, I ] }; 这行, 我需要让 Caps Lock + i 变成方向键上, 我只需将其改成 :

key<AD08>{ [ i, I ], [ Up ] };

第二个中括号就是 group 2 了, 其中只包含一个 Up, 就是说这个 group 中只有一个 Level 1.

同样的道理, 找到别的键, 并设置好自己想要的映射. 我使用的映射是:

// 默认都是按住 Mode_switch 键 (即改后的 Caps Lock) 的i -->Upj -->Leftk -->Downl -->Rightu -->Homeo -->End[ -->Prior (PageUp);-->Next (PageDown)d -->BackSpacef -->Delete// 在 Poker 2 这种紧凑的键盘上, 数字键 1-0 以及 -=键依次加上  F1 - F12 键

全部配置完之后, 保存.

注意: 接下来的步骤有可能导致系统不能正常使用. 没有 Linux 使用经验的朋友请在高手指导下操作, 或者做好重装系统的准备.

现在需要让系统重新编译配置文件, 我们进入以下路径: /usr/share/X11/xkb/rules , 将该路径下所有的 .xml 文件都删除. 然后 重启电脑, 再重新登录到图形界面. 如果一切顺利, 此时按键修改完成.

你很有可能碰到以下两种情况:

键盘还是原先的老样子, 按键并没有修改成功 恭喜你, 虽然没有成功, 但至少不算最糟. 这种情况, 没有一般, 一定是由于某些配置步骤遗漏, 致使 group 2 没有被正常触发. 用户登录界面, 即输密码的界面右上角, 有个星星状图标, 点以下打开屏幕虚拟键盘, 看看 Caps Lock 键有没有按照预期发生改变, 比如 Mode_switch 按键在这里会显示 AltGr. 仔细检查配置文件后重新来过.

键盘上的所有按键都完全没有任何反应, 只有鼠标能动 呵呵, 这种情况我真的只能呵呵了, 由于水平有限, 我自己的解决方案是, 用 ubuntu 启动 U 盘启动, 进入试用, 然后通过挂载上来的原磁盘, 找到配置文件仔细检查, 这种问题一般是由于格式错误, 括号写反等低级错误导致, 也有是因为配置了一种 xkb 不支持的映射, 找到他们, 尝试修改, 重新再试. 如果实在搞不定, 直接恢复成之前备份的配置文件, 放弃改键吧. xkb 的难用是出了名的. 替换完后删掉 .xkm 文件重启就 OK 了.

鄙人自己的键位配置为:

        物理键位 Esc                      --> 效果为 CapsLock

        物理键位 Shift+Esc             --> 效果为 `(数字1左面那个键)

        物理键位 ~`(波浪键)            --> 效果为 Esc

        物理键位 Shift+~`(波浪键)   --> 效果为 ~

        物理键位 CapsLock             -->效果为 ModeSwitch (单独按下没有用, 必须配合其他键使用, 和Shift键类似)

                以下几个键位全部是和物理键位CapsLock(即效果键位ModeSwitch)有关的, 同时按下ModeSwitch和另外的键才生效:

                ModeSwitch + h    -->    方向键← (同vim中的h,j,k,l)

                ModeSwitch + j     -->    方向键↓    (同vim中的h,j,k,l)

                ModeSwitch + k    -->    方向键↑    (同vim中的h,j,k,l)

                ModeSwitch + l     -->    方向键→  (同vim中的h,j,k,l)

                ModeSwitch + y    -->  Home键

                ModeSwitch + o    -->    End键

                ModeSwitch + i     -->    Insert键

                ModeSwitch + d    -->    Backspace键

                ModeSwitch + f     -->    Delete键

                ModeSwitch + c    -->    Esc键

                ModeSwitch + m   -->    Enter键

                ModeSwitch + Backspace    -->    Delete键

                Shift + Backspace                -->    Delete键



最后按如下参考步骤配置即可:

        sudo cp -rf /usr/share/X11/xkb /usr/share/X11/xkb.bak    # 备份xkb文件夹以放心大胆操作

        cd /usr/share/X11/xkb/rules    # 进入rules目录, 并删除目录下的xml文件

        sudo rm -rf *.xml

        cd /usr/share/X11/xkb/symbols

        sudo vi pc    # 将文末的pc配置文件粘贴入覆盖原pc文件即可

        sudo vi us    # 将文末的us配置文件粘贴覆盖原us文件的前58行即可, 只覆盖前58行, 其余保留不动

        接下来重启电脑即可


贴上鄙人的pc和us这两个文件的内容:(文章太长, 简书不让发布, 于是将pc和us两个文件放于下一篇)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354