몇 가지 주요 재매핑 아이디어를 시도한 후에는 Space변화 AltGr가 xkb
가장 유망해 보였습니다. 나는 다음과 같은 관련 아이디어를 읽고 사용했습니다 xkb
.
Altgr 키를 XKB의 AC10에 다시 매핑
키보드 키를 다시 매핑하는 방법은 무엇입니까?
언뜻보기에 내 수정 사항은 텍스트 편집기와 터미널에서 작동하는 것 같습니다 ( Space기호는 키 입력에 인쇄되어 있습니다 AltGr). 그러나 Firefox에서는 작동하지 않습니다. 좀 더 자세히 살펴보면 AltGr터미널과 텍스트 편집기에서 이 조합이 공백 문자도 인쇄한다는 점을 제외하고는 세 가지 응용 프로그램 모두에서 키 조합이 작동한다는 사실을 발견했습니다 (마치 다시 매핑하지 않은 것처럼). 예를 들어 Terminal 및 FireFox에서는 AltGr+ FOpen을 결합합니다.문서메뉴와 공백 문자도 터미널에 인쇄됩니다.
내 Space것은 고장 나서 사용하지 않습니다 AltGr. 기능을 완전히 바꾸고 싶습니다. 내가 무엇을 놓치고 있나요? (저는 칼리리눅스를 사용합니다.)
내가 한 일은 다음과 같습니다. 주석 처리된 줄을
1.
열고 /usr/share/X11/xkb/symbols/pc
2.
다음과 같이 변경합니다.
// key <SPCE> { [ space ] };
key <SPCE> { [ ISO_Level3_Shift ] };
3.
다음 줄을 추가했습니다.
// Additionally added
key <RALT> { [ 32 ] };
4.
파일이 저장되었습니다 pc
.
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
.
답변1
실제로 작동하게 되었는데 xkeymap
, 접근 방식이 이전 솔루션과 완전히 다르기 때문에 여기에 다른 대답으로 남겨두겠습니다.
AltGr어쩌면 일부 사용 사례를 놓쳤을 수도 있습니다 .
설정을 모방하기 위해 이 명령을 사용하여 현재 구성 파일을 내보내고 모든 항목 을 xkbcomp $DISPLAY current.xkb
삭제하여 편집했습니다 .ISO_Level3_Shift
LVL3
Mod5
정확히 말하면 내가 삭제한 내용은 다음과 같습니다.
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
답변2
나는 당신이 제안한 것이 Firefox에서 작동하지 않으며 Chromium (따라서 Chrome)이 xkeymaps에 의존하지 않는 것 같다는 언급을 찾지 못했습니다.개발 옵션프로그램을 ChromeOS에 더 잘 통합하세요. 따라서 일부 시스템 다시 매핑은 지원되지 않습니다.
나에게 도움이 된 수정 사항은 커널 수준에서 키코드를 다시 매핑하는 것이었습니다. 이를 달성하기 위해 space 및 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
그러면 문제가 해결될 것입니다.
Kali Linux에서 이를 영구적으로 만들려면 기본 xinit 파일을 편집하고 /etc/xdg/xfce4/xinitrc
;가 포함된 if 문 앞에 복사한 ~/.xinitrc
다음 파일에 삽입해야 합니다. Kali 20.04 기본 파일에서 이 if 문은 86행에 있습니다.sudo setkeycodes e038 57
exec xfce4-session
이를 위해서는 다음이 필요합니다.비밀번호 없이 sudo 활성화), 그러나 내가 아는 한 이것은 이미 Kali의 기본 옵션입니다.