2023/02/25

i3wmクイックスタートアップガイド

本エントリはタイル型ウインドウマネージャのi3wmを可及的速やかに動作させるためのテキストである。以下の条件に当てはまるユーザを想定読者層とする。

・Linuxの基本的な操作方法を理解している。
i3-wmパッケージの導入が完了している。
・Arch Linuxかそれに類するディストリビューションを使用している。

Arch Linuxの導入についてはこの記事を、i3wm設定後のトラブルシューティングについてはこの記事をそれぞれ参考にされたし。なお、本エントリではSwayとWaylandに関する説明は行わない。

初期設定

通常、i3wmを導入した状態で初回起動を行うとウェルカムメッセージと共にmodキーの設定を促される。modキーを決めると~/.config/i3/configファイルが生成され、原則的にはこれを基に設定ファイルを構築する形となる。しかし、本エントリではこの手順は踏まず、i3wm移行前にあらかじめ設定ファイルを作っておく。 すなわち、~/.config/i3フォルダとconfigファイル(ドットや拡張子は付かない)を手動で作成する。

というのも、ろくに整備されていない環境に放り込まれた状態では情報収集や編集作業に翳りが生じる恐れが否めないからだ。実際、本当になにも設定していないとブラウザの起動さえおぼつかない。したがって、繰り返すが前もって設定ファイルを構築することを強く勧めたい。

アプリケーションの起動と終了

さっそくconfigファイルに設定を列挙していく。まず記すべきは前述したmodキーである。modキーとはi3wmにおいてショートカットの始動を司るキーで、$mod+eのような形式でキーバインドを定義する際に用いる。デフォルトではMod1(Altキー)が採用されているが、Altキーは他のアプリケーションと衝突しやすいので、Mod4(Windowsキー、Commandキー)の方が好ましい。

set $mod Mod4

続いてアプリケーションやコマンドの起動ショートカットを決める。おそらくもっとも書く機会が多い構文だと思われる。一例としてターミナルアプリケーションの例を挙げる。

bindsym $mod+Return exec --no-startup-id alacritty

このショートカットの構文はbindsymから始まり、次に任意のキーバインド、アプリケーションやコマンドの起動ではexec --no-startup-idが加わり、末尾でアプリケーションを指定する。さしあたりターミナル、ブラウザ、ファイラを設定して残りは移行後でも構わない。指定に必要なクラス名はxprop | grep WM_CLASSで求められる。実行後、アプリケーションにマウスカーソルを重ねるとターミナル上にクラス名が表示される。

反対に、アプリケーションを終了するショートカットは以下の通りに定める。これでひとまずアプリケーションの起動と終了が行えるようになった。

bindsym $mod+q kill

自動起動

システムの起動時にアプリケーションを自動で起動させたい場合は、キーバインドなしでexecオプションを書いて直に指定する。コマンドやスクリプトを実行させることもできる。たとえばfehは本来は画像ビューアだが、ここでは壁紙を表示させる役割を与えている。

exec --no-startup-id vivaldi-stable
exec --no-startup-id "feh --no-fehbg --bg-scale ~/Wallpaper.png"
exec --no-startup-id "xset r rate 200 30"
exec --no-startup-id fcitx5

ショートカットの拡張

ショートカットを設定していくと次第に候補となるキーバインドが足りなくなってくる。そこで、ショートカットを二段構えにして実質的にキーバインドを増やす手法が役に立つ。

bindsym $mod+c mode "CMD"
mode "CMD"{
    bindsym v exec vivaldi-stable; mode "default"
    bindsym f exec "flameshot gui" mode "default"
    bindsym Return mode "default"
    bindsym Escape mode "default"
    bindsym $mod+c mode "default"
}

上記の例では$mod+cで一旦"CMD"モードに入り(この名称は自由に決められる)そこから追加のキーを押してアプリケーションが起動する構成になっている。$mod+cだけでは一つのショートカットしか設定できないが、このように工夫すると$mod+cの配下に複数のショートカットを定義できる。

