리눅스 키보드 설정

저는 현재 그램에서 아치리눅스 + GNOME3 (On X11)를 사용 중이고, IME로는 fcitx를 사용 중입니다. CapsLock이 두 글자씩 적용되는 버그와 한영전환이 제대로 되지 않는 버그를 해결한 방법을 서술하고자 합니다.

CapsLock 버그 수정

CapsLock이 빠르게 전환 시에 두 글자씩 쳐지는 버그는 xkb_symbols 를 수정해서 해결했는데, 원래는 따로 파일을 만들고 하려고 했으나, 귀찮아서 그냥 /usr/share/X11/xkb/symbols/kr 파일을 수정했습니다.

xkb_symbols "kr106" 안에 다음과 같은 내용을 추가해뒀습니다.

replace key <CAPS> {
    repeat=no,
    type[group1]="ALPHABETIC",
    symbols[group1]=[ Caps_Lock, Caps_Lock ],
    actions[group1]=[ LockMods(modifiers=Lock), Private(type=3,data[0]=1,data[1]=3,data[2]=3) ]
};

한영키 / 한자키 수정

한영키와 한자키도 비슷한 방법으로 수정했습니다. 사실 그램이라서 101/104키 호환으로 했었어야 했는데 (이미 한자키 / 한글키 수정이 적용돼있음) 그걸 모르고 바보같이 kr106 을 수정했습니다.

replace key <RCTL> { [ Hangul_Hanja ] };
replace key <RALT> {
    type[group1]="ONE_LEVEL",
    symbols[group1]=[ Hangul ]
};

그리고 setxkbmap -layout "kr(kr106)" 으로 레이아웃을 설정하고, fcitx 설정과 그놈 설정에서 기본 키맵을 한국어로 바꿔두었습니다.

그 후에 fcitx의 전역 설정에서 입력기 전환을 Hangul 로 하시면 해결됩니다.

그럼에도...

그런데 이렇게 설정하고도 xev 명령어로 테스트 해보니 여전히 한글키가 ISO_Level3_Shift 로 잡혔습니다. 그래서 xkbcomp -xkb $DISPLAY "my-file-name" 을 한 후에 xmodmap -e 'keycode 108 = Hangul' 을 실행하고 (임시로 RALT를 한글키로 잡히게 함) 또 xkbcomp 를 실행해서 둘을 비교해보았습니다.

제가 아무리 <RALT>type[group1]Hangul로 바꿔도 계속 ISO_Level3_Shift 로 잡히는 것을 확인하고, 또한 xkb_symbolspc+kr+kr(kr106):2+inet(evdev)+level3(ralt_switch) 로 잡히는 것도 확인했습니다. 이 후 구글링 한 결과 한 스택오버플로우 글에서 해결책을 찾았습니다.

TL;DR) dconf-editor 를 실행해서 xkb-options 를 검색한 후에 lv3:alt_switch 를 제거해주시면 해결됩니다.


드디어 한글이 제대로 나오네요...