게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[emacs] EXWM 간단히 맛보기(?), 냄새 맡기(?), 암튼 소개
게시물ID : programmer_22773짧은주소 복사하기
작성자 : ★☆
추천 : 1
조회수 : 1723회
댓글수 : 0개
등록시간 : 2019/01/08 05:59:21
두근두근 울렁울렁 가슴 뛰지만 무섭고도 두려워서 겁이 나지만 새해를 맞아 사용하고 있는 리눅스용 윈도우 하위 시스템(이하 WSL)에 그래픽 사용자 인터페이스(이하 GUI)를 입혀보기로 했습니다. 알고계시겠지만, WSL은 마이크로소프트 윈도우(이하 윈도우)에서 리눅스 바이너리를 사용할 수 있도록 매개하는 개발자용 도구입니다. 리눅스 명령을 그대로 사용할 수 있다는 장점이 있지만, 아직 여러 한계가 있습니다. 그 중 하나가 바로 GUI 부분이죠.

이 한계를 피해가는 몇 가지 방법이 있습니다. 가장 쉬운 방법은 윈도우에 X 서버를 설치하고 리눅스에서 DISPLAY 환경 변수를 이 서버의 화면으로 지정하는 것입니다. 또 다른 방법은 리눅스에서 Xrdp같은 윈도우 원격 데스크톱을 지원하는 서비스를 제공하는 것입니다. 크게 어려운 일은 아닙니다. 인터넷에서 쉽게 정보를 찾아볼 수도 있고요. 어려웠던 점은 제가 펀투 리눅스라는 극히 마이너한 리눅스 배포판을 사용하고 있어서... 찾은 문서의 내용을 그대로 따라하는 수준으로는 되지 않았다는 점 정도입니다.

1.png
2.png

Xfce를 띄워봤습니다. 리눅스의 사용자 홈 디렉터리 밑에, 윈도우의 바탕화면(%USERPROFILE%\Desktop 디렉터리)을 Desktop이란 이름으로 심볼릭 링크해 두었더니 Xfce의 바탕화면이 윈도우와 연동되기도 하고요. 조금 더 욕심이 생겨 그놈을 시도해봤습니다. 문서가 없는 이유가 있었습니다. 여러 방법을 시험해보다 내가 왜 이러고 있지... 하는 의문이 생겼네요.

어짜피 내가 WSL에서 가장 많이 사용하는 것은 이맥스일 뿐이고(윈도우에도 이맥스 바이너리가 있지만 리눅스에서 사용하는 것이 더 편하니까), 다른 GUI용 프로그램은 많이 사용하지 않는데 무거운 데스크톱 환경을 굳이 설치해야하나 하는 생각이 들었습니다. 이런 생각이 들어 찾아보니 이맥스 안에서 X의 창 관리를 해주는 패키지가 있더군요.

3.png

위의 원격 데스크톱 화면과 달리 이맥스가 달랑 뜹니다(화면 갈무리를 위해 크기를 줄였지만, 모니터 전체에 이맥스가 뜰 때 기분이란...). 이게 이맥스이므로 이맥스의 키 바인딩으로 화면 분할이 됩니다. C-x 3 으로 양 쪽으로 나누고 C-x 2 로 위 아래로 나눌 수 있습니다. C-x 1 또는 C-x 0 로 합칠 수 있고요, C-x o 로 순회할 수 있습니다. 물론, 이런 단축키는 이맥스 사용자라면 익숙한 것이겠죠.

4.png

창을 나누고 구글 크롬과 EShell을 띄워봤습니다. 외부 프로그램을 실행시킬 때는 S-& 키를 누르라고 하더군요. (윈도우에서 이 키 조합은 ctrl 과 alt 사이에 있는 윈도우키를 누르고, shft 키와 7 키를 누르는 것입니다. 원격 데스크톱이 전체 화면을 사용하도록 하지 않으면 윈도우 메뉴가 먼저 떠버립니다. 전체 화면이 아니라면 키 바인딩을 바꿔야 될 것 같네요.) M-! 로 외부 프로그램을 실행시키면 안됩니다. (쉘에서 GUI 프로그램을 실행시킬 때와 같은 일이 벌어집니다. 백그라운드--&--로 실행시키지 않으면 그 프로그램이 종료할 때 까지 쉘이 잠기게 됩니다.)