注意点はショートカットをモード化した際に、そのモードを解除する挙動を定義しておかないといつまでもモード化が維持されてしまうところだ。そうすると他のショートカットを受けつけなくなるため、上記の例にしたがってアプリケーションの起動直後か、任意のキーバインドで通常モードに戻る設定mode "default"を書き加えておかなければならない。

ウインドウの操作

i3wmはタイル型ウインドウマネージャであるからにして、ウインドウの操作もショートカットで完結させることが前提となる。手始めにウインドウフォーカスの設定例を記す。本項ではVimライクなキーバインドと矢印キーを使うものの二通りを紹介する。

# ウインドウフォーカス
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right

# 代替ウインドウフォーカス
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right

次にウインドウの交換ショートカットを設定する。並んでいるウインドウの位置を入れ替えたい時に用いる。

# ウインドウ交換
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+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right

続いて、ウインドウの分割ショートカットを設定する。ウインドウはもっぱら垂直に展開されるが、下記に倣って$mod+sを発動してからアプリケーションを起動すると水平に展開されるようになる。垂直での起動に戻すには$mod+vを押す。すでに展開済みのウインドウを水平または垂直に変更したい場合はlayoutオプションでtoggle splitを定義する。

# 水平ウインドウ分割
bindsym $mod+s split v

# 垂直ウインドウ分割
bindsym $mod+v split h

# ウインドウの分割切り替え
bindsym $mod+e layout toggle split

フルスクリーン表示も可能。toggleオプションを用いると同一のキーバインドで有効と無効を切り替えられる。

bindsym $mod+f fullscreen toggle

タイル型ウインドウマネージャはその名の通り、あたかもタイルのごとくウインドウを敷き詰める使い方が基本ではあるものの、一般のデスクトップ環境と同じくフローティングさせることもできる。ただし、前述のウインドウフォーカスはフロートウインドウに対しては効かないため、専用の設定を定義しておかなければならない。

# ウインドウフロート
bindsym $mod+w floating toggle

# フロートウインドウフォーカス
bindsym $mod+space focus mode_toggle

同様に、フロートウインドウを動かすキーバインドも個別に設定する。i3wmの仕様上、たとえフロートウインドウであってもマウスのドラッグ単体で動いてくれるとは限らない。

floating_modifier $mod

フロートウインドウの応用例として、特定のアプリケーションを必ずフロート起動させる設定が挙げられる。とりわけファイラや動画プレイヤーはフローティングのモチベが高い。resizeオプションを定義しないと最大表示で展開してしまうので、こだわりがなくとも適当なウインドウサイズを指定した方がよい。

for_window [class="Thunar"] floating enable, resize set 1024 780

最後にウインドウのリサイズを行うショートカットを記す。僕はモード化して仕立てている。

bindsym $mod+r mode "RESIZE"
mode "RESIZE" {
        bindsym h resize shrink width 10 px or 5 ppt
        bindsym j resize grow height 10 px or 5 ppt
        bindsym k resize shrink height 10 px or 5 ppt
        bindsym l resize grow width 10 px or 5 ppt

        # 代替
        bindsym Left resize shrink width 10 px or 5 ppt
        bindsym Down resize grow height 10 px or 5 ppt
        bindsym Up resize shrink height 10 px or 5 ppt
        bindsym Right resize grow width 10 px or 5 ppt

        # 通常モード遷移
        bindsym Return mode "default"
        bindsym Escape mode "default"
        bindsym $mod+r mode "default"
}

ワークスペースの設定

デスクトップ環境では「仮想デスクトップ」と呼称される機能をi3wmでは「ワークスペース」と呼ぶ。ウインドウを一面に敷き詰める文化は極めて効率に優れる一方で、なにかとすぐに余白が不足する。かつては無縁だったユーザもi3wmではワークスペースの助けなくしては生きられないだろう。

まずはワークスペースの変数を定義する。僕は1から始める数字派だが0から始める人もいる。数字ではなく記号派の人もけっこう多い。

