[WSL] 윈도우에서 우분투 GUI 프로그램 실행

PScreenShot-20190428-224248-700x700 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)


WSL 자체는 윈도우에서 리눅스의 유틸리티와 같은 바이너리를 실행할 수 있다는 데 큰 의의가 있습니다. 일반적으로 CLI 바이너리로도 가치가 충분합니다 (리눅스는 기본적으로 CLI기도 하고요).

하지만 심심하던 차에 CLI가 돌아가니 당연히 GUI도 돌릴 수 있을 거라 생각해서 여러 삽질을 좀 해 봤습니다. 아래는 해당 과정입니다.

본 글의 우분투 테스트 환경은 우분투 18.04를 받아서 따로 업그레이드한 우분투 19.04입니다.
WSL은 이미 설치가 되어 있는 상태라 가정하며, WSL 리눅스 설치 자체에 관한 글은 [윈도우 10에 우분투 설치, 제거 및 업그레이드] 글을 먼저 참고하시기 바랍니다.


[Windows 용 X Server 설치]

우선 그래픽 화면을 띄우려면 X Server같은 역할을 해 줄 뭔가가 필요합니다. 윈도우 내에서는 기본적으로 윈도우가 그래픽을 띄워주므로 윈도우 내에서 돌아갈 X Server가 필요한데, 대표적으로 VcXsrv 가 그 역할을 해줄 수 있습니다.

[VcXsrv 다운로드 페이지] 에서 받아서 설치해줍니다.

PScreenShot-20190428-194829 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)설치 파일 실행 모습

PScreenShot-20190428-194959-1000x720 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)Display number 는 -1로 둬도 상관 없으나, 0으로 명확히 정의

PScreenShot-20190428-195014-1000x720 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)첫 번째 옵션 선택 상태로 그대로 진행

PScreenShot-20190428-195021-1000x720 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)그대로 진행

PScreenShot-20190428-195029-1000x720 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)Save configuration 을 클릭하여 지금까지 설정 실행파일을 저장

이 위에서 그냥 완료를 눌러버리면 시작할 때마다 이 설정을 반복해줘야 합니다.
‘Save configuration’ 을 클릭하면 별도의 파일이 저장되는데, 이 파일을 실행하면 조용히 지금까지의 설정 그대로 백그라운드에 실행됩니다.

그리고 이 Save configuration 으로 저장된 .config 파일을 부팅 때마다 실행되도록 시작프로그램 폴더 안에 넣어주시면 됩니다.
시작프로그램 폴더는 윈도우키 + R 을 눌러서 나오는 ‘실행’ 창에

shell:startup

을 입력하고 엔터를 치면 바로 나옵니다.


[환경 설정]

설치하고 바로 GUI 유틸리티를 실행할 수 있는 상태가 되었지만, WSL 내 리눅스 쪽에서는 이 윈도우용 X Server가 설치되었는지를 모르기 때문에 설정을 해 줘야 합니다. 크게 별다를 건 없고 간단한데,

PScreenShot-20190428-195630-1000x709 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)쉘 설정 파일에 환경변수 추가

쉘 설정 파일 (.bashrc, .profile 등)을 열어서 GUI에 어떤 DISPLAY 를 사용할 것인지 명시해줍니다. 아까 설치 시 입력했던 0번 디스플레이를 이용하기 위해, 위 스샷과 같이 아래의 코드를 설정 파일에 한 줄 추가합니다.

export DISPLAY=:0.0

PScreenShot-20190428-200227-926x1000 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)환경 설정 후, 터미널에 emacs를 실행하면 뜨는 GUI창

추가한 뒤 wsl을 다시 실행하면 위 환경 설정값이 적용되어, GUI 유틸리티를 실행시킬 수 있는 상태가 됩니다.

그리고 GUI를 지원하는 유틸리티들을 설치해서 실행하면 모든 게 완벽하게 다 잘 돌아갑니다!
…라면 좋겠지만, 안타깝게도 잘 되는 것들도 있고 아닌 것들도 있습니다.


[트러블슈팅]

그렇게 실행해보면서 잘 실행되는 것들도 있었지만 문제가 발생하는 것들도 좀 있었는데, 이는 다음과 같이 해결했습니다.


1. 흐릿한 GUI 창

막상 창을 띄워보니 약간 GUI가 흐릿흐릿합니다 (바로 위에 있는 emacs GUI 창 스샷). 이건 디스플레이 scaling이 잘 안 된 경우인데, 흐릿한 GUI를 선명하게 보이게 하기 위해서는 추가 설정이 필요합니다.

흐릿하고 아니고는 컴퓨터 설정따라 다를 수 있으니 (기본적으로 scaling이 적용된 환경에서 나타나는 증상), 이 해결책은 각자의 판단 하에 적용하시기 바랍니다.

우선 VcXsrv를 설치한 폴더로 들어가서, 그 안에 있는 vcxsrv.exe 와 XLaunch.exe 두 파일에 대해 아래와 같이 설정을 변경합니다.

compat-vcxsrv ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)고 DPI 설정 덮어쓰기 옵션

‘파일 우클릭 – 속성 – 호환성 – 고 DPI 설정 변경 – 고 DPI 스케일링 덮어쓰기’ 박스 안에 있는 체크박스에 체크한 후, 그 아래 드롭다운 선택 메뉴가 프로그램/애플리케이션으로 되어 있는지 확인합니다.

PScreenShot-20190428-210842-1000x709 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)Scale 환경변수 설정

그리고 아까 그 환경 설정 파일로 돌아가서, 아래와 같은 줄을 하나 더 추가합니다.

export GDK_SCALE=(배율)

