首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义控制台密钥映射-无法打开包含我们的文件

自定义控制台密钥映射-无法打开包含我们的文件
EN

Unix & Linux用户
提问于 2021-01-16 20:19:08
回答 1查看 831关注 0票数 0

我想做一个自定义控制台密钥映射,如所描述的在Arch-Wiki

这是我的档案:

代码语言:javascript
复制
# /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加载它时,我得到:

代码语言:javascript
复制
cannot open include file us
syntax error, unexpected ERROR

当然,uslocalectl list-keymaps的结果。

如果我像Arch示例中那样用include "us"替换include "linux-with-two-alt-keys",它确实会像预期的那样工作。

为什么我不能包括us地图?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-01-20 13:35:14

快速strace loadkeys /usr/local/share/kbd/keymaps/personal.map显示,只搜索include目录和当前工作目录,以查找要包含的文件,并可以通过locate进行检查:

代码语言:javascript
复制
$ 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手册中包含机制的解释,但也可以通过阅读源代码来推断:

代码语言:javascript
复制
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后缀自动添加到包含的文件中。

代码语言:javascript
复制
static const char *const include_suffixes[] = {
    "",
    ".inc",
    NULL
};

因此,要使loadkeys /usr/local/share/kbd/keymaps/personal.map成为您需要的:

代码语言:javascript
复制
zcat /usr/share/kbd/keymaps/i386/qwerty/us.map.gz > /usr/local/share/kbd/keymaps/us.inc
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/629471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档