우분투와 만자로(KDE) 리눅스를 함께 쓰다보니 크롬/Chromium 최신 버전을 항상 접하게 됩니다. 저는 크로미움 버전 80.0.3987.132(공식 빌드) Arch Linux (64비트)에서 노트북(Laptop) 키보드의 한영키로 한영전환이 안되는 문제가 발생했습니다(한자 키도 당연히 안 먹었겠죠?). ①크롬에서 KeyCode를 잘못 처리하거나, ②리눅스에서 KeyCode를 잘못 처리하거나, ③내 키보드의 키코드에 문제가 있거나. 원인은 셋 중 하나일 것입니다.

 

https://support.google.com/chrome/thread/24298673?hl=en

위의 링크에서 구글 크롬 최신 버전의 중국어, 한국어 전환 문제를 피드백해주신 분들이 많은데(저도 포함), 저는 노트북 2대 중에서 1대만 문제가 있었습니다. 그렇다면 "③내 키보드의 KeyCode 문제"가 원인일 확률이 높겠더군요.

 

근거를 적어볼게요.

본인이 쓰는 리눅스용 한글 입력기에서 어떤 KeyCode 값을 받았을 때 한영전환/한자변환이 되는지 살펴봅시다.

 

▲ 저는 IBus를 쓰고 있는데, Hangul 이라는 키코드가 한영 전환을 담당하고 Hangul_Hanja 라는 키코드가 한자 전환을 담당합니다.

 

(크롬이든 다른 프로그램에서든) 한영전환이 안 되는 분들은 "추가" 버튼을 눌러서 키보드의 한영키/한자키를 등록했을 때 "오른쪽 ALT", "오른쪽 CTRL" 키가 등록되는 것을 확인할 수 있을 겁니다. (따라하는 과정에서 등록됐다면 제거해주세요.)

 

그러니까

Hangul이라는 키코드와 Right-ALT의 키코드는 염연히 다르고, Hangul_Hanja라는 키코드와 Right-CTRL의 키코드 또한 별개의 것이지만

Laptop 제조사들이 글로벌 모델을 그대로 들여오면서 오른쪽 ALT/CTRL키의 "각인만" 한영/한자 키로 바꿔서 시장에 내놓으면 이런 문제가 생기는 겁니다.

 

확인시켜 드릴게요.

터미널 창을 띄운 다음 xmodmap 라고 쳐보세요.

 

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

 

shift       Shift_L (0x32),  Shift_R (0x3e)

lock        Caps_Lock (0x42)

control     Control_L (0x25),  Control_R (0x69)

mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)

mod2        Num_Lock (0x4d)

mod3      

mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)

mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

 

오른쪽 Alt, Ctrl로 작동하는 (한글 사용자에겐 비정상적인) 상황이라면 오른쪽 컨트롤 키와 오른쪽 알트 키의 키코드가 보일 겁니다. 그러면 문제가 있는 겁니다. 글을 끝까지 보면서 조치를 취하셔야 해요.

 

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

 

shift       Shift_L (0x32),  Shift_R (0x3e)

lock        Caps_Lock (0x42)

control     Control_L (0x25)

mod1        Alt_L (0x40),  Meta_L (0xcd)

mod2        Num_Lock (0x4d)

mod3      

mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)

mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

 

만약 위의 내용처럼 Control_R (0x69), Alt_R (0x6c) 키코드가 빠져 있으면 정상인 거라, 조치할 필요가 없습니다(Hangul, Hangul_Hanja 키코드가 물리 키보드에 있거나, 리눅스에서 매핑 처리됨).

=> Mapping 처리를 하는 것이 우리의 목표입니다! Chrome, Chromium 최신 버전에서도 한영전환/한자변환 잘 돼요.

 

(뱀다리 : 개별 키의 키코드를 정확하게 확인하고 싶다면 xorg-xev 패키지가 설치된 상태에서 터미널 창에 xev라고 입력한 다음 키보드를 눌러보면 됩니다. 그러면 해당 키의 KeyCode가 터미널 창에 뜹니다. 마우스 이벤트까지 코드가 나오기 때문에 눈이 어지러운 것이 단점. => 저는 단점때문에 권하지 않는데, xev는 xmodmap 설명서에서 공식적으로 언급되는 좋은 프로그램입니다.)

 

xmodmap 매뉴얼의 Description 항목을 보면 아래처럼 적혀 있습니다.

The xmodmap program is used to edit and display the keyboard modifier map and keymap table

지금까지 터미널 창에서 봤던 것들은 display에 해당되겠죠?

이제 xmodmap 프로그램으로 edit를 하면 되겠죠? 오른쪽 Alt, 오른쪽 Ctrl의 KeyCode를 지우고 그 자리에 Hangul, Hangul_Hanja 키코드를 넣는 식으로.

 

/home/계정명/.xinitrc 파일을 열어서 내용을 살펴봅시다.

 

▲ 계정명의 Home 디렉토리, /etc/X11/xinit/ 디렉토리에 있는 .Xmodmap 파일을 읽어 온다고 나와 있지요?

 

저는 계정명의 Home 디렉토리에 .Xmodmap 파일을 만들고, 내용을 아래처럼 구성했습니다.

 

▲ 터미널 창에 xmodmap 라고 입력했을 때 출력되었던 내용과 비교해서 보면 의미가 이해되실 겁니다. 0x6c, 0x69 KeyCode는 제 키보드에 매핑되어 있던 우측 Alt/우측 Ctrl의 키값이니, 이것을 본인 PC 기준으로 바꾸면 되겠습니다.

(넷째줄, 다섯째줄의 0x6c, 0x69는 16진수 코드인데, 10진수로 바꿔서 108, 105로 입력해도 됩니다.)

 

저장하고 나와서 재부팅! 끝!

테스트 해보세요. 크롬 최신 버전에서도 한영 전환, 한자 변환 전부 잘 될 겁니다.

 

(뱀다리 : 이 방법 말고 /usr/share/X11/xkb/symbols/altwin 파일을 수정해서 한/영 전환되도록 고친 사례도 검색되던데, 저는 이 방법으로 한자변환 키를 바꾸는 데에는 실패했습니다. 방법을 알고 계시면 좀 알려주세요.)

 

▲ 이런 식으로 처리하시더군요.

 

※ 참고한 문서들

https://kwonnam.pe.kr/wiki/linux/xmodmap

http://nemonein.egloos.com/5222946

 

※ 2020. 07. 20. 추가

우분투 20.04 데스크톱에서는 Bong Kim님의 댓글처럼 /usr/share/X11/xkb/symbols/kr 파일 내용을 수정하고 재부팅하는 방법이 쉬운 것 같습니다. "default"라고 적혀 있는 곳이 106키(kr106) 쪽인데, default를 kr104 쪽으로 옮겨주는 것이지요.

 

※ 2020. 08. 25. 추가

Tomket 님께서 댓글로 알려주신 방법이 간편한 것 같습니다.

xmodmap이 터미널 창에서도 명령어를 쓸 수 있게끔 설계된 것 같아요.

  xmodmap -e "remove mod1 = Alt_R"

  xmodmap -e "keycode 0x6c = Hangul"

두 줄의 명령어만으로 처리가 끝난다고 하네요.

 

https://www.lesstif.com/lpt/xmodmap-linux-118096028.html

https://wiki.archlinux.org/title/xmodmap

반응형