Kali에서 AltGr 및 Space 키 교체-Firefox는 영향을받지 않습니다.

Jan 04 2021

여러 시도 후 SpaceAltGr변경, 키 매핑 아이디어를 xkb보이는 가장 유망한. 나는 관련이 아이디어를 읽고 사용 xkb:
XKB에 AC10에 다시 매핑 AltGr 키를
내가 키보드 키를 매핑 할 수 있습니까?

언뜻보기에 내 수정 사항이 텍스트 편집기와 터미널에서 작동하는 것 같습니다 ( Space기호는 AltGr키를 누를 때 인쇄 됨 ). 그러나 Firefox에서는 작동하지 않습니다. 좀 더 자세히 살펴보면 AltGr터미널과 텍스트 편집기에서 조합이 추가로 공백 문자를 인쇄한다는 점을 제외하고 는 세 가지 응용 프로그램 모두에서 키 조합이 작동 한다는 것을 알았 습니다 (재 매핑이 수행되지 않은 것처럼). 예를 들어, 터미널과 FireFox에서 AltGr+ 조합 F파일 메뉴를 열고 터미널에서도 공백 문자가 인쇄됩니다.

Space고장이고 사용하지 않습니다 AltGr. 나는 그들의 기능을 완전히 바꾸고 싶습니다. 내가 무엇을 놓치고 있습니까? (저는 Kali Linux를 사용합니다.)

이것이 내가 한 일입니다.
1.Opened /usr/share/X11/xkb/symbols/pc
2.주석이 달린 줄을 아래와 같이 변경했습니다.

 // key <SPCE> {    [    space      ]   };
 key <SPCE> {   [ ISO_Level3_Shift  ]   };

3. 다음 줄을 추가했습니다.

// Additionally added
key <RALT> {    [    32     ]   };

