Windows 10에서 리눅스용 프로그램 설치하고 실행하기

남정현
남정현
Oct 12, 2017 · 13 min read

노트: 이 글은 https://wp.me/p8DzDJ-yW 의 내용을 바탕으로 Fall Creators Update 출시에 맞추어 쓴 글입니다.

업데이트 1: 피드백을 수용하여 Gnome Terminal에 관한 내용을 추가하고, WSL의 한계점에 대한 정보를 추가하였습니다. (AskDjango의 이진석 Microsoft MVP님께 감사드립니다.)

업데이트 2: dbus-uuidgen 명령에 대한 언급을 추가하였습니다.

지난번에 올린 글 에 많은 관심을 가져주셔서 감사합니다. Windows 10 Fall Creators Update의 Windows Subsystem for Linux (이하 WSL)은 문자 그대로 완전한 형태의 리눅스 배포판을 내장하고 있고, 이를 통하여 오픈 소스 기반의 개발 환경을 쉽게 구축할 수 있다고 말씀드렸습니다.

하지만, 한 가지 아쉬운 점이 있습니다. 바로 GUI 프로그램을 실행할 수 없다는 것입니다. 정확하게는, X Window System 기반의 GUI 프로그램의 실행에 필요한 X org 서버를 Microsoft가 제공하지 않기 때문에 실행할 수 없습니다.

그러나 X Window System의 디스플레이 서버는 마치 Windows의 Remote Desktop이나 크로스플랫폼에서 실행되는 VNC, TeamViewer처럼 로컬 뿐만이 아니라 TCP 프로토콜을 이용하여 원격지 서버에 화면을 투영할 수 있는 기능을 기본 설계에서부터 내장하고 있어 이런 제약을 쉽게 뛰어넘을 수 있습니다.

이 글에서는 이러한 X Window System의 설계를 십분 활용한 오픈 소스 기반의 Windows 운영 체제용 X Org 서버인 Xming Server를 이용하여 WSL에서 리눅스 기반 X Window System용 GUI 프로그램을 실행하는 방법을 살펴보려고 합니다.

이제 개발 환경의 준비는 모두 마무리했고, X Window를 실행하기 위한 준비를 해야 합니다. Windows OS에서는 Xming 서버라는 X Window 호환 서버를 설치할 수 있으며 Ubuntu on Windows에서 쉽게 연결할 수 있습니다.

Windows용 X org 서버 설치하고 실행하기

X org 서버는 여러 가지, 여러 버전이 있습니다. 비교적 오랫동안 사용되어왔고 널리 쓰이는 Xming 서버와 X11 코드를 VC++ 기반에서 컴파일했다고 하는 VCXSRV 서버 두 가지를 테스트해보았는데, 응용프로그램 호환성과 그래픽 가속 면에서 더 좋은 쪽은 VCXSRV 쪽 인것으로 보입니다.

이 아티클을 작성하는 동안에 더 많이 사용해 본 것은 Xming 서버였으며, VCXSRV를 대신 사용하여도 무방합니다. 또한 양쪽 모두 서버를 설치한 후 실행하기만 하면 이 아티클의 내용을 그대로 적용할 수 있습니다. 사용법도 같습니다.

https://sourceforge.net/projects/xming/ 에서 최신 버전의 Xming 서버를 우선 설치하도록 합니다. 설치 후에는 직접 Xming 서버를 한 번 실행하여 아래 그림과 같이 트레이에 실행 중인 모습을 확인해야 합니다.

WSL 환경 설정 및 테스트하기

WSL 환경 위에 기본적인 X Window System을 설치하여 Xming 서버와 연결이 이상이 없는지 점검해보도록 하겠습니다.

계속하기 전에, 일부 프로그램에서 필요로 하는 파일인 /etc/machine-id 파일을 새로 만들도록 하겠습니다. (만들어지지 않았을 경우 오류가 발생할 수 있습니다.) 그리고 dbus-uuidgen 명령을 같이 실행하겠습니다.

sudo systemd-machine-id-setup
sudo dbus-uuidgen — ensure
cat /etc/machine-id

위와 같이 명령을 실행했을 때 구분 기호 없이 16진수 형태의 GUID 값이 표시되면 정상적으로 파일이 만들어진 것입니다.

이제 x11-apps 패키지와 X Window System 기본 서체를 설치하도록 합니다.

sudo apt -y install x11-apps xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic

그 다음, Xming 서버와 연결하는 설정을 현재 세션에ㅔ서 사용하기 위하여Ubuntu 터미널에서 다음 명령어를 입력합니다.

