1、修改方法
文本界面和图形界面的keycode是不一样的,按键映射方式不同,因此修改方法不同。
1.1 文本界面
1.1.1 修改命令
在文本界面,dumpkeys 可以查询当前keycode。在文本或图形界面loadkeys 可以修改,例如将ctrl+alt+g修改为打开虚拟终端tty1的快捷键。g的keycode是35。
kylin@kylin-os:/etc/systemd$ sudo loadkeys -u
[sudo] kylin 的密码:
正在加载 <stdin>
contron alt keycode 35 = Console_1
ctrl+d确认修改。
但是用命令会在重启后失效,要不在启动的某个脚本中添加该命令,要不就修改映射文件;
1.1.2 修改映射文件
/etc/console-setup下 cached.kmap.gz 解压,根据dumpkeys的结果找到对应的设置项后修改。
这是dumpkeys的部分结果:
keycode 35 = +h
shift keycode 35 = +H
shift altgr keycode 35 = +H
control keycode 35 = BackSpace
shift control keycode 35 = BackSpace
altgr control keycode 35 = BackSpace
shift altgr control keycode 35 = BackSpace
alt keycode 35 = Meta_h
shift alt keycode 35 = Meta_H
altgr alt keycode 35 = Meta_h
shift altgr alt keycode 35 = Meta_H
control alt keycode 35 = Meta_BackSpace
shift control alt keycode 35 = Meta_BackSpace
altgr control alt keycode 35 = Meta_BackSpace
cached.kmap文件的部分内容:
keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace +U+0048 +U+0068 +U+0048 +U+0068 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Meta_BackSpace Meta_BackSpace Meta_BackSpace Meta_BackSpace
希望得到control alt keycode 35 = Console_1的话, cached.kmap文件修改为:
keycode 35 = +U+0068 +U+0048 +U+0068 +U+0048 BackSpace BackSpace BackSpace BackSpace Meta_h Meta_H Meta_h Meta_H Console_1 Meta_BackSpace Meta_BackSpace Meta_BackSpace ...
1.2 图形界面
可以通过xev来获取相应按键的keycode和keysym值。
1.2.1 通过xmodmap修改
xmodmap -pk 查看当前映射规则;
xmodmap修改本人只实验修改单独按键和shift+单个按键的两种,其他情况没搞清楚,这两种设置方式有其他文章说明,此处不细说;
1.2.2 通过xkb修改相应文件
kylin@kylin-os:/etc/console-setup$ cd /usr/share/X11/xkb/
kylin@kylin-os:/usr/share/X11/xkb$ ls
compat geometry keycodes rules symbols types
xkb下有6个文件夹,此处关注symbols文件夹下
文件名 | 简介 |
---|---|
pc | 修饰键对应规则 |
us | English us 键盘布局规则 |
srvr_ctrl | fkey 对应 vt 的规则 |
未完待续 |
xkbcomp $DISPLAY filename
查看xkb keymap信息,包括keycodes、types、compatibility、symbols、geometry,根据名称查找该条目在哪个文件中设置。
例如将ctrl+alt+g修改为打开虚拟终端tty1的快捷键,
在/usr/share/X11/xkb/symbols/us文件,xkb_symbols “basic” 中
key <AC05> { [ g, G ] };
改为:
key <AC05> {type[Group1] = "CTRL+ALT",
symbols[Group1] = [ g, G, NoSympol, NoSympol, XF86Switch_VT_1 ] };
参考:
1、https://www.charvolant.org/doug/xkb/html/xkb.html
2、https://github.com/Chunlin-Li/Chunlin-Li.github.io/blob/master/blogs/linux/ubuntu-xkb-keyboard-remap.md