<strong><a target="_blank" href="https://youtu.be/qxmJ_Ep-Fz0" target="_blank">두근두근 울렁울렁 가슴 뛰지만 무섭고도 두려워서 겁이 나지만</a></strong> 새해를 맞아 사용하고 있는 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%9A%A9_%EC%9C%88%EB%8F%84%EC%9A%B0_%ED%95%98%EC%9C%84_%EC%8B%9C%EC%8A%A4%ED%85%9C" target="_blank">리눅스용 윈도우 하위 시스템</a>(이하 WSL)에 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%BD_%EC%82%AC%EC%9A%A9%EC%9E%90_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4" target="_blank">그래픽 사용자 인터페이스</a>(이하 GUI)를 입혀보기로 했습니다. 알고계시겠지만, WSL은 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%86%8C%ED%94%84%ED%8A%B8_%EC%9C%88%EB%8F%84%EC%9A%B0" target="_blank">마이크로소프트 윈도우</a>(이하 윈도우)에서 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4" target="_blank">리눅스</a> 바이너리를 사용할 수 있도록 매개하는 개발자용 도구입니다. 리눅스 명령을 그대로 사용할 수 있다는 장점이 있지만, 아직 여러 한계가 있습니다. 그 중 하나가 바로 GUI 부분이죠.<br><br>이 한계를 피해가는 몇 가지 방법이 있습니다. 가장 쉬운 방법은 윈도우에 <a target="_blank" href="https://en.wikipedia.org/wiki/X.Org_Server" target="_blank">X 서버</a>를 설치하고 리눅스에서 DISPLAY 환경 변수를 이 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B2%84" target="_blank">서버</a>의 화면으로 지정하는 것입니다. 또 다른 방법은 리눅스에서 <a target="_blank" href="https://en.wikipedia.org/wiki/Xrdp" target="_blank">Xrdp</a>같은 <a target="_blank" href="https://en.wikipedia.org/wiki/Remote_Desktop_Services" target="_blank">윈도우 원격 데스크톱</a>을 지원하는 서비스를 제공하는 것입니다. 크게 어려운 일은 아닙니다. 인터넷에서 쉽게 정보를 찾아볼 수도 있고요. 어려웠던 점은 제가 <a target="_blank" href="https://namu.wiki/w/%ED%8E%80%ED%88%AC%20%EB%A6%AC%EB%88%85%EC%8A%A4" target="_blank">펀투 리눅스</a>라는 극히 마이너한 리눅스 배포판을 사용하고 있어서... 찾은 문서의 내용을 그대로 따라하는 수준으로는 되지 않았다는 점 정도입니다.<br><br><img width="800" height="621" class="chimg_photo" alt="1.png" src="http://thimg.todayhumor.co.kr/upfile/201901/15468874308b66840006e04d85a75def3abba4e1b9__mn757958__w1026__h796__f30489__Ym201901.png" filesize="30489"><br><img width="800" height="621" alt="2.png" src="http://thimg.todayhumor.co.kr/upfile/201901/15468874316a2704a4e42a4353abef1275dbf2123e__mn757958__w1026__h796__f47770__Ym201901.png" filesize="47770"><br><br><a target="_blank" href="https://ko.wikipedia.org/wiki/Xfce" target="_blank">Xfce</a>를 띄워봤습니다. 리눅스의 사용자 홈 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC" target="_blank">디렉터리</a> 밑에, 윈도우의 바탕화면(%USERPROFILE%\Desktop 디렉터리)을 Desktop이란 이름으로 심볼릭 링크해 두었더니 Xfce의 바탕화면이 윈도우와 연동되기도 하고요. 조금 더 욕심이 생겨 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%86%88" target="_blank">그놈</a>을 시도해봤습니다. 문서가 없는 이유가 있었습니다. 여러 방법을 시험해보다 내가 왜 이러고 있지... 하는 의문이 생겼네요.<br><br>어짜피 내가 WSL에서 가장 많이 사용하는 것은 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EC%9D%B4%EB%A7%A5%EC%8A%A4" target="_blank">이맥스</a>일 뿐이고(윈도우에도 이맥스 바이너리가 있지만 리눅스에서 사용하는 것이 더 편하니까), 다른 GUI용 프로그램은 많이 사용하지 않는데 무거운 데스크톱 환경을 굳이 설치해야하나 하는 생각이 들었습니다. 이런 생각이 들어 찾아보니 <a target="_blank" href="https://github.com/ch11ng/exwm" target="_blank">이맥스 안에서 X의 창 관리</a>를 해주는 패키지가 있더군요.<br><br><img width="800" height="621" class="chimg_photo" alt="3.png" src="http://thimg.todayhumor.co.kr/upfile/201901/1546887432cc8af1ee91d24a4a9fba0262b6dcdd68__mn757958__w1026__h796__f93111__Ym201901.png" filesize="93111"><br><br>위의 원격 데스크톱 화면과 달리 이맥스가 달랑 뜹니다(화면 갈무리를 위해 크기를 줄였지만, 모니터 전체에 이맥스가 뜰 때 기분이란...). 이게 이맥스이므로 이맥스의 키 바인딩으로 화면 분할이 됩니다. <code>C-x 3</code> 으로 양 쪽으로 나누고 <code>C-x 2</code> 로 위 아래로 나눌 수 있습니다. <code>C-x 1</code> 또는 <code>C-x 0</code> 로 합칠 수 있고요, <code>C-x o</code> 로 순회할 수 있습니다. 물론, 이런 단축키는 이맥스 사용자라면 익숙한 것이겠죠.<br><br><img width="800" height="621" class="chimg_photo" alt="4.png" src="http://thimg.todayhumor.co.kr/upfile/201901/15468874325a7cbf7d2fe5495e9be86dc67a579035__mn757958__w1026__h796__f136916__Ym201901.png" filesize="136916"><br><br>창을 나누고 <a target="_blank" href="https://ko.wikipedia.org/wiki/%EA%B5%AC%EA%B8%80_%ED%81%AC%EB%A1%AC" target="_blank">구글 크롬</a>과 EShell을 띄워봤습니다. 외부 프로그램을 실행시킬 때는 <code>S-&</code> 키를 누르라고 하더군요. (윈도우에서 이 키 조합은 ctrl 과 alt 사이에 있는 윈도우키를 누르고, shft 키와 7 키를 누르는 것입니다. 원격 데스크톱이 전체 화면을 사용하도록 하지 않으면 윈도우 메뉴가 먼저 떠버립니다. 전체 화면이 아니라면 키 바인딩을 바꿔야 될 것 같네요.) <code>M-!</code> 로 외부 프로그램을 실행시키면 안됩니다. (쉘에서 GUI 프로그램을 실행시킬 때와 같은 일이 벌어집니다. 백그라운드--&--로 실행시키지 않으면 그 프로그램이 종료할 때 까지 쉘이 잠기게 됩니다.)<br><br><img width="800" height="621" class="chimg_photo" alt="5.png" src="http://thimg.todayhumor.co.kr/upfile/201901/15468874334e0401960d49426dabacf9697c8ec5d6__mn757958__w1026__h796__f138239__Ym201901.png" filesize="138239"><br><br>EXWM 은 화면의 공간을 절약하기 위해 기본적으로 메뉴 바를 숨깁니다. <code>M-x menu-bar-mode</code> 명령으로 메뉴 바를 드러내면 구글 크롬이 이맥스 안에서 실행된 것이 더욱 확실하게 보이네요. 또 다른 재미있는 기능은 작업 공간 이동이었습니다. 첫번째 작업 공간에서 화면 구성을 이렇게 잡아두고, <code>S-w</code> 키를 눌러 다른 작업 공간을 선택해서 다른 화면을 구성할 수 있었습니다. (이맥스의 다른 프레임을 선택해서 윈도--창--를 나누는 것에 해당하겠죠.)<br><br><img width="800" height="621" class="chimg_photo" alt="6.png" src="http://thimg.todayhumor.co.kr/upfile/201901/15468874346f03759f3d3642cdab91cd13143db0bb__mn757958__w1026__h796__f137739__Ym201901.png" filesize="137739"><br><br>발견하고 설치해본 것이 전부라 많이 알지는 못하지만, 이맥스 내부에서 구글 크롬을 실행시킬 수 있다는 점이 마음에 들었습니다. 이런 것이 있다는 것을 알고 있으면 혹시 도움이 되는 사람이 있을지도 모르겠네요.<br><br><hr><br>덧붙임: EXWM 사용자 설명서에서 제시한 EXWM 기동 방법은 ${HOME}/.xinitrc 파일과 ${HOME}/.emacs 파일을 사용하는 것이었습니다. EXWM을 시험하는 도중에 이런 방식을 사용하는 것이 마음에 들지 않았습니다.<br><br>펀투 리눅스에서 XSESSION 관련 설정은 /etc/env.d/90xsession 파일에 적습니다. 예를 들어 <code>XSESSION="exwm"</code> 라고 적어두면, /etc/X11/Sessions/exwm 파일을 실행하게됩니다. 이 파일을 다음과 같이 만들었습니다.<br><br><code># Write exwmrc.el file if not exist</code><br><code>[ -e ${HOME}/.emacs.d ] || mkdir ${HOME}/.emacs.d</code><br><code>[ -e ${HOME}/.emacs.d/exwmrc.el ] || cat > ${HOME}/.emacs.d/exwmrc.el <<EOF</code><br><code>(if (file-exists-p (expand-file-name ".emacs" "$HOME"))</code><br><code> (load-file (expand-file-name ".emacs" "$HOME"))</code><br><code> (if (or (file-exists-p (expand-file-name ".emacs.el" "$HOME"))</code><br><code> (file-exists-p (expand-file-name ".emacs.elc" "$HOME")))</code><br><code> (load (expand-file-name ".emacs" "$HOME"))</code><br><code> (if (or (file-exists-p (expand-file-name "init.el" user-emacs-directory))</code><br><code> (file-exists-p (expand-file-name "init.elc" user-emacs-directory)))</code><br><code> (load (expand-file-name "init" user-emacs-directory)))))</code><br><br><code>(setq display-time-default-load-average nil)</code><br><code>(display-time-mode t)</code><br><code>(server-start)</code><br><br><code>(require 'exwm)</code><br><code>(require 'exwm-config)</code><br><code>(exwm-config-default)</code><br><code>EOF</code><br><br><code># Start Emacs</code><br><code>exec dbus-launch --exit-with-session emacs -q -l ${HOME}/.emacs.d/exwmrc</code><br><br>/etc/X11/Sessions/exwm 은 ${HOME}/.emacs.d/exwmrc.el 파일을 만들고 (이맥스가 창 관리자 역할을 할 때는) 이맥스의 초기화 파일 대신 이 파일로 기동하도록 합니다. 이렇게 이맥스가 기동한 후 원래의 초기화 파일을 적재 할 필요가 있습니다. ${HOME}/.emacs.d/exwmrc.el 코드의 앞부분이 하는 일이 그것이고요. 저는 ${HOME}/.emacs.d/init.el 파일을 초기화 파일로 사용합니다. 이 파일에는 EXWM의 디렉터리만 라이브러리 경로에 추가해주었습니다. 이렇게요.<br><br><code>(add-to-list 'load-path (locate-user-emacs-file "elpa/xelb-0.16"))</code><br><code>(add-to-list 'load-path (locate-user-emacs-file "elpa/exwm-0.21"))</code><br><br>이런 방식의 장점은 이맥스가 창 관리자 역할을 하지 않을때는 EXWM을 기동하지 않는 것 입니다.
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.