i3 (日本語) - ArchWiki

# i3 (日本語)

関連記事

- デスクトップ環境
- ディスプレイマネージャ
- ファイルマネージャの機能
- ウィンドウマネージャ
- タイル型ウィンドウマネージャの比較
- クリップボード
- 自動起動#グラフィカル

i3 は wmii にインスパイアされて開発された動的タイル型ウィンドウマネージャで、主に開発者や上級ユーザーをターゲットにしています。

i3 が公表している目標は、わかりやすいドキュメント、適切なマルチモニタサポート、ウィンドウのツリー構造、vim のような様々なモードなどです。

## インストール

公式リポジトリから i3 パッケージグループをインストールしてください。このグループにはウィンドウマネージャの i3-wm と、標準出力によってステータスラインに書き込みを行う i3status、そして画面ロッカーの i3lock が含まれています。

開発版の i3-git など、他のパッケージは Arch User Repository からインストールできます。多くの場合、バグは開発版で修正されているため上流では開発版を使ってエラーが再現できるかどうか訊いてきます [1]。

### ディスプレイマネージャ

i3-gnome は GNOME と i3 をウィンドウマネージャとする X-session を追加します。ウィンドウマネージャだけを起動する Xsession は i3 に含まれています。ディスプレイマネージャを参照してください。

### xinitrc

xinitrc を編集して、次の行を追加してください:

    exec i3

i3 からの出力を記録したいときは (デバッグに役立ちます)、代わりに次の行を追加してください:

    exec i3 -V >> ~/.config/i3/i3log-$(date +'%F-%k-%M-%S') 2>&1

バージョン 302.17 以前の Nvidia バイナリドライバーを使う場合は `--force-xinerama` フラグが必要です。詳しい説明は i3wm.org にあります。

    exec i3 --force-xinerama

キーのマッピングに問題が起こるときは (例: セミコロンの `;`)、xorg-xev を使うか、または Extra keyboard keys を見て下さい。

    $ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'

## 使用方法

詳しい情報は 公式のドキュメント、すなわち i3 User’s Guide を見て下さい。

### アプリケーションランチャー

i3 はアプリケーションランチャーとして dmenu を使っており、デフォルトでは `$mod+d` で呼び出せます。

i3-wm には dmenu の Perl ラッパーである i3-dmenu-desktop が含まれており、デスクトップエントリを利用してインストールされている全てのアプリケーションのリストを作成します。また、j4-dmenu-desktop-git パッケージを使うこともできます。こちらは i3-dmenu-desktop とほぼ同様に使える上に、高速に動作します [2].

### キーバインド

i3 では修飾キー (`$mod` と表記されます) を使ってコマンドを呼び出します。デフォルトでは `Alt` (Mod1) ですが、`Super` (Mod4) も良く使われます。

デフォルトのキーバインドについては i3 リファレンスカード や Using i3 を見て下さい。

### コンテナ

i3 はコンテナを基本単位としたツリー構造でウィンドウを管理します。この構造は縦や横に分岐していきます。デフォルトではコンテナはタイル状に並べられますが、タブでまとめたり積み重ねるレイアウトに設定したり、フロートさせることもできます (ダイアログウィンドウのように)。フローティングウィンドウは常に一番上に表示されます。

詳しくは i3 Tree や Containers and the tree data structure を見て下さい。

## 設定

詳しくは Configuring i3 を参照。

### カラースキーム

設定ファイルを使ってウィンドウ装飾の色をカスタマイズすることができますが、構文のためにテーマを作成したり共有するのは現実的ではありません。ユーザーが様々なテーマを作るのを楽にさせるプロジェクトが複数存在します。

- i3-style — JSON オブジェクトで保存されたテーマによって所定の設定を変更します。テーマは何度もカラースキームを調整・修正できるように作られています。

  https://github.com/acrisci/i3-style || nodejs-i3-style

