i3

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

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

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

インストール

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

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

ディスプレイマネージャ

i3-gnomeAURGNOMEi3 をウィンドウマネージャとする 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 には dmenuPerl ラッパーである i3-dmenu-desktop が含まれており、デスクトップエントリを利用してインストールされている全てのアプリケーションのリストを作成します。また、j4-dmenu-desktop-gitAUR パッケージを使うこともできます。こちらは i3-dmenu-desktop とほぼ同様に使える上に、高速に動作します [2].

キーバインド

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

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

コンテナ

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

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

設定

詳しくは Configuring i3 を参照。

カラースキーム

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

  • i3-style — JSON オブジェクトで保存されたテーマによって所定の設定を変更します。テーマは何度もカラースキームを調整・修正できるように作られています。
https://github.com/acrisci/i3-style || nodejs-i3-styleAUR
  • j4-make-config — あなたの設定をテーマのコレクションや個人用の設定パーツ (たとえばホスト用の設定) と組み合わせます。テーマの簡単な変更や、柔軟でダイナミックな設定のカスタマイズを可能にします。
https://github.com/okraits/j4-make-config || j4-make-config-gitAUR

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

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

i3status

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

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

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

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

i3status の代替

http://conky.sourceforge.net/ || conky
  • i3blocks — シェルスクリプトで拡張することができます。クリックイベントや割り込み、ブロックごとによるリフレッシュ間隔の定義などを管理可能。
https://github.com/vivien/i3blocks || i3blocksAUR
  • i3pystatus — デフォルトで多数のプラグインと設定オプションがある拡張可能な Python 3 ステータスバー。
https://github.com/enkore/i3pystatus i3pystatus || i3pystatus-gitAUR
  • i3situation — もうひとつの Python 3 ステータスバージェネレータ。
https://github.com/HarveyHunt/i3situation || i3situation-gitAUR
  • j4status — C で書かれており、プラグインで設定ができる、ステータスラインを提供します。
http://j4status.j4tools.org/ || j4status-gitAUR

i3status のラッパー

  • h2status — i3status の Bash ラッパー、カスタム json エントリを入力として、非同期のステータスバーの更新だけでなくクリックイベントの処理が可能。
https://wiki.archlinux.org/index.php/H2status || h2statusAUR
  • i3catgo ベースのラッパーで外部の複数のソースからの入力を繋げることができます。クリックイベントの処理、ユーザーが定義した信号を子プロセスに転送することが可能。
http://vincent-petithory.github.io/i3cat/ || i3cat-gitAUR
  • py3status — Python による拡張可能な i3status ラッパー。
https://github.com/ultrabug/py3status || py3statusAUR

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

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

  • ttf-font-awesome — CSS でカスタマイズできるスケーラブルなベクターアイコン。それぞれの記号の Unicode を記した チートシート があります。
http://fortawesome.github.io/Font-Awesome/ || ttf-font-awesomeAUR
  • ttf-font-icons — Awesome と Ionicons の重複をなくしてサイズを合わせたミックス。DejaVu Sans と Awesome が重複しないようにします。
https://www.dropbox.com/s/9iysh2i0gadi4ic/icons.pdf || ttf-font-iconsAUR.

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

~/.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-i3AUR
  • 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/ || rofiAUR

Jump to urgent window

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

bindsym $mod+x [urgent=latest] focus

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

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

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

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

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

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

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

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

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

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

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

exec --no-startup-id xset dpms 600

xss-lock-gitAUR を使うことで 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
ノート:
  • xss-lock-gitAUR を使う場合、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"

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

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

警告: 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-gitAUR
  • i3-mouse-close — 中クリックによるクローズのサポート
https://faq.i3wm.org/question/550/manipulating-windows-with-the-mouse || i3-mouse-closeAUR
  • i3-smart-border — スマートボーダー
https://github.com/ashinkarov/i3-extras || i3-smart-borderAUR
  • i3-wm-iconpatch — タイトルバーアイコンのサポート
https://github.com/ashinkarov/i3-extras || i3-wm-iconpatchAUR

トラブルシューティング

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

参照

Arch Linux フォーラム

スクリーンキャスト