suckless dwm 사용기

X-window용 단순하고 명료한 동적 윈도우 관리자 dwm

얼마 전 구입한 크롬북에 무엇을 어떻게 설치해서 써야 낮은 사양에서도 편하게 쓸 수 있나 둘러보다가 suckless에서 만든 dwm에 대해 알게 되었다. 레딧에서 자주 보였던 윈도우 관리자라서 이름 정도는 알고 있었지만 그렇게까지 미니멀한게 필요하지 않다는 생각에 찾아보지도 않았었다. 조그마한 메모리 사용까지도 영향을 받는 기기를 쓰다보니 무거운 데스크탑 환경을 벗어나야만 했다.

suckless.org는 공개된 소프트웨어도 흥미롭지만 게시된 웹페이지 내용도 재미있다.

Our project focuses on advanced and experienced computer users. (“Philosophy”)

코드 품질에 대한 이야기도 흥미롭다. 직관적으로 문제를 해결하는 코드가 코드 복잡도를 낮춘다는 이야기도 재미있다. 모든 내용이 유익하다고는 할 수 없고 공감이 안되는 부분도 있긴 하지만 소프트웨어가 어떤 맥락에서 만들어졌는지 이해하는데는 큰 도움이 된다.

As the number of lines of code in your software shrinks, the more skilled you have become and the less your software sucks. (“Philosophy”)

처음엔 왜 이런 기능도 없어보이는 도구가 필요한가 의아했는데 설치하고 한동안 사용해보니 그 매력에 완전 빠졌다. dwm을 사용하면 tmux의 확장판인 기분이 든다. 프로그램의 모든 창을 타일로 관리할 수 있기 때문이다. tmux는 터미널만 정렬하고 쓸 수 있지만 dwm은 실행할 수 있는 모든 것을 타일로 관리할 수 있다. 물론 타일 외에도 다른 레이아웃도 사용할 수 있고 태그라는 기능으로 다중 윈도우처럼 사용하는 것도 가능하다. 게다가 매우 가벼워서 존재하지 않는 것처럼 느껴질 정도다.

특별히 독특하다고 느낀 부분은 코드 패치인데 프로그램이 모든 기능을 지원하고 설정을 제공하는 것이 아니라는 점이다. 필요한 기능은 별도의 diff 파일로 제공하고 있어서 기능이 필요하지 않으면 아예 바이너리에도 포함되지 않는다. 이런 실용주의적 접근이 아마 도구 자체가 가벼운 이유인 듯 하다. 익숙하지 않다면 분명 복잡한 과정이겠지만.

대략 이런 모습

설치

설치는 직접 받아서 빌드해야 한다. 설정을 위한 파일이 따로 존재하지 않고 config.h에 정의해서 빌드해야 하기 때문이다. c로 작성된 소프트웨어라 컴파일러가 없다면 설치해야 한다.

suckless.org의 dwm 페이지에서 압축 파일로 받거나 git 리포지터리에서 복제할 수 있다.

$ git clone https://git.suckless.org/dwm

먼저 기본 config 파일을 생성해야 한다.

$ make config.h

config.h에서 변경하고 싶은 내용은 변경하면 된다. 그리고 빌드해서 설치한다.

$ make && make install

설치 후에는 로그인 화면에서 dwm을 설치할 수 있도록 /usr/share/xsessionsdwm.desktop을 추가한다.

[Desktop Entry]
Encoding=UTF-8
Name=Dwm
Comment=Dynamic window manager
Exec=dwm
Icon=dwm
Type=XSession

dwm을 효과적으로 사용하려면 동적 메뉴인 dmenu도 설치해야 한다. dwm처럼 suckless의 dmenu 페이지에서 받거나 git 리포지터리를 이용한다.

$ git clone https://git.suckless.org/dmenu/ && cd dmenu
$ make config.h
$ make && make install

이제 로그아웃해서 dwm 세션을 선택해 로그인하면 된다.

단축키

dwm을 시작해보면 아무 것도 없는 휑한 화면만 나온다. 대부분의 기능은 단축키로 사용할 수 있다. 기본 단축키를 기준으로 설명하지만 이 단축키는 모두 config.h에서 추가/수정/삭제가 가능하다.

Shift + Alt + Q      dwm 종료하기
Shift + Alt + Enter  터미널 실행하기
Alt + P              dmenu 열기
Shift + Alt + C      현재 창 닫기

Alt + j, k           창 커서 이동하기
Alt + h, l           마스터 창 크기 조절하기
Alt + d, i           창 마스터/스택으로 이동하기
Alt + Enter          마스터 창과 스택 바꾸기
Alt + 1...9          해당 숫자 태그로 이동하기
Shift + Alt + 1...9  현재 창 해당 태그로 보내기

# 레이아웃
Alt + t         타일 모드
Alt + f         플로팅 모드
Alt + m         모노클 모드

## 플로팅 모드
Alt + 우클릭    창 크기 조절하기
Alt + 좌클릭    창 위치 이동하기

타일로도 충분히 편리하게 사용하고 있어서 플로팅은 거의 사용하지 않고 있다.

우측 상단에 dwm-{버전} 표시는 status라고 하는 영역인데 이 영역 문자열은 다음 명령어로 변경할 수 있다.

$ xsetroot -name "Hello World"

이 상태 영역을 주기적으로 업데이트하는 별도의 도구를 설치하면 편리하다. dwmstatus 페이지에서 상태 모니터 도구를 찾을 수 있다. 나도 하나 간단하게 작성했는데 dwm-simple-status에서 확인할 수 있다.


suckless에서 개발한 다양한 도구를 보고 있으면 나도 이런 가벼운 도구를 만들고싶다는 생각이 자연스레 따라온다. 많은 dwm 포크와 클론을 보면 비슷한 생각을 하는 사람이 많나보다. dwm, dmenu, surf, st 모두 웹사이트에 게시한 철학을 잘 따라서 만들어진 도구라 더 매력적으로 느껴지는 것 같다.