2014/08/21

Ubuntu XKB를 이용한 keyboard map 확장


우분투에서 한영키를 설정하는 방법에 대해서 정리했지만 좀더 나은 방법을 찾아 보았다. 결론적으로는 나은 방법을 찾은 것은 아니다. 다만, XKB를 사용함으로써 이런 문제 들을 해결할 수 있는 가능성이 있다는 점에 만족해야 한다.

예전에는 X-Window 환경에서 키보드 맵핑에 Xmodmap을 사용했는데 언제부터인가 XKB를 사용하는 것 같다. XKB 사용법을 local 사용자 환경에 적용하는 방법과 전체 시스템 환경에 적용하는 방법에 대해 정리한다. 한영키를 입력소스 toggling에 사용할 수 있도록 지정하는 것과 오른쪽 Alt 키를 한영키에 맵핑하는 예를 들었다.

참고로, 이렇게 해서 ibus에서 한영키가 동작하지는 않는다. ibus 소프트웨어 자체의 키보드 맵핑 로직이 있기 때문이다.

Local 사용자 환경에 XKB 적용하기

사용자 폴더에 XKB가 사용할 폴더 구조를 만든다.

$ mkdir -p ~/.xkb/{keymap,symbols}

키보드 맵핑을 바꾸려는 내용을 파일로 만들어 저장한다.

$ gedit ~/.xkb/symbols/hangul_kbd
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};

// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LALT> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
$ setxkbmap -print > ~/.xkb/keymap/hangul.xkb

위의 명령으로 생성된 파일에서 xkb_symbols 라인에 위의 hangul_kbd를 아래와 같이 추가한다. 아래의 내용에서 위의 hangul_kbd 파일 내용 중 hangul_toggle 부분만 적용하고자 할 때는 hangul_kbd 대신 hangul_kbd(hangul_toggle)을 사용하면 된다.

$ gedit ~/.xkb/keymap/hangul.xkb
// Generated from "setxkbmap -print" and added xkb_symbols part.
xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };
    xkb_types    { include "complete" };
    xkb_compat   { include "complete" };
    xkb_symbols  { include "pc+kr+us:2+inet(evdev)+hangul_kbd" };
    xkb_geometry { include "pc(pc105)" };
};
이제, 현재 사용자 환경에 바로 적용할 수 있는데 아래의 명령으로 가능하다.

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/hangul.xkb $DISPLAY

매번 로그인 할 때마다 적용하기 위해서는 ~/.xinitrc 파일에 위의 명령을 추가해 주면 된다.

시스템 전체 환경에 XKB 적용하기

nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/group 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/group
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/altwin 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/altwin
// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LART> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
수정한 내용이 시스템에 반영되기 위해서는 컴파일된 xkb 캐시 파일들을 삭제 후 재로그인 해야 한다.

$ sudo rm -rf /var/lib/xkb/*.xkm

로그아웃 했다가 다시 로그인 하면 grp(hangul_toggle)과 altwin(hangul_alt)를 사용할 수 있게 된다.

ibus에서 XKB 사용하기

ibus에서는 위의 시스템 전체 환경에 XKB 적용하기를 활용하면 한영키를 사용하도록 할 수 있다. 그러나 이 방법은 좋은 방법이 아니므로 권하고 싶지는 않다.

위에서는 grp(hangul_toggle)과 altwin(hangul_alt)를 새로 추가한 것이지만 기존의 키보드 맵을 수정하면 ibus가 그것을 사용하도록 할 수 있다. 예를 들면, 다음 명령으로 ibus가  grp(menu_toggle)을 사용하도록 한다.

$ gsettings set org.gnome.desktop.input-sources xkb-options "['grp:menu_toggle']"

그리고 나서 /usr/share/X11/xkb/symbols/group 파일의 "menu_toggle" 부분을 아래의 내용으로 대체해 버리면 된다.
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "menu_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
변경 사항을 적용하려면 xkm 파일 들을 지우고 다시 로그인 해야 한다.


별로 도움이 되는 내용은 아니지만 나중에 참고하기 위해 정리해 둔다.

참고 사이트

http://madduck.net/docs/extending-xkb
https://wiki.archlinux.org/index.php/X_KeyBoard_extension

댓글 없음:

댓글 쓰기