export DISPLAY=:0

그리고 위의 명령어를 현재 로그인한 사용자에 대해서만 항상 적용하려면 아래 명령어를 실행하여 bashrc 파일에 위에서 입력한 명령을 파일 끝에 추가한 다음 저장하고 bash 셸을 다시 시작합니다.

nano ~/.bashrc

설정을 적용한 다음에는 Windows 운영 체제에서 Xming 서버 또는 VCXSRV 서버를 실행합니다. Xming 또는 VCXSRV 서버는 별도의 UI가 없으며 아래 그림과 같은 트레이 아이콘이 표시되면 정상적으로 실행 중인 것입니다.

서버의 실행을 확인한 다음 아래 명령어를 실행합니다.

xeyes

그러면 아래와 같이 위젯이 나타나게 됩니다.

X Window System을 WSL을 통하여 실행할 수 있는 기본을 마련하였으니 이제 좀 더 재미있는 기능들 몇 가지를 테스트해보겠습니다.

주요 응용프로그램 설치하기

지난번에 설치했던 Java 개발 환경을 바탕으로 X.org 서버에서 실행할 수 있는 실용적인 응용프로그램들을 추가로 설치해보려고 합니다.

  • Restricted Package (MP4 코덱 및 기타 상용 구성 요소)
  • Firefox (웹 브라우저)
  • Nautilus + File Roller (파일 관리자 + 압축 관리 프로그램)
  • Gnome Terminal (터미널)
  • Libre Office (오피스 스위트)
  • GIMP (이미지 편집기)
  • Inkscape (벡터 그래픽 편집기)
  • Eclipse (Java 개발 도구)

MP4 동영상 재생을 포함한 시중에서 널리 쓰이는 구성 요소들을 쉽게 쓸 수 있도록 Restricted Package를 우선 설치합니다.

sudo apt -y install ubuntu-restricted-extras

Firefox 설치는 아래와 같이 명령을 입력합니다.

sudo apt -y install firefox

그러면 X.org 구성에 필요한 패키지 말고도 Firefox 실행에 필요한 패키지들이 추가로 설치됩니다. 설치가 끝나면 아래와 같이 명령을 입력합니다. 뒤에 &을 붙이는 것은 프로그램 실행 후에도 계속 콘솔을 사용하기 위함입니다.

firefox&

기대한 것과 같이 Firefox의 리눅스 버전이 Windows 10에서 수정 없이 그대로 실행되는 모습을 볼 수 있습니다. 탭을 드래그하여 다른 창으로 분리하거나 합치는 기능이 잘 작동하고, 다중 데스크톱 위에 창을 배열하거나 창을 분할하는 것도 문제 없습니다.

이번에는 Nautilus를 설치해보도록 하겠습니다. 그리고 압축 파일을 편하게 다룰 수 있도록 File Roller 패키지도 같이 설치하겠습니다. (Nautilus와 연동이 됩니다.)

sudo apt -y install nautilus file-roller

그리고 Nautlius를 실행하기 위하여 아래와 같이 명령을 입력합니다.

nautilus&

그러면 아래와 같이 리눅스 파일 시스템을 기본으로 하는 Nautilus 파일 관리자가 실행되는 것을 볼 수 있습니다. 화면에서 보이는 것과 같이 당연히 /mnt/c 디렉터리 아래에는 Windows 파일 시스템의 내용이 표시됩니다.

GIMP, Inkscape, Libre Office, 그리고 Gnome Terminal은 한꺼번에 설치해보겠습니다.

sudo apt -y install gimp inkscape libreoffice gnome-terminal

그리고 이제 마지막으로 Eclipse는 웹에서 다운로드받아 설치하는 프로그램입니다. 실행 전에 JRE와 JDK를 설치했는지 점검합니다. 설치되어있지 않을 경우 아래 명령으로 우선 설치를 진행합니다.

sudo apt -y install openjdk-8-jre-headless openjdk-8-jdk-headless

기본 준비가 끝나면 아래 웹 사이트에 각각 방문해서 설치를 진행하도록 합니다. Eclipse의 최신 버전은 http://www.eclipse.org/ 에서 다운로드할 수 있습니다.

앞에서 Firefox와 Nautilus를 설치했으므로, 커맨드 라인이 아니라 GUI 프로그램을 사용하여 Eclipse 웹 사이트에서 다운로드받아 실행해보겠습니다.

Nautilus와 File Roller를 설치했으므로 별도의 압축 관리자를 찾지 않아도 tar.gz 파일을 열여 내용을 보고 압축을 풀 수 있습니다.

