사용자 정의 콘솔 키맵 - 포함 파일을 열 수 없습니다

사용자 정의 콘솔 키맵 - 포함 파일을 열 수 없습니다

설명된 대로 사용자 정의 콘솔 키맵을 만들고 싶습니다.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

uslocalectl list-keymaps물론 결과적으로요.

include "us"Arch Wiki 예제 의 콘텐츠를 바꾸면 include "linux-with-two-alt-keys"예상대로 작동합니다.

us왜 지도를 포함할 수 없나요 ?

답변1

빠른 표시는 포함할 파일에 대한 디렉토리와 현재 작업 디렉토리 strace loadkeys /usr/local/share/kbd/keymaps/personal.map 만 검색하며 다음으로 확인할 수 있습니다 .includelocate

$ 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 파일은 .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.inc

관련 정보