- j4-make-config — あなたの設定をテーマのコレクションや個人用の設定パーツ (たとえばホスト用の設定) と組み合わせます。テーマの簡単な変更や、柔軟でダイナミックな設定のカスタマイズを可能にします。

  https://github.com/okraits/j4-make-config || j4-make-config-git

### i3bar

i3bar はワークスペースの情報を表示するほかに、次のセクションで説明している、i3status などに入力を行うこともできます。例:

    ~/.config/i3/config

    bar {
        output            LVDS1
        status_command    i3status
        position          top
        mode              hide
        workspace_buttons yes
        tray_output       none

        font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1

        colors {
            background #000000
            statusline #ffffff

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

詳しくは Configuring i3bar を見て下さい。

#### i3bar の代替

旧来のデスクトップ環境に入っているようなパネルを使いたいというユーザーもいるかもしれません。起動時に i3 の中でパネルアプリケーションを起動することで他のパネルを使うことができます。

XFCE パネルの場合、次の行を `~/.config/i3/config` のどこかに追加してください:

    exec --no-startup-id xfce4-panel --disable-wm-check

もしくは `startx` を使っている場合、xinitrc に追加します:

    ~/.xinitrc

    xfce4-panel --disable-wm-check &

Note: デスクトップ環境固有のパネル機能は基本的に動作しません (例: ワークスペースやセッションを管理するウィジェット)、ただし i3 の機能がそれによって影響を受けることはないはずです。

`~/.config/i3/config` の `bar{ }` セクションをコメントアウトすることで i3bar は無効にできます。

### i3status

デフォルトの設定ファイルをホームディレクトリにコピーしてください:

    $ cp /etc/i3status.conf ~/.config/i3status/config

デフォルトの設定では定義されていないプラグインもあります、詳しくは `man 1 i3status` を見て下さい。

Note: サンプルの設定ファイルではインターフェイスの名前として `eth0` や `wlan0` を使っています、あなたの環境ではこれらを使っていない場合はネットワーク設定#デバイス名を見て下さい。バッテリーのパスなど、他にも食い違っているところがあったときは `man i3status` を見て下さい。

#### i3status の代替

- conky — 拡張性の高いシステムモニター。i3bar で使用する場合は このチュートリアル を見て下さい。

  http://conky.sourceforge.net/ || conky

- i3blocks — シェルスクリプトで拡張することができます。クリックイベントや割り込み、ブロックごとによるリフレッシュ間隔の定義などを管理可能。

  https://github.com/vivien/i3blocks || i3blocks

- i3pystatus — デフォルトで多数のプラグインと設定オプションがある拡張可能な Python 3 ステータスバー。

  https://github.com/enkore/i3pystatus i3pystatus || i3pystatus-git

- i3situation — もうひとつの Python 3 ステータスバージェネレータ。

  https://github.com/HarveyHunt/i3situation || i3situation-git

- j4status — C で書かれており、プラグインで設定ができる、ステータスラインを提供します。

  http://j4status.j4tools.org/ || j4status-git

#### i3status のラッパー

- h2status — i3status の Bash ラッパー、カスタム json エントリを入力として、非同期のステータスバーの更新だけでなくクリックイベントの処理が可能。

  https://wiki.archlinux.org/index.php/H2status || h2status

- i3cat — go ベースのラッパーで外部の複数のソースからの入力を繋げることができます。クリックイベントの処理、ユーザーが定義した信号を子プロセスに転送することが可能。

  http://vincent-petithory.github.io/i3cat/ || i3cat-git

- py3status — Python による拡張可能な i3status ラッパー。

  https://github.com/ultrabug/py3status || py3status

#### ステータスバーにアイコンフォント

i3bar には XBM アイコンサポートのパッチをあてることができますが、代わりにアイコンフォントを使うこともできます。

- ttf-font-awesome — CSS でカスタマイズできるスケーラブルなベクターアイコン。それぞれの記号の Unicode を記した チートシート があります。

  http://fortawesome.github.io/Font-Awesome/ || ttf-font-awesome

- ttf-font-icons — Awesome と Ionicons の重複をなくしてサイズを合わせたミックス。DejaVu Sans と Awesome が重複しないようにします。

  https://www.dropbox.com/s/9iysh2i0gadi4ic/icons.pdf || ttf-font-icons.

フォントを混ぜ合わせるには、設定ファイルにフォントのフォールバックを定義してください、以下のように `,` でフォントを区切ります:

    ~/.config/i3/config

    bar {
      ...
      font pango:DejaVu Sans Mono, Icons 8
      ...
    }

カンマで区切ったフォントファミリーのリストを記述してそれから一番後ろにサイズをひとつだけ指定してください。（たとえ同じサイズだとしても）フォントファミリーごとにサイズを設定したり複数のフォントディレクティブを使って同じようなことをしようとはしないで下さい。i3bar の様々なコンポーネントの縦位置や高さが想定外に崩れることになるからです。正しい pango の記述子の構文は上で示した通りです。

最後に、アイコングラフをフォーマット文字列にして `~/.config/i3status/config` に入力します。入力するために、上でリンクしているチートシートを見てユニコード番号を使います。例えば、vim を使っている場合、挿入モードで `Ctrl+v` の後にグリフの十六進数のユニコード番号を入れます。

urxvt では、`Ctrl+Shift` を押して、適当な Unicode ポイントを記入します。

### ターミナルエミュレータ

デフォルトでは `$mod+Return` を押すとターミナルを呼び出すスクリプトの `i3-sensible-terminal` が起動します。ターミナルを呼び出す順番については `man i3-sensible-terminal` を見て下さい。

他のターミナルを起動するには、`~/.config/i3/config` の次の行を変更してください:

    bindsym $mod+Return exec i3-sensible-terminal

または、`$TERMINAL` 変数をローカルで定義してください:

    $ export TERMINAL=yourterminal

## Tips and tricks

### 高度なウィンドウナビゲーション

i3 window Navigation Tips を見て下さい。

### Jump to open window

- quickswitch-i3 — i3 でウィンドウを素早く切り替え・確認するための Python ユーティリティ。

  https://github.com/proxypoke/quickswitch-for-i3 || quickswitch-i3

- i3-wm-scripts — 正規表現にマッチする名前を持ったウィンドウを検索してジャンプ。

  https://github.com/yiuin/i3-wm-scripts ||

- winmenupy — クライアントのリストと一緒に dmenu を起動、ワークスペースの後にソートされます。クライアントを選択するとそのウィンドウにジャンプ。

  https://github.com/ziberna/i3-py/blob/master/examples/winmenu.py ||

- rofi — スクラッチパッドウィンドウを検索してジャンプして開く。

  https://davedavenport.github.io/rofi/ || rofi

### Jump to urgent window

`.i3/config` に次を追加: [3]

    bindsym $mod+x [urgent=latest] focus

### 現在のセッションを保存する

バージョン 4.8 から、i3 はワークスペースレイアウトの保存・復元が可能になっています。詳しくは layout saving in i3 を見て下さい。

完全なセッションを保存・再起動するには、AUR から i3session-git をインストールしてください。

### スクラッチパッドコンテナ

デフォルトでは、スクラッチパッド は一つのウィンドウしか含んでいません。しかしながら、コンテナをスクラッチパッドにすることが可能です。

新しいコンテナを作成して (例えば、`Mod+Enter`)、コンテナを分割し (`Mod+v`) 別のコンテナを作成します。親にフォーカスして (`Mod+a`)、反対方向に分割し (`Mod+h`)、もう一度作成します。

最初のコンテナにフォーカスして (必要なら親にもフォーカス)、ウィンドウをフロートさせ (`Mod+Shift+Space`)、スクラッチパッドに移動します (`Mod+Shift+-`)。これで自由にコンテナを分割できます。

Note: フロートしているウィンドウでコンテナのサイズを個別に変更することはできません。ウィンドウをフロートさせる前にコンテナのサイズを変えて下さい。
Tip: ターミナルアプリケーションしか使わない場合は、代わりに tmux などのマルチプレクサを使っても良いでしょう。

マルチスクラッチパッドについては [4] も参照してください。

### スクリーンセーバーと電源管理

DPMS を使って画面を消したりモニタをサスペンド・電源オフにすることができます。次の行を `~/.config/i3/config` に追加すると10分後にモニターがサスペンド状態になります:

    exec --no-startup-id xset dpms 600

xss-lock-git を使うことで i3 セッションの画面ロッカーを登録することが可能です。xss-lock は systemd のイベント `suspend`, `hibernate`, `lock-session`, `unlock-session` に適当なアクションを設定します (ロッカーを起動してユーザーがロックを解除するかロッカーをキルするのを待つ)。また、X screensaver に反応して x-server の信号に応じてロッカーを起動・終了します。以下のように xss-lock を起動するようにしてください:

    xss-lock -- i3lock -i background_image &

もしくは、xautolock を使って指定時間後に画面をロックするように設定することもできます:

    xautolock -time 10 -locker i3lock &

#シャットダウン, 再起動, 画面ロック も参照。

### シャットダウン, 再起動, 画面ロック

シャットダウン、再起動、画面ロックのボタンは存在しないため、ホットキーのコンビネーションを追加することでそれらの操作を実現できます。まず以下のスクリプトを作成して `i3exit` として保存してください。`chmod +x` で忘れずに実行可能属性を付けて `$PATH` が通っているところに配置します。このスクリプトでは電源管理コマンドを実行する権限がないユーザーに権限を与えるために polkit をインストールする必要があります。

    #!/bin/sh
    lock() {
        i3lock
    }

    case "$1" in
        lock)
            lock
            ;;
        logout)
            i3-msg exit
            ;;
        suspend)
            lock && systemctl suspend
            ;;
        hibernate)
            lock && systemctl hibernate
            ;;
        reboot)
            systemctl reboot
            ;;
        shutdown)
            systemctl poweroff
            ;;
        *)
            echo "Usage: $0 {lock|logout|suspend|hibernate|reboot|shutdown}"
            exit 2
    esac

    exit 0