set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"

次にワークスペース間を移動するショートカットを設定する。数字と対応させるのが無難オブ無難だが、ワークスペースが増えるほどmodキーから離れた位置にならざるをえない欠点もある。

bindsym $mod+1 workspace $ws1
bindsym $mod+2 workspace $ws2
bindsym $mod+3 workspace $ws3
bindsym $mod+4 workspace $ws4
bindsym $mod+5 workspace $ws5
bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10

使用頻度は人によるが、ウインドウを別のワークスペースに移動させるショートカットも設定しておく。一連のキーバインドには数字キーをすべて割り振っているが、もし他に使うあてがあれば適宜削っても差し支えはない。僕も本当に使用しているワークスペースの数はせいぜい5個くらいしかない。

bindsym $mod+Shift+1 move container to workspace $ws1
bindsym $mod+Shift+2 move container to workspace $ws2
bindsym $mod+Shift+3 move container to workspace $ws3
bindsym $mod+Shift+4 move container to workspace $ws4
bindsym $mod+Shift+5 move container to workspace $ws5
bindsym $mod+Shift+6 move container to workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10

特定のアプリケーションを指定したワークスペースでのみ起動させる設定も存在する。ワークスペース単位で用途を決めている人には欠かせない。前述の自動起動と併せて列挙すれば「システム起動時にSlackをワークスペース3に展開」といった挙動も実現できる。

assign [class="discord"] workspace 3
assign [class="Slack"] workspace 3

システムの再起動と終了

その気になればシステムの再起動などもショートカットで行える。下記の設定では$mod+Shift+eを押して、そこからさらに追加のキーを加えないと発動しない仕組みだが、これにはあえて迂遠なキーバインドを採用することで誤爆を避ける意図がある。

bindsym $mod+Shift+e mode "SHUTDOWN SEQUENCE"
mode "SHUTDOWN SEQUENCE"{
    bindsym p exec "systemctl poweroff"
    bindsym r exec "systemctl reboot"
    bindsym Return mode "default"
    bindsym Escape mode "default"
    bindsym $mod+Shift+e mode "default"
}

対して、設定しておくと便利なのがi3wmの設定再読込みと再起動だ。特に構築中はこのショートカットがあると非常に捗る。

# 設定再読込み
bindsym $mod+Shift+c reload

# 再起動
bindsym $mod+Shift+r restart

カラー定義

i3wmは外観の色合いも定義できる。当然ながら下記の設定例も僕のものだが、モロ被りすると照れくさいので一度試したら別のにしてほしい。

# i3wm全体の色
set $bg           #1C1E27
set $fg           #CACACC
set $darkred      #D95882
set $red          #E4436F
set $darkgreen    #68DDC4
set $green        #24E39D
set $darkyellow   #E8AEAA
set $yellow       #EDA685
set $darkblue     #64A4BF
set $blue         #2095B4
set $darkmagenta  #B382CF
set $darkcyan     #54AEB8
set $cyan         #00A5AF
set $darkwhite    #CACACC
set $white        #CACACA
set $darkgrey     #6C6F93

# フォーカスカラー
# class                     border      background      text        indicator       child_border
client.focused              $bg         $darkgrey       $fg         $yellow         $darkyellow
client.unfocused            $bg         $bg             $fg         $yellow         $bg

その他の設定

マウスカーソルの移動でウインドウがフォーカスされるとたいへん鬱陶しいので無効にする。

focus_follows_mouse no

ウインドウの枠の太さや隙間の広さも自由に決められる。どうでもいい設定と見せかけて意外に奥が深い。

# ウインドウの枠の太さ
for_window [class="^.*"] border pixel 2

# ウインドウ間の隙間の広さ
gaps top 6
gaps bottom 6
gaps right 6
gaps left 6
gaps inner 6

Rofiの導入

