i3wm과의 만남: 생산성을 위한 선택

i3wm 기본 레이아웃

i3 윈도우 매니저(i3wm)는 효율성과 생산성에 초점을 맞춘 타일링 윈도우 매니저다. 2009년 독일의 개발자 Michael Stapelberg가 기존 wmii 윈도우 매니저의 한계를 보완하기 위해 개발했으며, 이름은 “improved tiling wm"에서 따왔다. C 언어로 작성된 i3는 약 10,000줄 규모의 비교적 작은 코드베이스로 이루어져 있으며, 마우스보다 키보드 중심의 워크플로우를 선호하는 개발자, 시스템 관리자, 파워 유저 사이에서 널리 쓰인다. Arch Linux, Gentoo, NixOS 사용자층에서도 자주 언급되는 편이다.

i3는 전통적인 X Window System(X11) 환경에서 동작하며 디스플레이 매니저와 독립적으로 실행되기 때문에 LightDM, GDM, SDDM 같은 로그인 매니저와 함께 사용할 수 있다. 최근에는 Wayland를 지원하는 호환 구현인 Sway(i3-compatible Wayland compositor)도 널리 쓰이며, i3의 설정과 키 바인딩을 상당 부분 그대로 활용할 수 있다. i3는 “do one thing and do it well"이라는 Unix 철학에 가깝게 불필요한 시각 효과를 줄이고 화면 공간을 작업 콘텐츠에 집중하도록 설계되었다. 여기에 다중 모니터 지원, 효율적인 창 관리, 텍스트 기반 설정 파일을 통한 사용자 정의 기능을 제공한다.

i3wm은 공식 문서가 잘 정리되어 있어 타일링 윈도우 매니저를 처음 접하는 사용자도 단계적으로 기능을 익히고 환경을 구성하기 좋다. 공식 문서는 i3wm.org/docs에서 확인할 수 있으며, User’s Guide, Configuration Reference, IPC Protocol 같은 주제를 다룬다. 커뮤니티 포럼과 Reddit의 r/i3wm 서브레딧에서도 관련 정보를 찾아볼 수 있다.

타일링 시스템의 철학과 구조

i3wm 타일링 레이아웃 예시

i3wm의 가장 기본적이면서도 핵심적인 특징은 ‘타일링(Tiling)’ 창 배치 방식이며, 이는 전통적인 스태킹(Stacking) 윈도우 매니저인 GNOME, KDE Plasma, Windows, macOS의 방식과 근본적으로 다른 접근법이다. 스태킹 윈도우 매니저에서는 창들이 서로 겹쳐질 수 있고 사용자가 수동으로 창의 위치와 크기를 조정해야 하며, 이는 마우스 사용을 필수적으로 요구하고 화면 공간의 상당 부분이 활용되지 않거나 가려지는 비효율을 초래한다. 반면 i3는 화면을 논리적으로 분할하여 창들을 자동으로 정렬하므로 모든 창이 겹치지 않고 화면 공간을 최대한 활용하며, 사용자는 창의 위치를 고민할 필요 없이 작업 내용에만 집중할 수 있다.

i3의 주요 타일링 특성:

  • 자동 레이아웃(Automatic Layout): 새 창이 열리면 i3가 자동으로 기존 공간을 분할하여 새 창을 배치하므로, 수동으로 창 크기를 조절하거나 위치를 이동할 필요가 없고 모든 창이 항상 화면에 완전히 표시된다.

  • 방향성 분할(Directional Split): 수평(Horizontal) 분할 또는 수직(Vertical) 분할을 지정하여 다음 창이 현재 창의 어느 방향에 배치될지 제어할 수 있으며, 이를 조합하여 복잡한 레이아웃도 쉽게 구성할 수 있다.

  • 비율 조절(Ratio Adjustment): 분할된 창들 사이의 경계선을 키보드 또는 마우스로 조절하여 각 창이 차지하는 공간의 비율을 자유롭게 변경할 수 있으며, 10px 단위 또는 10% 단위로 정밀하게 조정할 수 있다.

  • 레이아웃 전환(Layout Switching): 타일링 모드 외에도 스태킹(Stacking) 모드와 탭(Tabbed) 모드를 지원하며, 키 하나로 즉시 전환할 수 있어 상황에 따라 최적의 레이아웃을 선택할 수 있고, 컨테이너별로 다른 레이아웃을 적용할 수도 있다.

i3의 타일링 알고리즘은 이진 트리(Binary Tree) 구조를 기반으로 한다. 사용자가 새 창을 열 때마다 현재 포커스된 창이 차지하던 공간이 트리 노드로서 둘로 분할(Split)되고, 하나는 기존 창이, 다른 하나는 새 창이 차지하게 된다. 분할 방향(수평 또는 수직)은 사용자가 명시적으로 지정하거나 i3의 기본 동작 모드에 따라 결정된다. 이런 트리 구조 덕분에 i3는 복잡한 레이아웃도 일관되게 관리할 수 있으며, 창의 부모-자식 관계가 분명해 창을 이동하거나 제거할 때도 예측 가능한 동작을 보인다.