Note:

- xss-lock-git を使う場合、`xset s activate` を呼び出してロッカーを起動します。
- xautolock を使う場合、コマンドは `xautolock -locknow` です。

そして以下の行を `~/.config/i3/config` に追加してください。追加したら `$mod+pause` を押すことでプロンプトが表示されます。

    set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown
    mode "$mode_system" {
        bindsym l exec --no-startup-id i3exit lock, mode "default"
        bindsym e exec --no-startup-id i3exit logout, mode "default"
        bindsym s exec --no-startup-id i3exit suspend, mode "default"
        bindsym h exec --no-startup-id i3exit hibernate, mode "default"
        bindsym r exec --no-startup-id i3exit reboot, mode "default"
        bindsym Shift+s exec --no-startup-id i3exit shutdown, mode "default"

        # back to normal: Enter or Escape
        bindsym Return mode "default"
        bindsym Escape mode "default"
    }
    bindsym $mod+Pause mode "$mode_system"

他の画面ロッカーについては、アプリケーション一覧/セキュリティ#スクリーンロックを参照。

### タブまたはスタックによるウェブブラウジング

Warning: Tabbed browsing is unstable when used with assigned workspaces. [5]

タブの管理はブラウザの仕事ではなく、ウィンドウマネージャの仕事だとして、故意にタブを実装していないウェブブラウザというのが存在します。