すべてのアプリケーションをショートカットで呼ぶのは逆に非効率なのでランチャを併用する。Rofiはタイル型ウインドウマネージャの界隈ではデファクトスタンダード的なランチャとされている。rofiパッケージを導入した後、i3wmの設定ファイルに起動ショートカットを書き加える。

bindsym $mod+z exec --no-startup-id "rofi -show drun"
bindsym $mod+x exec --no-startup-id "rofi -show run"

drunはアプリケーションの起動に適したモードで、runはLinuxコマンド全体に対応している。この二つと全モードが融合合体したcombiモードも備わっている。細かい調整を好まないのであればUlauncherを使う手もある。

Dunstの導入

Dunstはi3wmにおいて通知を取り仕切る軽量なデーモンとして機能する。KDEやGnomeと異なり自前の通知システムを持たないタイル型ウインドウマネージャでは必要不可欠と言える。dunstパッケージを導入した後、自動起動を設定する。

exec --no-startup-id dunst

より平易な選択肢としてxfce4-notifydも挙げられる。i3wmの環境に慣れるまではこちらを使っても問題はない。

Picomの導入

Picomは様々なグラフィック描写をi3wm環境下で適切に処理してくれる。ウインドウの透過や影の投影に用いられるとの説明が一般的だが、実は動画再生にも影響するため導入は必須である。picomパッケージを導入した後、例によって自動起動を設定する。

exec --no-startup-id "picom -b"

動画再生やアニメーションに不審なちらつきが認められる場合は~/.config/picom.confbackend = "xrender";backend = "glx";に書き換えると解消される。

bumblebee-statusの導入

最後にステータスバーを導入する。タイル型ウインドウマネージャの文化ではここに通知領域やワークスペースボタン、現在時刻、ネットワーク情報などを設けることが模範とされる。ステータスバーにはi3blocksや新進気鋭のi3status-rustをはじめとする多種多様なパッケージが存在するが、本エントリでは僕が愛用しているbumblebee-statusを例にとる。

# ステータスバーの色
set $background #2B303B
set $foreground #C0C5CE
set $lightred #BF616A
set $lightgreen #A3BE8C
set $lightyellow #EBCB8B
set $lightblue #8FA1B3
set $lightmagenta #B48EAD
set $lightcyan #96B5B4
set $lightwhite #C0C5CE
set $pink #FFB6C1
set $orange #F08080

# ステータスバー関連
bar {
    font pango:UDEV Gothic 35 11
    mode dock
    position top
    workspace_buttons yes
    strip_workspace_numbers yes
    binding_mode_indicator yes
    tray_padding 2
    colors {
        background $background
        focused_background $background
        statusline $lightred
        focused_statusline $lightred
        # 左からborder, bg, fg
        focused_workspace  $orange $orange $background
        active_workspace $background $background $foreground
        inactive_workspace $background $background $foreground
        urgent_workspace   $green $green $background
        binding_mode       $green $green $background
    }
    status_command /usr/bin/bumblebee-status -m playerctl pasink pasource datetime battery \
    -p playerctl.hide="true" playerctl.format="{{artist}} - {{title}}" playerctl.layout="playerctl.song" datetime.format="%m/%d %H:%M" -t monotone
}

ステータスバーの外観はタイル型ウインドウマネージャの顔と言っても過言ではない。もし読者諸君らがi3wmのunixpornに惹かれて導入を決意したのであれば、いよいよついにセンスの見せどころかもしれない。bumblebee-statusの詳細設定は公式ドキュメントがとても参考になる。

なお、設定末尾のテーマmonotoneは僕の自作ゆえ、このページを読んで他の種類に変更されたし。そのままコピペするとエラーを吐く。

おわりに

以上でクイックスタートアップガイドは終了となる。以降は実際にi3wmを試して構築を楽しんでもらいたい。本エントリの趣旨上、個別の設定項目についてはArchWikiに後を譲る。なにはともあれ、これで諸君らもあらゆる操作をキーボードで完結させたがる異常者集団の仲間入りだ。

©2011 Rikuoh Tsujitani | Fediverse | RSS | 小説