배율에 숫자를 넣으시면 됩니다. 1이 기본 scaling 배율 (100%)이고, 2면 두 배 (200%)가 되죠. 다만 1, 2, 3의 배수 scaling factor가 아닌 (1.5, 1.25 등의) fractional scaling factor은 현 시점에선 아직 적용이 안 되는 듯합니다.

PScreenShot-20190428-204853-1000x919 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)변경된 scaling이 적용된 GUI 창

변수를 설정한 다음 wsl를 다시 시작하고, VcXsrv도 다시 시작한 후 실행시켜보면 깔끔하게 잘 나옵니다. (스샷을 미리보기 상태로 보면 차이가 잘 안 보이는데, 클릭해서 원본으로 보면 크게 차이가 나는 것을 알 수 있습니다)


2. libGL error: No matching fbConfigs or visuals found, failed to load driver: swrast 에러

PScreenShot-20190428-204927-1000x709 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)에러 화면

먼저 VcXsrv 가 실행된 후 처음 GUI 창을 띄울 때 이런 에러가 나타나는 증상이 있었습니다. 두 번째부터는 VcXsrv를 다시 종료 후 실행시키기 전까지는 안 나타나더군요.
일단 제 경우 실행했던 유틸리티가 실행되지 않았던 것은 아니었지만, 에러가 계속 뜨는 건 찝찝한 면이 있기에 해결책을 찾아봤습니다.

PScreenShot-20190428-205116-1000x709 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)해결 화면 (emacs 실행 전에 VcXsrv는 재실행)

에러 메세지를 없애는 해결책으로는 /usr/lib/x86_64-linux-gnu 디렉터리 안에 있는 mesa 관련 파일들을 모두 삭제하는 것이었습니다. 다만 단순히 라이브러리 파일을 삭제하는 것인 만큼 모종의 부작용이 생길 가능성이 있다는 점은 염두에 두시기 바랍니다.
전 단순 삭제도 좋지만 만에 하나의 경우를 대비해 아래와 같이 백업을 했습니다.

sudo mv /usr/lib/x86_64-linux-gnu/*mesa* ./tmp

3. 파이어폭스 crash / 종료

테스트 삼아 설치 후 파이어폭스를 실행시켜 봤는데, 이게 실행되고 계속 프로그램 자체가 crash 되면서 종료되는 증상이 있었습니다. 지금 생각해보면 다른 프로그램 실행 시에도 나타날 수 있었겠네요.
아무튼 이 문제의 해결은 dbus-x11 패키지를 설치하는 것으로 해결했습니다.

sudo apt install dbus-x11

4. 기타 미해결

문제가 모두 해결된 상태는 아닙니다. 우선 dbus 소켓 관련 문제로 파이어폭스의 인터넷 연결 자체가 안 됩니다(…)
또한 실행 즉시 crash와 함께 종료되는 프로그램도 한둘 보였으며, 전반적으로 GUI 성능이 약간 굼뜬 편에 속했습니다 (반응이 못 써먹을 정도로 엄청 느린 편은 아니지만, 초당 프레임이 네이티브에 비해 약간 낮은 듯한 느낌).

또 윈도우에서 바로가기를 마우스 클릭으로 실행시키면 바로 WSL 내의 GUI 창이 뜰 수 있도록 이리저리 해 보고 있는데, 결론적으로 가능은 한 것으로 보이나 경로 처리 등 신경쓸 게 좀 있어서 아직 진행 중입니다.
(cmd 등에서 WSL로 안 들어가고 명령어로 직접 실행시키는 CLI 방식은 이미 몇 년 전부터 써오고 있었기에 시간 단축에 꽤 도움이 됐군요)


[여러 GUI 실행 결과]

PScreenShot-20190428-204853-1000x919 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)우선 가장 처음 실행시켜 봤던 emacs

PScreenShot-20190428-223406-1000x790 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)파이어폭스 (왼쪽이 Ubuntu, 오른쪽이 Windows 프로그램)

다만 파이어폭스는 위 트러블슈팅 부분에 있듯 실제 인터넷 연결은 안 됩니다.

PScreenShot-20190428-223626-1000x707 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)gnome-terminal

반투명한 본래 터미널 뒤로 흰 바탕의 gnome terminal 이 흐릿하게 보입니다.

PScreenShot-20190428-223934-1000x673 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)nautilus 로 본, 조금 전 백업했던 mesa 관련 디렉터리

PScreenShot-20190428-224248-1000x673 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)nautilus 로 C 드라이브에 들어간 모습

우분투 기본 파일 탐색기인 nautilus는 첫 실행 시 한참 반응이 없다가 오류를 막 띄우면서 실행이 되긴 하던데, 실행된 후부터는 딱히 별 문제는 없어 보였습니다.

PScreenShot-20190428-224908-1000x810 ([WSL] 윈도우에서 우분투 GUI 프로그램 실행)LibreOffice – Calc

우분투 버전 엑셀입니다.


[마치며]

생각보다 많은 유틸리티들이 실행이 됩니다. 물론 위 트러블슈팅처럼 안심하고 쓰기에는(..) 아직 갈 길이 멀긴 하지만 아무튼 이 정도 실행이라면 원하는 유틸리티 한 두개 정도는 실사용이 가능하지 않을까 싶네요.

2 thoughts on “[WSL] 윈도우에서 우분투 GUI 프로그램 실행”

  1. 좋은글 감사합니다. 이 글을 보고 저 또한 시도를 해 보았는데 gnome을 설치하고 나니 firefox가 정상적으로 인터넷 연결이 되었습니다. 폰트가 깨지긴 하는데 이건 폰트를 깔면 해결되겠죠

    1. 호오… 좋은 정보 감사합니다. 말씀주신 부분도 시간 날 때 시도해 봐야겠네요.

Leave a Reply

Your email address will not be published. Required fields are marked *