2015/05/06

Qt 5.4 fcitx immodule Build 및 한글 사용


이전 글에서 우분투 15.04 Unity Desktop 환경에서 한글 입력기로 fcitx를 추전했는데, 막상 Qt 5.4의 Qt creator에서는 한영키가 동작하지 않아 황당했다. 당연히, 이 Qt creator로 build한 Qt 5.4 애플리케이션에서도 한영키가 동작할리 없다. 이전 글에서 테스트한 Qt 앱은 Qt 5.3에서 build 했던것 같다. 한마디로 우분투 패키지로 다운 받은 fcitx는 최신 버전의 Qt 5.4를 지원하지 않는 것 같다. 뭔가 달라진 듯...

구글링하니까 마침 일본 블로그에 fcitx build하는 방법이 올라와 있어서 다시 build 한 후 Qt5 immodule를 복사해 넣었더니 모든 Qt 애플리케이션에서 한글입력이 잘 된다. 다만, 그 블로그 내용을 그대로 따라하니까 안되더라... 그래서 다시 정리한다.

Qt 5.4에서 fcitx Qt5 immodule build

$ sudo apt-get install git cmake

$ git clone https://github.com/fcitx/fcitx-qt5.git
$ cd fcitx-qt5
$ git checkout 0.1.3

build 하기 전에 Qt 5.4가 설치된 홈 폴더를 미리 알아 두어야 한다. 나의 PC에는 /opt/OpenSrc/Qt에 설치하였다.

$ cmake . -DCMAKE_PREFIX_PATH=/opt/OpenSrc/Qt/5.4/gcc_64
$ make

기존 fcitx 패키지로 설치된 Qt5 immodule 대체 설치

기존의 우분투 fcitx 패키지에 딸려온 Qt5 immodule을 대체해버리는 것이 가장 좋은 설치 방법이다. 안전을 위해 원래 파일은 org.libfcitxplatforminputcontextplugin.so로 백업했다.

$ sudo mv /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/org.libfcitxplatforminputcontextplugin.so

$ sudo cp ./src/libfcitxplatforminputcontextplugin.so /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/

또 한가지 대체해야 할 파일이 있다는 것을 나중에 알았다. Qt5 immodule이 사용하는 runtime library 파일 하나가 같이 build 되었다. 이 놈까지 버전이 일치해야 한다.

$ sudo mv /usr/lib/x86_64-linux-gnu/libfcitx-qt.so.0.1 /usr/lib/x86_64-linux-gnu/org.libfcitx-qt.so.0.1

$ sudo cp ./fcitx-qt5/libfcitx-qt5.so.0.1 /usr/lib/x86_64-linux-gnu/libfcitx-qt.so.0.1

참고 사항

참조한 일본 블로그에는 환경 변수 설정 같은 것들이 있다. 그렇지만 .bashrc에 입력기 환경변수를 넣으면 X-Window의 실행 순서 때문에 환경변수가 제대로 동작하지 않을 수도 있다. 편하고도 안전한 방법은 먼저 fcitx 패키지를 설치하는 것이다. 이 글은 fcitx 패키지가 먼저 설치된 것을 전제로 했다.

일본 블로그에서 설명하듯이 기존 파일들을 대체하지 않고도 새로 build한 Qt5 immodule을 사용할 수도 있는데 runtime library가 두 개라 환경 설정을 제대로 해주어야 한다(기존 패키지와의 충돌때문에 설정이 다소 복잡하므로 세부 설명은 안한다). 다만, Qt5 immodule을 복사해야 할 폴더는 /opt/OpenSrc/Qt/5.4/gcc_64/plugins/platforminputcontexts가 아니고, /opt/OpenSrc/Qt/Tools/QtCreator/bin/plugins/platforminputcontexts이더라. 뭐, 두 곳에 다 복사해도 상관은 없다.

댓글 7개:

  1. 혹시 Qt5.5.1을 적용해보니 안되네요.. 혹시 Qt5.5.1 해보신적이 있으신가요 ?

    답글삭제
  2. 지금 사용중인 Qt 버전이 5.5.0인데 우분투 16.04 전의 환경에서는 fcitx에서 한글입력이 안되는 문제가 있었는데 우분투 16.04를 설치하고 나서는 따로 해준게 없는데 fcitx에서 한글입력이 잘됩니다. 아마 fcitx가 버전업되면서 해결된듯 싶은데요. 우분투 16.04 설치시 설치된 Qt 버전이 5.5.1이네요.

    답글삭제
  3. 방금 Qt5.5.0을 지우고 Qt5.6으로 설치해서 QtCreator에서 fcitx 한글 입력테스트를 해보니 안됩니다. 안되는 이유는 QtCreator가 우분투의 라이브러리 path를 사용하지 않고 자신의 path를 사용하기 때문입니다. 아래와 같이 링크 걸어 주니까 한글 입력이 잘 됩니다. 예전에는 이렇게 해도 한글입력이 안됐었거든요.

    $ cd ${Qt_ROOT}/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts
    $ ln -s /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so libfcitxplatforminputcontextplugin.so

    답글삭제
    답글
    1. 저도 잘 되네요. 도움되었습니다. :)

      삭제
    2. 처는 QT5.10 사용하면서 이방법으로 QT creator에 한글 입력까지는 성공했는데, 이번에는 컴파일한 프로그램의 textedit에서 한글 입력이 안되더라고요.
      QT 자체 라이브러리에도 파일을 넣어줘야 하는 보양입니다.

      cd (QT 루트 폴더)/{QT 버전}/gcc_64/plugins/platforminputcontexts
      ln -s /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so libfcitxplatforminputcontextplugin.so

      삭제
    3. 님 말씀대로 두 군데 모두 fcitx plugin 모듈에 대한 링크를 걸어 주는게 좋겠습니다. 하나는 Qt Creator의 한글 사용을 위해, 하나는 Qt Creator로 build 한 파일을 위해서 입니다. 참고로, 우분투에는 따로 Qt를 설치하지 않아도 Qt 라이브러리가 기본 설치 됩니다. 일반적으로 c/c++ 파일을 build 하면 build한 파일들은 build 할 때의 라이브러리 path에 의존합니다. 근데 build 한 파일을 deploy하면 run-time 환경에서는 시스템의 라이브러리 path를 사용하게 되는 것이죠. 즉, 이때는 우분투라면 /usr/lib/x86_64-linux-gnu/ path의 라이브러리들을 사용하게 됩니다.

      삭제
  4. 16.04에서 이것도 저것도 다 빌드 해 보고 코드도 까봤는데 효과를 본건 다음과 같습니다.

    cat > ~/.xinputrc << EOF
    run_im fcitx
    export QT_IM_MODULE=fcitx
    EOF

    답글삭제