폴더를 열고 들어가서 eclipse-inst 아이콘을 오른쪽 버튼으로 클릭하고, 나타나는 메뉴에서 Run 메뉴를 클릭합니다.

파일을 실행하고 잠시 기다리면 Eclipse 설치 마법사가 표시됩니다.

설치가 완료된 후, JDK 설치 경로를 지정해주어야 Eclipse에서 Java 애플리케이션을 개발할 수 있습니다. JDK 기본 설치 경로는 /usr/lib/jvm 아래이며, 자세한 설정 방법은 다음과 같습니다.

  • Eclipse 창의 메뉴 바에서 Window — Preference 선택
  • 좌측 트리 뷰에서 Java — Installed JREs 선택
  • Add 버튼을 눌러 /usr/lib/jvm 아래의 JDK 설치본을 추가한 후, 기본으로 사용할 환경을 선택하고 Apply 버튼을 클릭
  • Close 버튼을 눌러 대화 상자를 닫고, 새 프로젝트를 만들어봅니다.

그러면 아래와 같이 프로젝트를 만들 수 있습니다. 참고로, 이렇게 리눅스 파일 시스템 상에 파일이 만들어지는 경우, Windows OS에서는 다음의 위치에 파일이 저장됩니다.

%localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_…\LocalState\rootfs

한글 표시와 한국어 로캘 설정하기

한국어 로캘 및 한글 글꼴을 설치하여 X Window System 상에서 정상적으로 한글을 표시할 수 있도록 하겠습니다.

sudo apt -y install language-pack-ko
sudo locale-gen ko_KR.UTF-8
sudo apt -y install fonts-unfonts-core fonts-unfonts-extra fonts-baekmuk fonts-nanum fonts-nanum-coding fonts-nanum-extra

한글 글꼴과 한국어 로캘이 잘 작동하는지 확인하기 위하여 네이버 등의 국내 웹 사이트를 접속해봅니다. 아래 그림과 같이 표시되면 잘 동작하는 것입니다.

몇 가지 빠진 것

WSL에서 실행하는 리눅스 환경은 완전한 환경이 아니기 때문에 다음의 구성 요소를 사용할 수 없는 문제가 있습니다.

  • DBUS에 종속적인 어플리케이션이나 서비스들
  • ALSA, PulseAudio (오디오 재생)
  • 한글 입력기
  • Gnome Clutter 기반 어플리케이션 (GNOME Shell 포함)
  • 일부 시스템 서비스
  • SQL Server on Linux와 같이 리눅스의 고급 기능을 사용하는 네트워크 서버, 데이터베이스
  • Docker Container (단, Docker 클라이언트는 얼마든지 설치해서 원격의 Docker Swarm이나 Docker Container에 액세스하고 제어할 수 있습니다.)

위의 주제들 중 한글 입력기와 같은 부분은 자체적인 해결 방안을 모색해낼 수도 있을 것 같습니다. 하지만 다른 주제들의 경우 WSL의 개발 의도나 목적에 부합하는 사항들은 아니므로 큰 의미는 두지 않는 것이 좋겠습니다.

결론

WSL 환경에서 X Window System 기반 GUI 프로그램을 실행하는 것은 특별한 의미가 없습니다. 왜냐하면, Windows 운영 체제와 이미 동일한 프로세스, 파일 시스템을 사용하고 있기 때문에 GUI 프로그램을 구태여 리눅스를 통하여 실행하는 것이 갖는 의미가 약하기 때문입니다. 이는 mac OS에서 X org 서버를 사용하던 것과 다르지 않습니다.

그럼에도 불구하고 X Window System 기반 애플리케이션을 WSL을 통하여 실행하는 것이 의미가 있을 수 있는 이유는, IDE를 포함한 개발 환경의 완전한 단일화와 프로그램 테스트 등에서 유용하게 쓰일 수 있기 때문입니다. 그리고 무엇보다도, VM 기반이 아니기 때문에 테스트와 사용 시 속도와 효율성 면에 있어서 매우 유리합니다.

이러한 점을 감안하여 적절하고 유용하게 X Window System 서버를 활용하여 X11 응용프로그램도 WSL 환경에 응용하여 사용하시면 좋겠습니다.

남정현의 블로그

DevOps related blogs

남정현

Written by

남정현

Azure와 .NET 기술을 즐겨 사용하는 개발자입니다. 한국 Azure 사용자 페이스북 그룹에서 활동합니다.

남정현의 블로그

DevOps related blogs