WSL2에서 한글 입력 사용하기

지난 포스트에서는 WSL1에서 한글 입력을 사용하는 방법에 관해 다루었습니다. 아시다시피, 일반 사용자들은 Windows 10 2004 업데이트를 통해서 WSL2를 이용할 수 있게 되었지요. 이에 따라 WSL2에서 한글을 입력할 수 있는 방법에 대해 관심을 가진 분들이 늘어나는 듯 합니다.

저는 전공자가 아닌 일반 사용자로서 WSL1과 WSL2의 차이를 가상화의 여부라고 얽게 이해하고 있습니다 (이 이해가 틀렸다고 생각하신다면 댓글로 의견과 조언을 부탁드리겠습니다). 어쨌든, 두 단어인 ‘가상화 여부’가 사용자에게는 큰 도전을 불러일으켰다는 점은 분명해 보입니다. 특히 기존에 WSL1을 사용하던 분의 경우, 예전의 방식이 WSL2에서 통하지 않게 되는 경우가 많아서 (특히 X-server를 통하는 방법에서 근본적인 차이가 발생하게 됩니다) 당황스러우셨을 줄 압니다. 저도 그런 어려움을 겪은 입장에서, 이번 포스트를 작성해야 할 동기가 생겼습니다. 서론은 이쯤 하고, 간략하게 WSL2에서 한글 입력을 사용하는 방법을 개조식으로 소개하고 상세한 내용을 뒤에 이어서 작성하도록 하겠습니다.

TL;DR

  1. X-server 애플리케이션 설치 (e.g., X410, Xming, VcXsrv)
  2. X-server와의 통신 환경 구축 (환경 설정 추가)
  3. 한글 입력기 설치
  4. 한글 입력기 설정

상세

  1. X-server 애플리케이션 설치
  • 따로 링크를 달지는 않겠지만, Windows Store에서 X410 (유료)를 설치하시거나 Xming, VcXsrv 등을 설치하시기 바랍니다.

2. X-server와의 통신 환경 구축

  • X410/Xming/VcXsrv가 켜져 있어야 합니다.
  • WSL1에서는 localhost가 127.0.0.1로 되어 있고 이 포트가 열려 있었다고 한다면, WSL2에서는 구동할 때마다 이 주소가 바뀝니다. 따라서 설정을 읽어서 DISPLAY 환경 변수를 바뀐 주소로 인식할 수 있게 만들어 주어야 합니다.
  • ~/.bashrc를 nano (root 권한 필요)나 vi (root 권한 필요)로 열어서 맨 아랫줄에 아래와 같은 코드를 추가합니다.
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0

참고 사이트에서는 netcat을 이용해서 포트가 제대로 열려 있고 통신할 수 있는지 확인하도록 권장하고 있으며, 저도 그대로 따랐는데 여기서 오류를 발견합니다. 모든 사람이 이 오류를 발견하지는 않을 가능성이 높습니다. 참고해 주십시오.

  • 참고 사이트를 읽어 주십시오. 이 사이트에 나오는 Windows Firewall 설정이 되어 있지 않으면 아래의 내용을 적용한 후에도 한글 입력이 되지 않는 경우가 있을 수 있기 때문입니다.
  • GitHub WSL 이슈 페이지에서는 포트 설정 등 더욱 심화된 내용들이 나오므로, 아래 내용을 적용해도 한글 입력이 되지 않는 경우 참고하여 설정을 바꾸어 주시기를 권장드립니다.
nc -v [my ip] 6000
> DNS fwd/rev mismatch: [hostname] != [hostname].localdomain

아마도 호스트 이름이 같지 않아서 통신이 되지 않는다는 이야기이겠지요. 약간의 검색 결과, /etc/hosts에서 이름을 고쳐 주면 되는 듯 하여 그대로 적용하였습니다. 예를 들어, 원래 /etc/hosts의 내용 중에서 이러한 내용이 있다면,

[truncated]
127.0.1.1    [hostname].localdomain     [hostname]

