Elementary OS使用Xkb修改按键映射,同时适用于其他使用Xkb库的Linux发行版

鸿则

目的

  1. 实现CapsL_Ctrl交换

  2. 实现自定义功能键:

    • R_Alt + H -> Left

    • R_Alt + J -> Down

    • R_Alt + K -> Up

    • R_Alt + L -> Right

    • R_Alt + 4 -> End

    • R_Alt + 6 -> Home

    • R_Alt + F -> Prior

    • R_Alt + N -> Next

以上按键映射主要是为了适应Vim,因为R_Alt我最不常用,固将其用作功能键。 关于Xkb是什么这里不做赘述,简单来说XkbX-Window的一个负责键盘映射的库。

步骤

  1. 查看当前使用的键盘布局,终端执行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)+group(alt_shift_toggle)"    };
        xkb_geometry  { include "pc(pc105)"    };
    };

    xkb_symbols属性后面的pcus即下面我们需要修改文件。

  2. 备份配置文件
    以下操作有风险,请在有linux操作系统使用经验的情况下操作
    切换到目录/usr/share/X11/xkb,执行sudo tar -cvf symbols.tar symbols打包原有的配置文件,然后进入目录symbols

  3. CapsL_Ctrl交换
    概念:

    每一个键配置(大括号)里面的方括号表示一个组,每个方括号里面用逗号隔开的内容表示不同的等级。
    使用`Shift`建可以切换等级,使用`Mode_switch`可以切换组。
    

    编辑pc文件,修改xkb_symbols "pc105"段,->表示前面的内容修改为后面的内容

    key <CAPS> { [ Caps_Lock   ] }; -> key <CAPS> {  [ Control_L   ] };
    key <LCTL> { [ Control_L   ] }; -> key <LCTL> {  [ Caps_Lock   ] };

    保存注销从新登录生效。

  4. 设置R_Alt为自定义功能键
    pc文件中的内容include "altwin(meta_alt)"可以看出R_Alt键的修改并不在pc文件中。
    我们编辑altwin文件。修改xkb_symbols "meta_alt"段,将R_Alt映射为Mode_switch

     key <RALT> { type[Group1] = "TWO_LEVEL", symbols[Group1] = [ Alt_R, Meta_R ] }; -> key <RALT> { type[Group1] = "TWO_LEVEL", symbols[Group1] = [ Mode_switch ] };
    
  5. 自定义R_Alt的功能
    修改us文件。编辑xkb_symbols "basic"段,修改以下内容

    key <AE04> {  [   4, dollar      ] }; -> key <AE04> {  [ 4, dollar      ], [ End   ]  };
    key <AE06> {  [   6, asciicircum ] }; -> key <AE06> {  [ 6, asciicircum ], [ Home  ]  };
    key <AC04> {  [   f,  F          ] }; -> key <AC04> {  [   f,  F        ], [ Prior ]  };
    以下类推修改为:
    key <AC06> {  [   h,  H   ], [ Left ] };
    key <AC07> {  [   j,  J   ], [ Down ] };
    key <AC08> {  [   k,  K   ], [ Up ] };
    key <AC09> {  [   l,  L   ], [ Right ]  };
    key <AB06> {  [   n,  N   ], [ Next ] };

    注销从新登录有效

参考

阅读 3.4k
2.4k 声望
13 粉丝
0 条评论
2.4k 声望
13 粉丝
文章目录
宣传栏