ISO_Level5_Shift를 작동시키는 방법은 무엇입니까?

ISO_Level5_Shift를 작동시키는 방법은 무엇입니까?

키보드 레이아웃에 더 많은 레벨을 추가하고 싶어서 level5 키를 활성화하기로 결정했습니다. 레벨3을 설정했고 MenuRAlt를 ISO_Level5_Shift에 매핑하고 싶습니다.

그러나 setxkbmap선택의 여지가 없습니다. /usr/share/X11/xkb/rules/evdev.lstlv5 스위치에 대한 다음 옵션만 포함됩니다.

lv5:lsgt_switch_lock
lv5:ralt_switch_lock
lv5:lwin_switch_lock
lv5:rwin_switch_lock

단순 키 매핑은 불가능한 것 같습니다. 이것은 이미 문제를 암시했습니다. 내부적으로 무슨 일이 일어나고 있는지 알면 setxkbmaplv5 스위치를 활성화하고 오른쪽으로 설정하는 옵션을 쉽게 구성할 수 있습니다 Alt.

-option "lv5:ralt_switch"

그리고 setxkbmap이 옵션을 선택하고 성공적으로 반환되었음에도 불구하고 매핑이 없습니다.


비슷한 질문에 대한 답을 찾은 후여기사용자 정의 파일을 만들었습니다 xkbcomp.

xkb_keymap {

    xkb_geometry {
        include "pc(pc104)"
    };


    xkb_keycodes {
        include "evdev"
        include "aliases(qwerty)"
    };


    xkb_types {
        include "complete"
    };


    xkb_compatibility {
        include "complete"
        include "ledscroll(group_lock)"
    };


    xkb_symbols {
        include "pc+us+ru:2+inet(evdev)"
        include "group(rctrl_rshift_toggle)"
        include "ctrl(swapcaps)"
        include "keypad(oss)"
        include "kpdl(dot)"
        include "terminate(ctrl_alt_bksp)"
        include "level3(modifier_mapping)"
        include "level3(menu_switch)"
        include "level5(modifier_mapping)"
        include "level5(ralt_switch)"

        key <AB06> {
            type= "EIGHT_LEVEL",
            symbols[Group1]= [               n,               N, n, n, u, i, o, p ],
            symbols[Group2]= [     Cyrillic_te,     Cyrillic_TE, n, n, u, i, o, p ]
        };

    };


};

메뉴 키를 ISO_Level3_Shift로, RAlt를 ISO_Level5_Shift로 할당해야 합니다. 키가 할당되었지만 오류가 발생합니다.

$ xkbcomp  ~/new.xkbcomp.xkb :0
Error:            Key <MDSW> added to map for multiple modifiers
                  Using Mod3, ignoring Mod5.

xkbcomp오류에도 불구하고 코드 0이 반환됩니다.

키 매핑은 N레벨 5에서 ​​8까지 "u", "i", "o" 및 "p"를 만들어야 하지만 RAlt는 8개 레벨 모두에 일반적인 n 및 N을 보냅니다(레벨 > 4인 경우 실제로 작동함).

이 오류를 해결하는 방법을 알아보는 동안 <MDSW>"pc"에 대한 규칙 파일에 오류가 설정되어 있음을 발견했습니다.

/usr/share/X11/xkb/symbols/pc:

xkb_symbols "pc105" {
    // Fake keys for virtual<->real modifiers mapping:
    key <LVL3> {    [ ISO_Level3_Shift  ]   };
    key <MDSW> {    [ Mode_switch       ]   };
    modifier_map Mod5   { <LVL3>, <MDSW> };
};

여기 또 다른 이상한 점이 있습니다. pc104 키보드 모델을 포함했지만 이 코드는 pc105를 참조하므로 전혀 소스로 제공되어서는 안 됩니다. 그런데... xkb_symbols "pc104"찾을 수가 없었습니다. 이 "symbols/pc" 파일은 Mod* 키 할당이 /usr/share/X11/xkb/설정되거나 수정되는 <MDSW>유일한 파일 입니다. 다른 파일은 "symbols/level5" 파일로, xkb_symbols "modifier_mapping".

// Ensure a mapping to a real modifier for LevelFive.
partial modifier_keys
xkb_symbols "modifier_mapping" {
  replace key <MDSW> {
    type[Group1] = "ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  modifier_map Mod3 { <MDSW> };
};

이 충돌로 인해 lv3 스위치와 lv5 스위치가 동시에 작동하지 못할 수도 있다고 생각하지만 확실하지는 않습니다. 걱정스럽게도,또 다른 대답, Mode_switch키가 Mod* 키에 존재합니다. 키를 로드한 후에는 new.xkbcomp.xkb어디에도 표시되지 않습니다.

$  xmodmap -pm
xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x25)
control     Control_L (0x42),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        ISO_Level5_Shift (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)

답변1

다음은 Control_R에 ISO_Level5_Shift를 적용하는 작업 솔루션입니다. 동일한 논리를 적용해야 합니다.

  • xevISO_Level5_Shift와 연결될 키의 키 코드를 찾으려면 실행하세요 . 창의 작은 패닉 위로 마우스 커서를 이동하고 키를 누르면 출력에서 ​​해당 키코드를 볼 수 있습니다. 제 경우에는 코드가 105입니다.
  • 둘째, 나는 도망쳤다 xmodmap. Control_R이 mod4와 연결되어 있는 것을 확인했습니다.
  • 그래서 xmodmap -e "clear mod4열쇠를 풀어줬어요. 모든 키가 해제되므로 필요한 경우 다른 키를 다시 연결해야 할 수도 있습니다.
  • 그런 다음 xmodmap -e "keycode 105 = ISO_Level5_Shift"Control_R을 수정자와 연결합니다.
  • 마지막으로 xmodmap -e "add mod3 = ISO_Level5_Shift"레벨 5를 활성화합니다.

관련 정보