XKB: Mode_switch를 사용하여 레이아웃을 여러 그룹으로 수정

XKB: Mode_switch를 사용하여 레이아웃을 여러 그룹으로 수정

de독일어 키보드 레이아웃을 기반으로 사용자 정의 키보드 레이아웃( )을 만들고 싶습니다 . 아이디어는 Caps-Lock을 키로 사용하여 두 가지 레이아웃 세트를 사용하는 것입니다 Mode_switch. 리매핑은 에 따라 작동하는 것 같습니다 xev. 그러나 두 번째 레이아웃 세트는 작동하지 않습니다. [CAPS]+[H]를 누르면 --> "h"가 나타납니다("`"여야 함).

이것은 다음과 같은 기호 파일입니다 de_ext.

default
xkb_symbols "basic" {

    include "de"

    name[Group1]="de";
    name[Group2]="de2";

    // the H button should become accent grave when in second group
    override key <AC06> {
        type[Group2]="ALPHABETIC",
        symbols[Group2]= [           grave, grave ]
    };

    override key <CAPS> {         [     Mode_switch, Caps_Lock ] };

};

편집 1:

@quixotic 말이 맞습니다. 직접 설정하면 실제로 작동합니다. 또한 de_ext파일을 복사한 /usr/share/X11/xkb/다음 실행해 보았지만 setxkbmap de_ext효과가 있었습니다.

/usr/share/X11/xkb/rules/evdev.xml그러나 레이아웃을 추가하면 작동하지 않습니다.

<layout>
  <configItem>
    <name>de_ext</name>
    <shortDescription>xy</shortDescription>
    <description>German extended</description>
    <languageList>
      <iso639Id>ger</iso639Id>
    </languageList>
  </configItem>
</layout>

Ubuntu 17.04 작업 표시줄의 레이아웃 선택에 새 레이아웃이 표시되지만 이를 선택하면 위에서 설명한 대로 CAPS-Lock 버튼의 동작이 달라집니다. 작동하는 것은 CAPS-Lock이 Mode_switch라는 것입니다(확인했습니다 xev). 그러나 두 번째 그룹은 [CAPS]+[H]를 눌러도 작동하지 않기 때문에 선택되지 않는 것 같습니다. Ubuntu/Gnome 레이아웃 전환기를 사용할 때 어떤 차이점이 있는지 아시나요?

편집 2: 통화 중에 xkbcomp $DISPLAY broken.xkb다음 사항을 확인했습니다.

  1. 내 xkb_symbols의 이름은 다음과 같습니다.xkb_symbols "pc+prg+de:2+us:3+inet(evdev)"
  2. 내 레이아웃에는 두 개가 아닌 세 개의 그룹이 있습니다(기본 독일어 레이아웃에도 두 개의 레이아웃이 있지만 에는 하나만 정의되어 있습니다 symbols/de).

    name[group1]="German";
    name[group2]="German";
    name[group3]="English (US)";
    
  3. 거의 모든 키에 대해 3개의 그룹/레이아웃이 있으며, 두 번째는 첫 번째와 동일하고 세 번째는 영어 키보드 레이아웃입니다. 내가 직접 수정한 문자는 포함되지 않습니다.

    key <AC01> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "FOUR_LEVEL_ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               a,               A,              ae,              AE ],
        symbols[Group2]= [               a,               A,              ae,              AE ],
        symbols[Group3]= [               a,               A ]
    };
    
  4. 이게 내가 받은 편지 H야

    key <AC06> {
        type[group1]= "FOUR_LEVEL_ALPHABETIC",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               h,               H,         hstroke,         Hstroke ],
        symbols[Group2]= [               h,               H ],
        symbols[Group3]= [               h,               H ]
    };
    
  5. Caps Lock 버튼에 대한 변경 사항이 포함되어 수정이 필요하지 않습니다.

내 가설은: 추가 레이아웃을 추가 그룹으로 포함하도록 모든 기호를 수정하는 기본(우분투?) xkb 구성에 몇 가지 규칙이 있어야 한다는 것입니다. 내 xkb 기호가 이 규칙을 트리거하는 것을 방지할 수 있는 방법이 있습니까?

답변1

마침내 해결책을 찾았습니다. 파일에 /usr/share/X11/xkb/rules/evdev규칙이 있습니다

! model     layout[2]   =   symbols
  *         *           =   +%l[2]%(v[2]):2

이로 인해 두 번째 그룹이 키보드의 기본 레이아웃으로 덮어쓰게 됩니다. 다음 줄을 추가하여 이 문제( de기본 키보드 레이아웃이 있는 경우) 를 해결할 수 있었습니다.

! model     layout[2]   =   symbols
  *         de          =   +de

문제 분석에 도움을 주신 @quixotic에게 감사드립니다.

관련 정보