4.pc파일을 저장했습니다 . Restarted를 실행
5.하는 xkb캐시를 지 rm -rf /var/lib/xkb/*
6.웠습니다.


추가 정보 (위에 나열된 변경 후).

전체 현재 pc파일 :

default  partial alphanumeric_keys modifier_keys
xkb_symbols "pc105" {

    key <ESC>  {    [ Escape        ]   };

    // The extra key on many European keyboards:
    key <LSGT> {    [ less, greater, bar, brokenbar ] };

    // The following keys are common to all layouts.
    key <BKSL> {    [ backslash,    bar ]   };
    // key <SPCE> { [    space      ]   };
    key <SPCE> {    [ ISO_Level3_Shift  ]   };

    include "srvr_ctrl(fkey2vt)"
    include "pc(editing)"
    include "keypad(x11)"

    key <BKSP> {    [ BackSpace, BackSpace  ]   };

    key  <TAB> {    [ Tab,  ISO_Left_Tab    ]   };
    key <RTRN> {    [ Return        ]   };

    key <CAPS> {    [ Caps_Lock     ]   };
    key <NMLK> {    [ Num_Lock      ]   };

    key <LFSH> {    [ Shift_L       ]   };
    key <LCTL> {    [ Control_L     ]   };
    key <LWIN> {    [ Super_L       ]   };

    key <RTSH> {    [ Shift_R       ]   };
    key <RCTL> {    [ Control_R     ]   };
    key <RWIN> {    [ Super_R       ]   };
    key <MENU> {    [ Menu          ]   };

    // Beginning of modifier mappings.
    modifier_map Shift  { Shift_L, Shift_R };
    modifier_map Lock   { Caps_Lock };
    modifier_map Control{ Control_L, Control_R };
    modifier_map Mod2   { Num_Lock };
    modifier_map Mod4   { Super_L, Super_R };

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

    key <ALT>  {    [ NoSymbol, Alt_L   ]   };
    include "altwin(meta_alt)"

    key <META> {    [ NoSymbol, Meta_L  ]   };
    modifier_map Mod1   { <META> };

    key <SUPR> {    [ NoSymbol, Super_L ]   };
    modifier_map Mod4   { <SUPR> };

    key <HYPR> {    [ NoSymbol, Hyper_L ]   };
    modifier_map Mod4   { <HYPR> };
    // End of modifier mappings.

    key <OUTP> { [ XF86Display ] };
    key <KITG> { [ XF86KbdLightOnOff ] };
    key <KIDN> { [ XF86KbdBrightnessDown ] };
    key <KIUP> { [ XF86KbdBrightnessUp ] };

    // Additionally added
    key <RALT> {    [    32     ]   };

};

hidden partial alphanumeric_keys
xkb_symbols "editing" {
    key <PRSC> {
    type= "PC_ALT_LEVEL2",
    symbols[Group1]= [ Print, Sys_Req ]
    };
    key <SCLK> {    [  Scroll_Lock      ]   };
    key <PAUS> {
    type= "PC_CONTROL_LEVEL2",
    symbols[Group1]= [ Pause, Break ]
    };
    key  <INS> {    [  Insert       ]   };
    key <HOME> {    [  Home         ]   };
    key <PGUP> {    [  Prior        ]   };
    key <DELE> {    [  Delete       ]   };
    key  <END> {    [  End          ]   };
    key <PGDN> {    [  Next         ]   };

    key   <UP> {    [  Up           ]   };
    key <LEFT> {    [  Left         ]   };
    key <DOWN> {    [  Down         ]   };
    key <RGHT> {    [  Right        ]   };
};

setxkbmap -print:

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

xev( AltGr보도 및 해제) :

KeyPress event, serial 34, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249191, (168,-8), root:(797,298),
    state 0x0, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x3400001,
    root 0x6cb, subw 0x0, time 1249261, (168,-8), root:(797,298),
    state 0x8, keycode 108 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False

내 키보드의 Space키가 고장 났기 때문에 xev.

답변

3 Maik93 Jan 08 2021 at 01:35

실제로를 사용해도 작동하도록 만들었습니다 xkeymap. 방법이 이전 솔루션과 완전히 다르기 때문에 여기에 다른 답변으로 남겨 둡니다.

아마도 당신은 AltGr사용의 발생을 놓쳤을 것입니다 .

설정을 모방하기 위해 명령을 사용하여 현재 구성 파일을 내보내고 xkbcomp $DISPLAY current.xkb모든 ISO_Level3_Shift, LVL3Mod5발생 을 제거하여 편집했습니다 .

정확히 내가 삭제 한 것은 :

interpret ISO_Level3_Shift+AnyOf(all) {
    virtualModifier= LevelThree;
    useModMapMods=level1;
    action= SetMods(modifiers=LevelThree,clearLocks);
};
interpret ISO_Level3_Shift+AnyOfOrNone(all) {
    action= SetMods(modifiers=LevelThree,clearLocks);
};
key <LVL3> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
key <RALT> {
    type= "ONE_LEVEL",
    symbols[Group1]= [ ISO_Level3_Shift ]
};
modifier_map Mod5 { <LVL3> };

그런 다음 삽입했습니다.

key <LVL3> {[space]};
key <RALT> {[space]};

이 편집 된 구성은 다음과 같이로드하여 테스트 할 수 있습니다.

xkbcomp new_conf.xkb $DISPLAY
1 Maik93 Jan 07 2021 at 16:56

Chromium (및 따라서 Chrome)이 xkeymaps에 의존하지 않는 것처럼 보이지만 제안한 내용이 Firefox에서 작동하지 않아야한다는 것을 증명하는 참조를 찾지 못했습니다. ChromeOS에서 프로그램을 더 잘 통합 하는 개발 선택 입니다. 따라서 일부 시스템 재 매핑이 지원되지 않을 수 있습니다.

나를 위해 일한 수정 사항은 커널 수준에서 키 코드를 다시 매핑하는 것입니다. 이를 위해 공간과 altGr 모두에 대해 스캔 코드 (키의 하드웨어 ID)와 키 코드 (매핑 된 기호)를 수집했습니다.

# to collect scan-codes
sudo showkey -s
# space press: 0x39
# altGr press: 0xe0 0x38

# to collect key-codes
sudo showkey
# space press: 57
# altGr press: 100

내가 이해하는 한 스페이스 바가 손상 되었기 때문에 altGr을 스페이스에 다시 매핑하고 싶습니다.

sudo setkeycodes e038 57

트릭을해야합니다.


칼리 리눅스에서이 영구적하려면, 기본 xinit에 파일을 편집 할 필요 /etc/xdg/xfce4/xinitrc에 대처하여, ~/.xinitrc및 삽입 sudo setkeycodes e038 57이 포함 된 경우 문 앞에 exec xfce4-session; Kali 20.04 기본 파일에서이 if 문은 86 행에 있습니다.

이것은 암호없이 sudo 를 활성화 해야한다는 점에 유의하십시오. )하지만 제가 기억할 수있는 한 이것은 이미 Kali의 기본 옵션입니다.