ウィンドウマネージャ——i3


ウィンドウマネージャは大きく分けてコンポジット型・スタック型・タイル型の3つに分類できます。i3(1)はタイル型に分類されるウィンドウマネージャです。

i3(1)の便利なところは、基本的にウィンドウが重ならないように配置されるので画面を効率よく使える点と、ウィンドウのフォーカスの切り替えをキーボードだけで完結できる点です。一方でキーボード操作は覚えることが多いので、WindowsやmacOSのようなGUIの操作がしたいのであればこのページを読み飛ばし、代わりにjwmやfluxboxなどを使うといいでしょう。またpkgsrc(7)ではウィンドウマネージャはpkgsrc/wmディレクトリに集まっていますから、どれが一番好みか探すこともできます。

インストール

i3(1)本体と、ターミナルを経由せずソフトウェアを実行するためのdmenu(1)をインストールします。
# cd /usr/pkgsrc/wm/i3
# make install clean clean-depends
# cd /usr/pkgsrc/sysutils/i3status
# make install clean clean-depends
# cd /usr/pkgsrc/x11/dmenu
# make install clean clean-depends

$HOME/.xinitrc

$HOME/.xinitrcの最終行に以下を追記します。
i3

設定ファイル $HOME/.config/i3/config

$HOME/.config/i3/configの設定例は以下の通りです。
# i3 config file (v4)
#
# Please see http://i3wm.org/docs/userguide.html for a complete reference!

# キーボードのWindows(WIN)キーをi3(1)のホットキー($mod)として設定する。
set $mod Mod4

# ウィンドウタイトルに使うフォントを指定する。
# ここではpangoとRictyを指定した。
font pango:Ricty 12

# マウスとホットキーを使うことで浮かすウィンドウを任意の箇所に持っていく。
floating_modifier $mod

# 最初からタイルに設置せず浮かすソフトウェアのウィンドウを設定する。
# たとえばファイルマネージャやGIMPなど、
# タイルに置かずにコンポジット型のように振る舞ったほうが
# 扱いやすいソフトウェアもある。
# for_window [class="Vncviewer"] floating enable
for_window [class="ROX-Filer"] floating enable
for_window [class="Pcmanfm"] floating enable
for_window [class="MuPDF"] floating enable
for_window [title="ImageMagick: *"] floating enable
for_window [title="GIMP *"] floating enable

##
# Bindsym Configurations

# タイルに設置するか浮かすかを切り替える。
bindsym $mod+Shift+space floating toggle

# 浮いているウィンドウのフォーカスを切り替える。
bindsym $mod+space focus mode_toggle

# ホットキーとエンターキーでターミナルを実行する。
bindsym $mod+Return exec /usr/pkg/bin/urxvtc

# スクリーンショットを撮る。
# scrotを呼び出す。
bindsym Print exec /usr/pkg/bin/scrot

# ウィンドウを閉じる。
bindsym $mod+Shift+q kill
bindsym button2 kill

# ホットキー+dでプログラムランチャdmenuを実行する。
# ここではi3向けのdmenuを実行している
bindsym $mod+d exec --no-startup-id /usr/pkg/bin/i3-dmenu-desktop

# ホットキー+h/j/k/lでフォーカスを切り替える。
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

# ホットキー+H/J/K/Lでウィンドウの場所を動かす。
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right

# ウィンドウが作られたとき、それを横に置くか縦に置くか決める。
bindsym $mod+v split v
bindsym $mod+Shift+v split h

# ウィンドウの大きさを変えるには、ホットキー+rを入力したあと、
# h/j/k/lで大きさを調整する。調整し終えたらエンターキーを入力する。
mode "resize" {
	bindsym h resize shrink width 10 px or 10 ppt
	bindsym j resize grow height 10 px or 10 ppt
	bindsym k resize shrink height 10 px or 10 ppt
	bindsym l resize grow width 10 px or 10 ppt

	bindsym Return mode "default"
}

bindsym $mod+r mode "resize"

# ワークスペースの数を設定する。
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3

# ホットキー+Shift+1/2/3でワークスペースに移動する。
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3

# i3(1)を抜け、Xのセッションを終了する。
bindsym $mod+Shift+e exit

# i3(1)の設定ファイルを再読込する。
bindsym $mod+Shift+r restart

##
# Exec Configurations

# i3(1)起動時にバックグラウンドで動かすソフトウェアを指定している。
# dunstは通知デーモン、fehは壁紙を指定する、
# urxvtdは仮想端末ソフトウェアrxvt-unicodeのデーモン。
exec --no-startup-id dunst
exec --no-startup-id feh --bg-scale ~/.wallpaper.png
exec --no-startup-id urxvtd -q -f -o

# 画面下部に表示するステータスバーの設定。なくてもいい。
bar {
    output              LVDS1
    status_command      i3status
    position            bottom
    mode                dock
    workspace_buttons   yes
    tray_output         none
    colors {
        background #000000
        statusline #ffffff

        focused_workspace  #ffffff #285577
        active_workspace   #ffffff #333333
        inactive_workspace #888888 #222222
        urgent_workspace   #ffffff #900000
    }
}

操作方法

よく使う機能とそのキー操作は以下の通りです。"$mod"はホットキーを意味します。当然、設定ファイルの内容に操作が影響されるため上述の設定ファイルに沿ったものとなっています。

機能操作
仮想端末を起動する$mod + Enter
プログラムランチャを起動する$mod + d
i3(1)を終了し、Xセッションを終了する$mod + Shift + e
設定ファイルを再読込する$mod + shift + r
ウィンドウのフォーカスを下に移動する$mod + j
ウィンドウのフォーカスを上に移動する$mod + k
ウィンドウのフォーカスを左に移動する$mod + h
ウィンドウのフォーカスを右に移動する$mod + l
フォーカスをワークスペースNに移動する$mod + N
フォーカスされているウィンドウをワークスペースNに移動する$mod + Shift + N
フォーカスされているウィンドウを閉じる(終了させる)$mod + Shift + q
フォーカスされているウィンドウを浮かせる/タイルに落とす$mod + Shift + Space
ウィンドウのサイズを変更するための状態に移る$mod + r
ウィンドウのサイズを変更するための状態から抜ける$mod + Enter
ウィンドウのサイズを変更する$mod + h/j/k/l