아래와 같이 바꾸어 줍니다.

[truncated]
127.0.1.1    [hostname]     [hostname].localdomain

그리고 X410의 경우 아래의 옵션을 활성화해 줍니다. 원인은 잘 모르겠으나 이 옵션을 켜야만 X-server가 제대로 동작하더군요.

X410 설정 화면.

3. 한글 입력기 설치

예전 포스트에서는 uim을 이용했습니다만, 최근에는 fcitx로 바꾸어서 이에 맞추어 설명하도록 하겠습니다. 대부분의 설명은 참고 사이트에 따라 한글로 바꾸어 작성하였습니다.

sudo apt install fcitx fcitx-hangul fonts-noto-cjk dbus-x11

의존 패키지를 모두 설치하므로 디스크 용량을 다소간 차지할 수 있습니다. 제 경우는 700MB 정도 차지하는 듯 하더군요.

4. 한글 입력기 설정

설치가 끝나면, im-config를 켜서 fcitx를 기본 입력기로 설정하고 환경 설정 파일을 작성합니다.

위 화면은 im-config를 실행한 후에 OK-OK를 누르면 볼 수 있습니다. 위 화면처럼 설정합니다. OK 버튼을 눌러 설정을 완료합니다.

아래를 실행한 후, 그 아래의 코드를 그대로 입력합니다.

sudo nano /etc/profile.d/fcitx.sh
#!/bin/bash
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx

#optional
fcitx-autostart &>/dev/null

fcitx-config-gtk3을 실행하여 한글 입력기가 잘 추가되어 있는지 확인합니다.

위 화면처럼 영어와 한글이 모두 추가되어 있어야 합니다.

이윽고…

완성!

기본 환경 설정 상 입력 방법 (언어) 간 전환 키 조합은 Ctrl+Space입니다. 위 화면은 Kate를 설치하고 나서 Ctrl+Space를 눌러 한글 모드로 바꾼 후 입력한 결과입니다. 한/영 키로 바꾸고 싶으신 분들은 따로 검색해 보시면 정보가 많으니 참고해 주십시오.

많은 분들께 모쪼록 도움이 되는 정보이기를 바랍니다.