i3wm 설치하기

i3wm은 대부분의 주요 리눅스 배포판의 공식 저장소에 포함되어 있어 패키지 관리자를 통해 쉽게 설치할 수 있으며, 배포판별로 i3, i3-wm, i3-gaps(창 사이 간격 지원 포크 버전) 등 다양한 패키지 이름으로 제공된다.

Debian/Ubuntu 계열: sudo apt install i3 명령으로 i3-wm, i3status, i3lock 등 기본 컴포넌트가 함께 설치되며, 추가로 dmenu 또는 rofi(애플리케이션 런처), feh 또는 nitrogen(배경화면 설정), compton 또는 picom(컴포지터) 등을 함께 설치하는 것이 좋다.

Fedora: sudo dnf install i3 명령으로 설치하며, Fedora는 기본적으로 i3-with-shmlog 버전을 제공하고 IPC 소켓을 통한 디버깅을 지원한다.

Arch Linux: sudo pacman -S i3-wm 또는 sudo pacman -S i3-gaps 명령으로 설치하며, Arch 사용자들은 AUR(Arch User Repository)을 통해 다양한 i3 관련 패키지와 테마를 활용할 수 있고, i3-gnome 패키지를 사용하면 GNOME과 i3를 함께 사용할 수도 있다.

설치가 끝나면 로그아웃한 뒤 로그인 화면에서 i3 세션을 선택해 시작하면 된다. 첫 실행 시에는 설정 마법사가 나타나 설정 파일(~/.config/i3/config)을 만들지와 mod 키를 무엇으로 할지 묻는다. mod 키는 i3의 모든 단축키에서 사용하는 핵심 수정자 키로, 보통 Alt(Mod1) 또는 윈도우 키/Super 키(Mod4) 중 하나를 선택한다. Alt 키는 다른 애플리케이션 단축키와 겹칠 수 있어 나는 윈도우 키(Mod4)를 더 자주 사용한다.

i3wm 첫 실행 화면

기본 키 조합

i3wm은 키보드 중심의 환경을 제공하기 때문에, 기본 키 조합을 익히는 것이 중요하다.

i3wm 키보드 단축키 참조-1 i3wm 키보드 단축키 참조-2

기본 제어

  • $mod + Enter: 기본 터미널 실행
  • $mod + d: 어플리케이션 실행 메뉴 열기
  • $mod + Shift + q: 현재 창 닫기
  • $mod + Shift + r: i3 설정 다시 불러오기
  • $mod + Shift + e: i3 종료 메뉴
  • $mod + Shift + c: i3 설정 파일 다시 불러오기

창 관리

  • $mod + j/k/l/;: 좌/하/상/우 방향으로 창 이동 (기본값)
  • $mod + Shift + j/k/l/;: 현재 창을 좌/하/상/우 방향으로 이동
  • $mod + f: 현재 창 전체화면 토글
  • $mod + h: 다음 창 수평 분할
  • $mod + v: 다음 창 수직 분할
  • $mod + r: 크기 조절 모드
  • $mod + space: 타일링/플로팅 모드 전환

i3wm은 vim 편집기와 달리 기본적으로 jkl;를 방향키로 사용한다. 이는 키보드 홈 로우(Home Row)에서 오른손의 자연스러운 위치를 고려한 설계지만, vim에 익숙한 사용자에게는 다소 낯설 수 있다. 필요하면 설정 파일(~/.config/i3/config)에서 hjkl 스타일로 바꿀 수 있다. 나 역시 vim과 tmux, 여러 CLI 도구에서 hjkl에 익숙해져 있어 i3에서도 같은 배열을 사용하고 있다.

워크스페이스 관리

  • $mod + 숫자(1-0): 해당 번호의 워크스페이스로 이동
  • $mod + Shift + 숫자(1-0): 현재 창을 해당 워크스페이스로 이동

i3wm 설정 파일 구성하기

i3wm의 설정은 텍스트 기반 설정 파일(~/.config/i3/config)을 통해 이루어진다.

설정 파일 내용

  1. 기본 변수 설정(mod 키, 폰트 등)
  2. 자동 실행 프로그램 설정
  3. 다크 모드 및 전원 관리 설정
  4. 미디어 키 바인딩
  5. 기본 창 조작 키 바인딩
  6. 워크스페이스 설정
  7. 창 스타일 및 색상 설정
  8. 바(i3bar) 설정

설정 예시

# 기본 변수 설정
set $mod Mod1
font pango:JetBrains Mono 10

# 기본 프로그램
bindsym $mod+Return exec alacritty
bindsym $mod+d exec --no-startup-id rofi -show drun

# 창 이동 기본값 (jkl;)
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right

