libhangul / ibus-hangul

The hangul engine for IBus
GNU General Public License v2.0
64 stars 18 forks source link

리눅스 (우분투) 크롬 브라우저에서 한영 전환키 문제 #103

Open kbn00 opened 4 years ago

kbn00 commented 4 years ago

안녕하세요, 리눅스용 구글 크롬에서 언제부터인가 한영 전환키로 ALT_R을 못쓰게 되었어요. 그래서 Hangul을 써서 한영 전환을 해야하는데 ibus-hangul 이 지정하는 키보드가 우분투 리눅스에서 Korean 키보드로 지정되서 Hangul 대신 ALT_R 을 보내서 한영 전환키가 안되고 있어요.

우분투 리눅스에서 ibus-hangul을 선택했을 경우

$ 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)

이처럼 되있구요 만약 리눅스에서 Korean (101/104 key compatible) 키보드를 선택하면

$ 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) 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)

이처럼 되서 Hangul 과 Hangul_Hanja를 쓸 수 있을텐데 지금 ibus-hangul이 이렇게 키보드를 지정하지 않고 있거든요?

어디서 고쳐야하는지 저는 모르겠으나 ibus-hangul이 kr104 즉 우분투 리눅스에서 Korean(101/104 key compatible) 키보드를 사용하게끔 수정해주시면 많은 리눅스 유저가 행복해할 것입니다.

감사합니다.

kbn00 commented 4 years ago

Ubuntu 20.04 LTS에서 시스템 파일 하나를 수정해서 쓰고 있습니다.

우분투 리눅스에서 kr 키보드 디폴트가 kr106로 되있어서 제가 쓰는 kr104 키보드는 ibus-hangul에 ALT_R 와 CTL_R을 Hangul 하고 Hangul_Hanja 대신 보내는데 리눅스 크롬에서는 ALT_R을 한/영 변환용으로 쓸 수 없으므로 매우 불편했습니다.

그래서 /usr/share/X11/xkb/symbols/kr 파일에서 default 를 kr104 로 바꿨습니다. 이제 한영 전환키 잘 됩니다.

가능하다면 ibus-hangul에서 시스템 디폴트 키보드로 고정하기 보다는 여러 한글 키보드에서 선택이 가능했으면 더 좋겠어요.

$ diff -c kr kr.orig
*** kr  2020-05-23 19:22:38.912768027 +0900
--- kr.orig 2020-05-23 19:02:25.741950924 +0900
***************
*** 1,11 ****
! alphanumeric_keys
  xkb_symbols "kr106" {
      include "us"
      name[Group1]= "Korean";
      include "kr(hw_keys)"
  };