uzbl など、タブのないウェブブラウザを i3 で管理するには、次の行を `~/.config/i3/config` に追加して下さい:

    for_window [class="Uzbl-core"] focus child, layout stacking, focus

これはスタックのウェブブラウジング用で、ウィンドウは縦に表示されます。タブブラウジングと違って、たとえブラウザのウィンドウを大量に開いていても、ウィンドウのタイトルを全て見ることができます。

水平方向のタブブラウジングの方が良い場合は ('タブ')、次を使って下さい:

    for_window [class="Uzbl-core"] focus child, layout tabbed, focus

### ワークスペース変数

i3 ではワークスペースを複数定義するので、ワークスペース変数を指定すると便利です。例えば [6]:

    set $WS1 term
    set $WS2 web
    set $WS3 misc
    set $WS4 media
    set $WS5 code

次にワークスペースの名前を対応する変数で置き換えます:

    bindsym $mod+1          workspace $WS1
    ...
    bindsym $mod+Shift+1    move container to workspace $WS1

詳しくは Changing named workspaces を見て下さい。

### フロートするダイアログを正しく扱う

デフォルトではダイアログはフロートモードで開かれることになっていますが [7]、ダイアログはタイルモードで開いてしまうこともあります。この挙動を変更するには xorg-xprop でダイアログの `WM_WINDOW_ROLE` をチェックして適切なルールを `~/.i3/config` に追加してください:

    for_window [window_role="pop-up"] floating enable
    for_window [window_role="task_dialog"] floating enable