# 창 분할 방식
bindsym $mod+h split h
bindsym $mod+v split v

워크스페이스 효율적으로 활용하기

i3wm의 워크스페이스 시스템은 작업 관리에 매우 효율적이다. 기본적으로 10개의 워크스페이스가 제공된다.

워크스페이스 설정

# 워크스페이스 정의 (간결한 숫자 이름)
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"

# 워크스페이스 전환
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2

# 윈도우 워크스페이스 이동
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2

나의 설정에서는 "1", "2", "3"처럼 숫자만 있는 간결한 워크스페이스 이름을 사용한다. 빠르게 전환할 수 있고 인지적 부담이 적다고 느끼기 때문이다. 일부 사용자는 "1:web", "2:code", "3:term"처럼 설명을 붙여 각 워크스페이스의 용도를 드러내기도 한다. 하지만 나는 워크스페이스를 고정된 용도보다 유동적으로 쓰는 편이라 숫자만 두는 방식이 더 잘 맞았다. 필요하면 설정 파일에서 언제든 이름을 바꿀 수 있다는 점도 장점이다.

i3bar와 i3status 커스터마이징

i3wm은 화면 하단이나 상단에 상태 표시줄을 둘 수 있다. 이 표시줄은 i3bar와 i3status로 구성되며, i3bar는 표시를 담당하고 i3status는 시스템 정보를 수집해 형식에 맞춰 출력한다. i3status는 CPU 사용률, 메모리 사용량, 디스크 공간, 네트워크 상태, 배터리 잔량, 시간 등을 모니터링하며, 설정 파일(~/.config/i3status/config)에서 표시 항목과 형식을 조정할 수 있다. 더 많은 기능이 필요하다면 i3status 대신 i3blocks, polybar, bumblebee-status 같은 대체 상태 표시줄 프로그램을 사용할 수도 있다.

i3bar 설정

bar {
    position bottom
    status_command i3status
    tray_output primary
    font pango:JetBrains Mono 10

    mode hide  # 평소에는 숨김
    hidden_state hide
    modifier $mod

    colors {
        background #1c1c1c
        statusline #c0c5ce
        focused_workspace  #2b303b #2b303b #c0c5ce
        inactive_workspace #1c1c1c #1c1c1c #888888
    }
}

이 설정에서는 바를 평소에 숨겨 두었다가 $mod 키를 누를 때만 표시하고, 색상도 다크 테마에 맞춰 구성했다.

생산성 향상을 위한 팁

리사이즈 모드

창 크기를 정밀하게 조절하는 리사이즈 모드:

mode "resize" {
    # 크기 조절 바인딩
    bindsym j resize shrink width 10 px or 10 ppt
    bindsym k resize grow height 10 px or 10 ppt
    bindsym l resize shrink height 10 px or 10 ppt
    bindsym semicolon resize grow width 10 px or 10 ppt

    # 모드 빠져나가기
    bindsym Return mode "default"
    bindsym Escape mode "default"
}

키 바인딩 커스터마이징

기본 jkl; 배열을 VI 편집기 스타일의 hjkl 키로 변경:

# VI 스타일 hjkl 변경
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

# 창 분할키 변경 (h가 이미 사용됨)
bindsym $mod+b split h  # 수평 분할

유용한 단축키 설정

# 스크린샷
bindsym Print exec --no-startup-id scrot '%Y-%m-%d_%H-%M-%S.png' -e 'mv $f ~/Pictures/'

# 시스템 제어
bindsym $mod+Shift+x exec xtrlock  # 화면 잠금
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m '종료하시겠습니까?'"

더 자세한 설정 예시와 내가 실제 사용 중인 설정은 GitHub 레포지토리(github.com/in-jun/i3wm-setup)에서 확인할 수 있다.

결론

i3wm은 GNOME, KDE Plasma, Xfce 같은 전통적인 데스크톱 환경과는 다른 방식으로 동작하는 미니멀한 윈도우 매니저다. 초반에는 학습 곡선이 있지만, 익숙해지면 마우스 사용을 줄이고 키보드만으로 빠르게 작업할 수 있다. 키보드 중심 인터페이스, 자동 타일링을 통한 창 관리, 텍스트 기반 설정 파일이 주는 사용자화 가능성, 그리고 경량성은 개발자와 시스템 관리자, 파워 유저에게 특히 잘 맞는다. 멀티태스킹이 많은 개발 워크플로우에서도 장점이 분명하다.

학습 곡선이 다소 가파르게 느껴질 수 있지만 참고할 자료는 충분하다. 공식 문서(i3wm.org/docs)는 단계적으로 학습하기 좋고, Reddit의 r/i3wm 커뮤니티와 Arch Wiki의 i3 페이지에서도 다양한 예제와 팁을 얻을 수 있다. 무엇보다 직접 사용하면서 설정을 조금씩 개선해나가는 과정 자체가 재미있고 보람 있는 경험이 된다.