WSL2에서 한글 입력 사용하기”에 대한 14개의 생각

  1. 한국어 입력 설정에 관하여 이 블로그의 도움을 많이 받고 있습니다. 매번 감사드립니다.

    WSL 1의 경우에는 Windows 커널에 직접 부착하는 커널 드라이버가 WSL로부터 들어오는 리눅스 시스템 콜을 Windows NT API와 연결하여 번역, 변환 후 처리하는 방식을 사용합니다. CPU가 가상화를 지원하지 않는 환경 (예: AWS 같은 퍼블릭 클라우드 환경)에서도 쓸 수 있는 이점이 있지만, 입출력 속도가 매우 나쁘며, 파일 시스템 역시 리눅스의 기능을 지원하기 위해서 NTFS를 억지로 늘려쓰는 구조를 갖고 있어서 WSL에서 저장한 파일을 복사해서 다른 컴퓨터의 WSL 환경으로 가져가면 파일이 깨지는 문제가 있습니다.

    반면 WSL 2는 윈도 샌드박스, 윈도 컨테이너에서도 쓰는 방식인 Hyper-V 격리 (완전한 가상 컴퓨터가 아니라 기술 이름만 Hyper-V를 빌려 씁니다) 방식을 써서 추상화를 했기 때문에 CPU 가상화나 중첩 가상화가 전제가 되야 하긴 하지만, 성능 문제나 시스템 불안정성을 완전히 제거할 수 있고, 이 때문에 리눅스 커널을 fork 버전이긴 하지만 원래의 리눅스 커널 그대로를 쓸 수 있게되서 이점이 많습니다. (WSL 1은 깃헙 이력에도 잘 나와있지만 리눅스 커널을 따라하느라 마치 뱁새가 황새 따라가듯 억지로 맞추느라 MSFT 직원들이 엄청 고생한 흔적이 많이 남아있습니다. ㅋㅋ)

    1. 답변 감사드립니다! 포스트를 올리자마자 반응이 있을 줄은 상상도 못 했습니다.
      WSL1에서 리눅스 커널을 그대로 사용하지 않았군요… 제가 전혀 잘못 이해하고 있었네요. 작성해 주신 내용을 보고 WSL1과 WSL2 간의 차이에 대해 확실하게 개념을 잡을 수 있었습니다. 상세하게 소개해 주셔서 다시 한 번 감사드립니다.

      1. 작성해주신 아티클의 내용을 기초로 요즈음 제가 활용하고 있는 WSL 2 + X11 애플리케이션 실행 방법을 소개하는 아티클을 작성해보았습니다. 여러모로 도움 주셔서 감사드립니다.

        Medium.com에서 보기

  2. bash가 아니라 zsh를 사용할 경우 한글 설정을 어떻게 해야하나요..?ㅜㅜ

    1. 안녕하세요, 안타깝게도 제가 zsh를 사용해본 적이 없어서 관련한 도움을 드리기는 어려울 것 같습니다.
      다만 간단하게 검색해 본 결과, 일단 im-config의 버전을 확인해 보시고 업그레이드 해 주시는 편이 좋겠다고 생각합니다. 참고할 만한 사이트 소개해 드립니다: https://www.nemonein.xyz/2018/12/1403/

      1. 무사히 해결하셨다니 다행입니다. zsh도 색다른 매력이 있어 보이는데, 알려 주신 내용을 곧 포스트에 반영하도록 하겠습니다. 도움 주셔서 감사합니다.

  3. 혹시 fcitx로 JetBrains IDE에도 한글 입력이 잘 되시나요? gedit이나 firefox에서는 입력이 잘 되는데 intellij에서만 입력이 안되네요..

    1. 어플리케이션에 따라서 fcitx가 듣지 않는 경우도 있다고 알고 있습니다. 어플리케이션별 설정이 필요한 것은 아닌지 한번 살펴 보시면 어떨까 합니다.

  4. 글 잘 읽었습니다. fcitx-config-gtk3 을 실행했지만, input method에 아무 것도 나타나지 않습니다.
    패키지 설치와 im-config 설정 작업, /etc/profile.d/fcitx.sh 작성 등의 작업은 했습니다. 더 확인해볼 작업이 있을까요?

    1. 먼저 열려 있는 WSL을 모두 종료하신 후 다시 켜서 실행을 시도해 보시는 방법을 추천드립니다. 한편,
      https://forums.linuxmint.com/viewtopic.php?t=194807
      페이지에 따르면 버전 간 충돌이 있으면 input method가 빈 화면으로 나타난다고 합니다. fcitx를 완전히 삭제하고 fcitx와 fcitx-hangul을 설치해 보시면 어떨까 합니다.

      1. fcitx 가 자동으로 실행되지 않아서 발생한 문제인 것 같습니다. fcitx & 를 실행한 후에 fcitx-config-gtk3 를 실행하니 제대로 나옵니다.
        이유는 잘 모르겠지만 그 이후에는 fcitx가 자동으로 잘 실행이 되네요.

  5. 글보고 따라해서 기본적으로 한글 입력은 잘 되는것 확인했습니다.

    그런데 혹시 한/영 키를 사용해서 전환하는것 해보셨는지요??

    이곳저곳 찾으면서 해봤는데도 X11 윈도우 모드 환경에서는 어떻짓을해도 한영키로 전환이 안됩니다.

    xev 를 통해 올라오는 키코드를 보면 Alt_R, Ctrl_R로 나와야 하는 실제 오른쪽 알트, 컨트롤키의 로그가 Alt_L, Ctrl_L로 찍히는것과 관련있는것 같은데 도무지 모르겠네요.

    혹시 한영키도 전화하는것도 해보셨다면 조언좀 부탁드리겠습니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중