原文链接
偶然间看到一篇文章,在Linux下互换Capslock和LCtrl(链接忘了),然后就有了重新映射一下功能键的想法。新的映射如下:
物理按键 | 功能 |
---|---|
<kbd>CapsLock</kbd> | Control |
<kbd>LCtrl</kbd> | Escape |
<kbd>RAlt</kbd> | Control |
<kbd>RCtrl</kbd> | Caps lock |
下面是ubuntu16.04, gnome3的环境下设置键映射的方法,使用的是xkb。
用到的命令及工具有:dconf-editor, setxkbmap
编写映射文件
在/usr/share/X11/xkb/symbols
目录下面新建一个文本文件,不如就叫cus_map,然后往里面写入如下内容:
partial modifier_keys
xkb_symbols "my_maps" { // 这个my_maps名字可以自己定
// 右边alt当control使
replace key <RALT> { [ Control_L, Control_L ] };
// capslock当control使
replace key <CAPS> { [ Control_L, Control_L ] };
modifier_map Control { <CAPS>, <RALT> };
// 左边control当成esc
key <LCTL> { [ Escape ] };
}; // end
添加到数据库中
打开/usr/share/X11/xkb/rules/evdev
文件,找到! option = symbols
的行,在下面加入刚刚编写的映射,修改之后如下:
! option = symbols
cus_map:rctrl_as_caps = +cus_map(my_maps)
grp:shift_toggle = +group(shifts_toggle)
altwin:menu = +altwin(menu)
altwin:meta_alt = +altwin(meta_alt)
...
使其对gnome可见
打开/usr/share/X11/xkb/rules/evdev.lst
,在! option
一栏的后面加上一行:
...
esperanto:dvorak To the corresponding key in a Dvorak layout
esperanto:colemak To the corresponding key in a Colemak layout
solaris Maintain key compatibility with old Solaris keycodes
solaris:sun_compat Sun Key compatibility
terminate Key sequence to kill the X server
terminate:ctrl_alt_bksp Ctrl + Alt + Backspace
cus_map:my_maps my mappings
启用映射
方法一
使用dconf-editor修改数据库。
运行dconf-editor,找到/org/gnome/desktop/input-sources/xkb-options
,这是一个列表,往里面加入我们的map:['cus_map:my_maps']
。
如果之前里面有内容,用,
分隔字符串即可。
方法二
使用setxkbmap -print
查看当前的映射情况,如下:
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+cn:2+inet(evdev)+cus_map(rctrl_as_caps)" };
xkb_geometry { include "pc(pc105)" };
};
然后启用:
$ setxkbmap -layout cn -option cus_map:my_maps
最后
使用setxkbmap -layout <your layout>
,如果编写得没有错误,映射生效。
参考文章:
[Custom keymaps in GNOME 3 on Wayland](Custom keymaps in GNOME 3 on Wayland)
网友评论