새로운 xkb 유형을 정의하고 이를 특정 레이아웃의 기본 유형으로 만드는 방법은 무엇입니까?

새로운 xkb 유형을 정의하고 이를 특정 레이아웃의 기본 유형으로 만드는 방법은 무엇입니까?

저는 헝가리어, 독일어, 슬로바키아어로 많은 양의 텍스트를 작성해야 하는 Java 프로그래머입니다. 많은 경우 동시에 모든 작업을 수행해야 하므로 서로 다른 레이아웃 간에 지속적으로 전환하는 것이 비현실적입니다. 다행스럽게도 헝가리어 키보드 레이아웃에는 이미 모든 것에 필요한 대부분의 기호가 있으며 나머지는 관련 xkb 기호 파일을 변경하여 쉽게 추가할 수 있습니다.

그러나 이는 세 번째 수준 뒤에 필요한 많은 역할을 숨깁니다. 아직 해결하지 못한 한 가지 문제는 세 번째 레이어에 액세스하는 방법을 정의하는 것입니다. 이상적으로는 왼쪽 Alt + Ctrl을 누르거나 오른쪽 Alt(AltGr) 키를 동시에 눌러 세 번째 수준에 액세스할 수 있는 Windows의 동일한 동작을 에뮬레이트하고 싶습니다. 불행하게도 우리 회사가 사용하는 Ubuntu 22.04에서는 올바른 Alt(AltGr) 키를 통해서만 이 작업을 수행할 수 있습니다. Gnome 조정에는 기본값을 다양한 다른 키로 변경할 수 있는 옵션이 있지만 그 중 어느 것도 내가 원하는 효과를 갖지 못합니다.

비슷한 관련 질문을 찾았습니다.AltGr을 <Ctrl> + <Alt>에 바인딩하는 방법답변 중 하나는 새로운 xkb 유형을 생성하여 이 작업을 수행할 수 있다고 제안했지만 결국 아무도 코드를 공유하지 않았으며 새 xkb 유형을 레이아웃 기본값으로 설정하는 마지막 단계를 안정적으로 복제할 수 없었습니다. 모든 것이 작동합니다.

  • 나는 내 /usr/share/X11/xkb/symbols/hu파일을 편집하기 시작했다. key <AE...관련 섹션 내의 항목을 변경하여 xkb_symbols "102_qwerty_comma_dead"세 번째 레벨에 몇 가지 추가 문자를 추가할 수 있었습니다 .
  • 그런 다음 위 질문의 새 xkb 유형 정의를 내 /usr/share/X11/xkb/types/basic파일에 추가했습니다.
   default xkb_types "basic" {
           ...
           type "CA_to_L3" {
           modifiers = Control+Alt+Shift;
           map[None] = Level1;
           map[Shift] = Level2;
           map[Control+Alt] = Level3;
           map[Control+Alt+Shift] = Level4;
           level_name[Level1] = "Base";
           level_name[Level2] = "Shift";
           level_name[Level3] = "Alt Base";
           level_name[Level4] = "Shift Alt";
           };
           ...
   }; 
  • key.type="CA_to_L3";마지막으로 파일의 및 섹션에 추가하려고 시도했지만 xkb_symbols "def_common" {...}예상한 효과가 없었고 세 번째 수준이 완전히 비활성화되었습니다.xkb_symbols "102_qwerty_comma_dead" {...}/usr/share/X11/xkb/symbols/hu

  • 동일한 파일의 다른 곳에서도 유사한 명령문이 사용되었으므로 동일한 작업을 시도했지만 key.type[Group1]="CA_to_L3";결과는 동일합니다.

누구든지 내가 뭘 잘못하고 있는지 지적할 수 있나요? 다음을 실행하면 $ setxkbmap -print -verbose 10 다음을 얻습니다.

Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules:      evdev
model:      pc105
layout:     hu,gb,sk,gb
variant:    102_qwerty_comma_dead,,qwerty,
Trying to build keymap using the following components:
keycodes:   evdev+aliases(qwertz)
types:      complete
compat:     complete
symbols:    pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)
geometry:   pc(pc105)
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwertz)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+hu(102_qwerty_comma_dead)+gb:2+sk(qwerty):3+gb:4+inet(evdev)"   };
    xkb_geometry  { include "pc(pc105)" };
};

이는 기본 xkb 유형을 포함하는 xkb 유형이 완전히 로드되었지만 여전히 기능이 정의되지 않았음을 보여줍니다.

관련 정보