我想做一个自定义控制台密钥映射,如所描述的在Arch-Wiki
这是我的档案:
# /usr/local/share/kbd/keymaps/personal.map
include "us"
# swap Caps_Lock and Escape
keycode 1 = Caps_Lock
keycode 58 = Escape
# swap left Alt and Control
keycode 29 = Alt
keycode 56 = Control
# German stuff
keymaps 0-3
keycode 22 = u U udiaeresis Udiaeresis
keycode 24 = o O odiaeresis Odiaeresis
keycode 30 = a A adiaeresis Adiaeresis
keycode 31 = s S ssharp当我尝试用loadkeys /usr/local/share/kbd/keymaps/personal.map加载它时,我得到:
cannot open include file us
syntax error, unexpected ERROR当然,us是localectl list-keymaps的结果。
如果我像Arch示例中那样用include "us"替换include "linux-with-two-alt-keys",它确实会像预期的那样工作。
为什么我不能包括us地图?
发布于 2021-01-20 13:35:14
快速strace loadkeys /usr/local/share/kbd/keymaps/personal.map显示,只搜索include目录和当前工作目录,以查找要包含的文件,并可以通过locate进行检查:
$ sudo updatedb
$ locate -r "keymaps.*\.inc$"
/usr/share/kbd/keymaps/i386/include/azerty-layout.inc
/usr/share/kbd/keymaps/i386/include/compose.inc
/usr/share/kbd/keymaps/i386/include/euro1.inc
/usr/share/kbd/keymaps/i386/include/linux-keys-bare.inc
/usr/share/kbd/keymaps/i386/include/linux-keys-extd.inc
/usr/share/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc
/usr/share/kbd/keymaps/i386/include/linux-with-modeshift-altgr.inc
/usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc
/usr/share/kbd/keymaps/i386/include/qwerty-layout.inc
/usr/share/kbd/keymaps/i386/include/qwertz-layout.inc
/usr/share/kbd/keymaps/mac/include/apple-a1048-base.inc
/usr/share/kbd/keymaps/mac/include/apple-a1243-fn-reverse.inc
/usr/share/kbd/keymaps/mac/include/apple-a1243-fn.inc
/usr/share/kbd/keymaps/mac/include/mac-azerty-layout.inc
/usr/share/kbd/keymaps/mac/include/mac-linux-keys-bare.inc
/usr/share/kbd/keymaps/mac/include/mac-qwerty-layout.inc
/usr/share/kbd/keymaps/mac/include/mac-qwertz-layout.inc实际上,所有.inc文件都驻留在名为include的目录中。
我无法找到kbd手册中包含机制的解释,但也可以通过阅读源代码来推断:
static const char *const include_dirpath0[] = {
"",
NULL
};
static const char *const include_dirpath1[] = {
"",
"../include/",
"../../include/",
NULL
};
static const char *const include_dirpath3[] = {
DATADIR "/" KEYMAPDIR "/include/",
DATADIR "/" KEYMAPDIR "/i386/include/",
DATADIR "/" KEYMAPDIR "/mac/include/",
NULL
};您还可以看到.inc后缀自动添加到包含的文件中。:
static const char *const include_suffixes[] = {
"",
".inc",
NULL
};因此,要使loadkeys /usr/local/share/kbd/keymaps/personal.map成为您需要的:
zcat /usr/share/kbd/keymaps/i386/qwerty/us.map.gz > /usr/local/share/kbd/keymaps/us.inchttps://unix.stackexchange.com/questions/629471
复制相似问题