! default alphanumeric_keys
  xkb_symbols "kr104" {
      include "us"
      name[Group1]= "Korean (101/104 key compatible)";
--- 1,11 ----
! default  alphanumeric_keys
  xkb_symbols "kr106" {
      include "us"
      name[Group1]= "Korean";
      include "kr(hw_keys)"
  };

! alphanumeric_keys
  xkb_symbols "kr104" {
      include "us"
      name[Group1]= "Korean (101/104 key compatible)";
choehwanjin commented 4 years ago

상황 확인이 어려워서 그런데, /usr/share/ibus/component/hangul.xml 파일에서

...
<layout>kr</layout>
<layout_variant>kr104</layout_variant>
...

부분을

...
<layout>default</layout>
...

으로 바꾸거나 지우면 어떤지 확인해주실 수 있을 까요?

위 파일을 수정하게 되면 ibus를 재시작하거나, logout/login을 하거나, 재부팅하셔야 합니다.

kbn00 commented 4 years ago

/usr/share/X11/xkb/symbols/kr 파일을 우분투 20.04 LTS 원본 상태로 복원하구요, 말씀하신대로 /usr/share/ibus/component/hangul.xml 파일을 고쳐서 해보니깐 Hangul 대신 ALT_R 이 보내져서 구글 크롬에서 한/영 변환이 안됩니다.

제가 우분투 리눅스를 파보지 않았는데요 느낌상 아마도 다른 세팅 파일은 깡무시 하는게 아닐까 싶어요, 그래서 제가 고쳐썼던 시스템 파일에서 키보드 정의를 가져오는게 아닐까 싶습니다.

정리하자면

/usr/share/X11/xkb/symbols/kr 파일을 저처럼 수정해야 크롬에서 한/영 키로 한/영 전환이 되구요. 그러나 이때 halgul.xml 파일을 그대로 놔둬야지 말씀하신거처럼 바꾸면 한/영 전환 안됩니다.

/usr/share/X11/xkb/symbols/kr 파일을 수정을 안하면 hangul.xml 파일이 어떻든 한/영 전환이 안됩니다.

changwoo commented 4 years ago

이건 @kbn00 님의 OS 설정 탓이고 ibus-hangul에서 지정하는 게 아닙니다. 말씀하신 'kr' 파일은 ibus-hangul이 아닌 xkeyboard-config에서 제공하는 것이고, 그 파일의 "default" 키워드는 키보드로 'kr'을 선택했을 때 어떤 버전(variant)가 선택되느냐를 지정하는 것이지 이 부분은 OS나 데스크톱의 기본 키보드 설정과는 무관합니다. OS 설치 과정 어딘가에서 xkb 설정을 'kr' 키보드로 설정하셨기 때문에 지정된 대로 동작하는 것 뿐입니다.

아마 문제의 원인을 찾으시다가 시스템에 설치된 파일을 바꾸신 것 같은데, 그럴 필요가 없습니다. 본인 키보드를 kr104 variant로 설정하는 방법이 있고요. (setxkbmap kr kr104 등) 오른쪽 ctrl이 한자키가 되는 게 마음에 안 들면 설정을 그대로 놔둔 상태에서 setxkbmap 명령이나 gnome-tweaks 등을 이용해 korean:ralt_hangul 옵션만 켜도 됩니다.

kbn00 commented 4 years ago

우분투 20.04 LTS 설치할 때 키보드를 101/104 key compatible로 선택했고요 따라서 이걸 써야 하는데 안쓰는게 버그인거에요. 우분투 버그인지 ibus-hangul 버그인가는 모르겠구요.

ibus-hangul 에서 지정하는게 아니라고 하셨는데 우분투에서 Input Sources 를 Korean(Hangul)을 선택해야 ibus-hangul 을 쓰게되는데 이경우 ALT_R 을 전송하는게 버그라는 것입니다. Input Sources 를 Korean(101/104 key compatible) 선택하면 ALT_R 이 아니라 Hangul 전송합니다.

changwoo commented 4 years ago

만약 그렇다면 우분투 버그겠지요. 말씀하신 것처럼 그 키보드는 ibus-hangul에서 지정하는 게 아닙니다. ibus-hangul은 한/영 전환으로 설정한 키가 입력되었을 때 한영 상태를 전환하는 것 뿐입니다. 그 한/영 키를 전송하는 쪽에서 잘못 전송하는 문제를 ibus-hangul에서 어떻게 할 방법은 없어요.

GNOME 설정의 input source를 말씀하신 것 같은데, 현재 알려진 문제이지만 거기서 설정하는 한글 키보드는 별 의미가 없습니다. 위에서 말씀드린대로 setxkbmap이나 gnome-tweaks 등을 통해 설정해 주세요.

changwoo commented 4 years ago

아마 우분투 20.04에서 wayland로 전환하면서 생긴 문제일 수 있을 것 같은데요. 현재 wayland의 XKB 설정과 GNOME의 input source 설정이 혼란스러운 게 사실입니다. input source 기본값은 kr104 + ibus-hangul이 되어버리는데, 실제 shortcut에 적용되는 xkb는 us 키보드를 쓰는 문제가 알려져 있습니다. 그렇다면 gnome-tweaks로 설정하는 편이 좋아 보입니다.

@choehwanjin 설정에 관련해서 이런 걸 추가하는 건 어떻게 생각하시나요? 이 이슈처럼 한/영키 설정 잘못을 ibus-hangul에서 어떻게 할 수는 없지만 혼란스러운 게 사실이니, ibus-setup-hangul에서 데스크톱의 XKB 설정을 바로잡을 수 있도록 데스크톱의 관련 설정으로 가는 shortcut을 제공하거나 직접 gsettings 설정을 조작하거나 할 수는 있을 것 같은데 어떤가요? 특정 데스크톱에서만 동작하는 기능이 될 수도 있겠지만.

kbn00 commented 4 years ago

과거 우분투 ibus-hangul에서 키보드 한/영 변환키를 누르면 Hangul을 전송해서 다른 세팅은 전혀 할 필요가 없던 시절도 있었어요. Hangul은 이미 ibus-hangul에서 한/영 변환 키 디폴트로 지정되었었으니깐요.

그런데 언젠가부터 Input Sources 에서 ibus-hangul을 사용하게 Korean(Hangul) 선택하면 Hangul 대신 ALT_R 코드를 보내기 시작합니다. 그래서 반드시 ibus-hangul 세팅을 열어서 한/영 변환을 ALT_R로 지정을 해주고 썼어야 했어요. 이게 정확히 언제부터인가는 기억이 가물가물한데 한 5~6년 전인가 하여튼 오래전 일인데, ALT_R만 지정해주면 되니깐 그냥 별다른 불편이 없고 해서 써왔구요.

그러나 작년 언젠가부터 리눅스 구글 크롬에서 ALT_R을 아예 못쓰게 막아놔서 반드시 한/영 변환키가 Hangul을 전송하게끔 만들어야 해서 방법을 찾은거구요.

이상하게도 xkb 디폴트를 kr106로 해놨던데 106 키보드 구경해본적 있으세요? 이건 알트키하고 한/영 변환키가 따로 있는거 아닌가요? 이렇게 보기 힘든 키보드를 누가 디폴트로 잡아놨는지 여기부터 파보는게 어떨까 싶네요.

changwoo commented 4 years ago

ibus-hangul을 설정했을 때 보내는 걸 확인하실 수 있기 때문에 ibus-hangul이 책임이 있는 것으로 생각하실 수 있으시지만, 그 Hangul이나 Alt_R 키를 보내는 건 ibus-hangul에서 보내는 것도 아니고 ibus-hangul에서 설정하는 것도 아닙니다. 그래서 XKB 설정 방법을 알려드렸고요. 게다가 ibus-hangul은 위에 @choehwanjin 님이 쓰신것처럼 ibus에서 내부적으로 "kr104" variant 키맵을 사용하게 쓰여 있습니다. ibus-setup에서 시스템 키보드 레이아웃을 사용하게 설정되었거나, (우분투가 사용하는) GNOME처럼 그것과 무관하게 키맵을 사용하는 경우가 있는데 이런 경우는 이미 ibus-hangul이 할 수 있는 일을 벗어난 것입니다.

입력기가 단독으로 동작하는 소프트웨어가 아니기 때문에 OS의 여러가지 문제 때문에 결국 한글 입력에 문제가 생길 수 있고 거기에 대해 얘기할 수는 있지만, 이 소프트웨어가 할 수 있는 컨트롤을 벗어난 이슈에 대해서 자꾸 ibus-hangul의 문제라고 하는 것은 문제를 해결하는데 좋은 방법은 아닙니다.

일단 xkeyboard-config의 kr 키맵은 제가 작성했으니 누가 했는지 파볼 필요는 없습니다. :) kr106은 처음 작성했을 때부터 디폴트였고 그게 14년 전이었습니다. 수입 또는 노트북과 기계식 키보드가 일반화되서 요즘은 Alt를 한/영키로 바꾼 타입이 많아졌지만, 아직도 상점에서 가장 흔한 USB 키보드를 구입하면 십중팔구 한/영과 한자 키는 따로 달려 있습니다. 오래전에 작성한 부분이라서 트렌드가 달라진다면 디폴트를 바꿀 생각이 있지만 아직까지 그런 것 같지 않습니다.

그리고 이 "default"는 말씀하신 문제와는 상관이 없습니다. xkb의 "default"에 대해 다시 말씀드리자면, kr106이 "디폴트"라는 말은 XKB 내부적인 처리일 뿐이고 "kr"을 선택했을 때 "kr106" variant가 디폴트가 된다는 뜻이지, OS나 데스크톱의 한국어 디폴트 키보드가 kr106이 된다는 뜻은 아닙니다. GNOME, 데비안 등은 이미 "kr104" variant를 디폴트로 설정하고 있습니다.

OS의 디폴트가 kr106으로 되었다면 그게 문제이겠죠. 사정을 모르는 우분투 개발자가 그냥 "kr"을 디폴트로 건드렸을지도 가능성은 있습니다. 시간이 나면 우분투 설치를 해 봐야 겠군요.

kbn00 commented 4 years ago

우분투에서 Input Sources를 Korean 101/104 key compatible 선택하면 Hangul을 전송하거든요? 그럼 ibus-hangul도 시스템 디폴트 키보드가 Korean 101/104 key compatible로 알고 이것을 쓰면 아무 문제가 없을텐데 굳이 유저가 설치할때 선택하지 않은 kr106을 선택해서 Hangul이 아닌 ALT_R을 전송한단 말이에요.

원래 영어용으로 만들어진 운영체제에 한글입력기를 더하다 보니 서로 안맞고 충돌하는게 있는거겠지만 유저 입장에서는 ibus-hangul이 유저가 선택한 디폴트 키보드 (제 경우엔 101/104키)를 선택해야 합니다.

changwoo commented 4 years ago

우분투에서 Input Sources를 Korean 101/104 key compatible 선택하면 Hangul을 전송하거든요? 그럼 ibus-hangul도 시스템 디폴트 키보드가 Korean 101/104 key compatible로 알고 이것을 쓰면 아무 문제가 없을텐데 굳이 유저가 설치할때 선택하지 않은 kr106을 선택해서 Hangul이 아닌 ALT_R을 전송한단 말이에요.

다시 한 번 말씀드리지만, ALT_R을 전송하게 만드는 건 ibus-hangul이 아닙니다. 왜 그렇게 생각하시는지는 이해하겠지만, 오른쪽 Alt 키를 한글 키로 해석하게 만드는 건 ibus-hangul에서 할 수 있는 일이 아니에요. 문제가 있다면 ibus-hangul이 아니라 gnome-shell이나 우분투 설정이에요.

"input source"라는 이름으로 XKB 선택과 IBus 언어엔진을 몰아 넣어서 그렇게 생각하실 수 있을 것 같네요. XKB는 그런 일을 할 수 있지만 ibus-hangul같은 IBus 언어엔진은 주어진 XKB 키맵을 사용할 뿐입니다. 잘못된 게 주어지면 잘못 동작할 수밖에요.

choehwanjin commented 4 years ago

우분투 20.04에서는 예전 gnome-keyboard-properties와 같이 키보드 레이아웃을 선택할 수 있는 기능이 없는 건가요?

kbn00 commented 4 years ago

우분투 20.04 LTS 키보드 레이아웃은 처음 설치할 때 키보드 선택하는거 가능하고요, 설치가 끝나고 Region & Language 설정 Input Sources에서도 다른 키보드 레이아웃을 선택하는게 가능은 한데, ibus-hangul을 사용하게 해주는 Korean(Hangul) 은 디폴트가 kr106 하고 묶여있습니다. 그래서 저는 위에 설명한거처럼 kr 파일 디폴트를 바꿔서 해결한거구요.

그러니깐 키보드 레이아웃은 얼마든지 선택 가능한데, ibus-hangul을 쓰게해주는 레이아웃은 kr파일에서 정의된 kr106 고정인거죠.

changwoo commented 4 years ago

우분투 20.04를 깔아봤는데 무슨 이유인지 /usr/share/ibus/component/hangul.xml 파일에서 layout_variant와 layout_option을 안 읽는군요. 데비안과 다른 걸 보니 우분투 문제인 게 거의 확실합니다. 우분투가 아마 이 문제를 고치려고 한 것 같은데 https://gitlab.gnome.org/GNOME/mutter/-/issues/682 잘못 넘겨짚고 layout variant와 option을 무시하고 설정한 것 같습니다. 테스트로 layout us, layout_variant intl 이라고 xml에 쓰고 setxkbmap으로 보면 us만 설정됩니다.

이 이슈를 보니 hangul.xml을 kr106 / kr104용 layout 여러개를 만들어야 되지 않나 생각이 드네요.

choehwanjin commented 4 years ago

지금까지의 상황을 보면 hangul.xml에 engine을 추가하든지 hangul-kr104.xml을 추가하든지 해서 문제가 해결되는지 확인해봐야 할 것 같습니다. 제 환경에서는 재현이 어렵네요.

@kbn00 님 아래와 같이 /usr/share/ibus/component/hangul.xml 파일에 engine을 추가하고 ibus를 재시작하시고 Input Source에서 'hangul(kr104)' 을 선택하면 문제가 해결되는지 확인 부탁드립니다.

<engines> ... </engines> 태그 안에 아래와 같은 <engine> 태그 부분을 추가하면 됩니다.

...
                <engine>
                        <name>hangul(kr104)</name>
                        <language>ko</language>
                        <license>GPL</license>
                        <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
                        <icon>ibus-hangul</icon>
                        <layout>kr104</layout>
                        <longname>Hangul</longname>
                        <description>Korean Input Method</description>
                        <rank>99</rank>
                        <symbol>&#xD55C;</symbol>
                </engine>
...
kbn00 commented 4 years ago
태그를 추가하니깐 Input Sources 추가 Korean에 또하나의 Korean(Hangul)이 생겼어요. 그런데 이것은 아예 Setup 버튼이 먹통이고 작동하지 않습니다. 마치 영문 키보드 선택했을 경우와 다르지 않아요. ![Screenshot from 2020-08-26 18-16-51](https://user-images.githubusercontent.com/65676885/91285980-d4546e80-e7c8-11ea-8018-b8e80aa40e33.png)
SomeAcnt commented 2 years ago

우분투에 DM을 변경한 컴퓨터에서 비슷한 문제를 겪고 있습니다. Hangul키가 인식이 안 되고 Alt_R 키로 인식되는데, 무슨 기능을 사용하면 어떤 문제인지 알 수 있나요?