また、タイトルルールと正規表現を使うこともできます:

    for_window [title="Preferences$"] floating enable

または `WM_CLASS`:

    for_window [class="(?i)mplayer"] floating enable

## パッチ

上流にマージされてないパッチがあてられたパッケージが AUR には存在します:

- i3bar-icons-git — i3bar で XBM アイコンを表示

  https://github.com/ashinkarov/i3-extras || i3bar-icons-git

- i3-mouse-close — 中クリックによるクローズのサポート

  https://faq.i3wm.org/question/550/manipulating-windows-with-the-mouse || i3-mouse-close

- i3-smart-border — スマートボーダー

  https://github.com/ashinkarov/i3-extras || i3-smart-border

- i3-wm-iconpatch — タイトルバーアイコンのサポート

  https://github.com/ashinkarov/i3-extras || i3-wm-iconpatch

## トラブルシューティング

### i3 メッセージバーのボタンが動作しない

`i3-msg` の "Edit config" などのボタンは `i3-sensible-terminal` を呼び出します。ターミナルエミュレータが i3 によって認識されていることを確認してください。

### タイル化されたターミナルで行の折り返しがおかしい

i3 v4.3 以上ではタイル配置したウィンドウのサイズ増加ヒントは無視されます [8]。これによってターミナルで行が早いところで折り返されてしまうなどの問題が生じます。解決方法としては、問題のウィンドウをフロートさせてから、もう一度タイル化してください。

### マウスカーソルが待機状態のままになる

起動通知をサポートしていないスクリプやアプリケーションを起動すると、マウスカーソルは60秒間の間、ビジー/砂時計状態になります。

特定のアプリケーションでこの問題を解決するには、`--no-startup-id` パラメータを使って下さい、例えば:

    exec --no-startup-id ~/script
    bindsym $mod+d exec --no-startup-id dmenu_run

このアニメーションを全てのアプリケーションで無効にするには、カーソルテーマを見て下さい。

### キーバインドが反応しない

標準のキーバインド (キーを押して実行) を使っている場合、scrot などのツールが動作しないことがあります。そのようなときは、`--release` でキーをリリースしてからコマンドを実行してください:

    bindsym --release Print exec --no-startup-id scrot '%Y-%m-%d$
    bindsym --release Shift+Print exec --no-startup-id scrot '%Y$

[9] を参照。

### ティアリング

i3 は ダブルバッファをちゃんと実装していない ためにティアリングやちらつきが発生することがあります。問題を修正したいときは、コンポジットマネージャを使ってみて下さい。

## 参照

- 公式ウェブサイト
- funtoo Wiki
- i3 ソースコード
- i3-extras - Collection of scripts and patches
- i3ipc-glib - A library for i3 extensions
- j4tools - non-official tools designed to work with i3

Arch Linux フォーラム

- The i3 thread - A general discussion about i3
- i3 desktop screenshots and config sharing

スクリーンキャスト

- i3 window manager v4.1 screencast

Categories:

- Tiling WMs (日本語)
- Dynamic WMs (日本語)