5.png

EXWM 은 화면의 공간을 절약하기 위해 기본적으로 메뉴 바를 숨깁니다. M-x menu-bar-mode 명령으로 메뉴 바를 드러내면 구글 크롬이 이맥스 안에서 실행된 것이 더욱 확실하게 보이네요. 또 다른 재미있는 기능은 작업 공간 이동이었습니다. 첫번째 작업 공간에서 화면 구성을 이렇게 잡아두고, S-w 키를 눌러 다른 작업 공간을 선택해서 다른 화면을 구성할 수 있었습니다. (이맥스의 다른 프레임을 선택해서 윈도--창--를 나누는 것에 해당하겠죠.)

6.png

발견하고 설치해본 것이 전부라 많이 알지는 못하지만, 이맥스 내부에서 구글 크롬을 실행시킬 수 있다는 점이 마음에 들었습니다. 이런 것이 있다는 것을 알고 있으면 혹시 도움이 되는 사람이 있을지도 모르겠네요.



덧붙임: EXWM 사용자 설명서에서 제시한 EXWM 기동 방법은 ${HOME}/.xinitrc 파일과 ${HOME}/.emacs 파일을 사용하는 것이었습니다. EXWM을 시험하는 도중에 이런 방식을 사용하는 것이 마음에 들지 않았습니다.

펀투 리눅스에서 XSESSION 관련 설정은 /etc/env.d/90xsession 파일에 적습니다. 예를 들어 XSESSION="exwm" 라고 적어두면, /etc/X11/Sessions/exwm 파일을 실행하게됩니다. 이 파일을 다음과 같이 만들었습니다.

# Write exwmrc.el file if not exist
[ -e ${HOME}/.emacs.d ] || mkdir ${HOME}/.emacs.d
[ -e ${HOME}/.emacs.d/exwmrc.el ] || cat > ${HOME}/.emacs.d/exwmrc.el <<EOF
(if (file-exists-p (expand-file-name ".emacs" "$HOME"))
    (load-file (expand-file-name ".emacs" "$HOME"))
  (if (or (file-exists-p (expand-file-name ".emacs.el" "$HOME"))
          (file-exists-p (expand-file-name ".emacs.elc" "$HOME")))
      (load (expand-file-name ".emacs" "$HOME"))
    (if (or (file-exists-p (expand-file-name "init.el" user-emacs-directory))
            (file-exists-p (expand-file-name "init.elc" user-emacs-directory)))
        (load (expand-file-name "init" user-emacs-directory)))))

(setq display-time-default-load-average nil)
(display-time-mode t)
(server-start)

(require 'exwm)
(require 'exwm-config)
(exwm-config-default)
EOF

# Start Emacs
exec dbus-launch --exit-with-session emacs -q -l ${HOME}/.emacs.d/exwmrc

/etc/X11/Sessions/exwm 은 ${HOME}/.emacs.d/exwmrc.el 파일을 만들고 (이맥스가 창 관리자 역할을 할 때는) 이맥스의 초기화 파일 대신 이 파일로 기동하도록 합니다. 이렇게 이맥스가 기동한 후 원래의 초기화 파일을 적재 할 필요가 있습니다. ${HOME}/.emacs.d/exwmrc.el 코드의 앞부분이 하는 일이 그것이고요. 저는 ${HOME}/.emacs.d/init.el 파일을 초기화 파일로 사용합니다. 이 파일에는 EXWM의 디렉터리만 라이브러리 경로에 추가해주었습니다. 이렇게요.

(add-to-list 'load-path (locate-user-emacs-file "elpa/xelb-0.16"))
(add-to-list 'load-path (locate-user-emacs-file "elpa/exwm-0.21"))

이런 방식의 장점은 이맥스가 창 관리자 역할을 하지 않을때는 EXWM을 기동하지 않는 것 입니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호