i3
i3 は wmii にインスパイアされて開発された動的タイル型ウィンドウマネージャで、主に開発者や上級ユーザーをターゲットにしています。
i3 が公表している目標は、わかりやすいドキュメント、適切なマルチモニタサポート、ウィンドウのツリー構造、vim のような様々なモードなどです。
目次
- 1 インストール
- 2 使用方法
- 3 設定
- 4 Tips and tricks
- 4.1 高度なウィンドウナビゲーション
- 4.2 Jump to open window
- 4.3 Jump to urgent window
- 4.4 ウィンドウレイアウトの保存と復元
- 4.5 スクラッチパッドコンテナ
- 4.6 スクリーンセーバーと電源管理
- 4.7 シャットダウン, 再起動, 画面ロック
- 4.8 External displays manual management
- 4.9 タブまたはスタックによるウェブブラウジング
- 4.10 ワークスペース変数
- 4.11 フロートするダイアログを正しく扱う
- 4.12 Network Download/Upload speed on statusbar
- 5 パッチ
- 6 トラブルシューティング
- 7 参照
インストール
公式リポジトリから i3 パッケージグループをインストールしてください。このグループにはウィンドウマネージャの i3-wm と、標準出力によってステータスラインに書き込みを行う i3status、そして画面ロッカーの i3lock が含まれています。
追加のパッケージは Arch User Repository から利用可能です。例は パッチ セクションを見てください。
ディスプレイマネージャ
i3-wm はウィンドウマネージャを起動する Xsession として i3.desktop
を含んでいます。
i3-with-shmlog.desktop
はログを有効にします (デバッグに役立ちます)。
i3-gnomeAUR は i3
を GNOME に統合します。
xinitrc
xinitrc を編集して、次の行を追加してください:
exec i3
i3 からの出力を記録したいときは、代わりに次の行を追加してください:
exec i3 -V >> ~/.config/i3/i3log-$(date +'%F-%k-%M-%S') 2>&1
キーのマッピングに問題が起こるときは (例: セミコロンの ;
)、xorg-xev を使うか、または特別なキーボードキーを見て下さい。
$ xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
使用方法
詳しい情報は 公式のドキュメント、すなわち i3 User’s Guide を見て下さい。
キーバインド
i3 では修飾キー ($mod
と表記されます) を使ってコマンドを呼び出します。デフォルトでは Alt
(Mod1) ですが、Super
(Mod4) も良く使われます。大抵のキーボードでは Super は Windows アイコンが印されたキーになります。Apple キーボードなら Command キーです。
デフォルトのキーバインドについては i3 リファレンスカード や Using i3 を見て下さい。新しくショートカットを追加する方法は Keyboard bindings に載っています。
Qwerty 以外のキーボード配列を使っている場合は設定ウィザードとキーボードレイアウトに書かれているように設定ウィザードを迂回すると良いでしょう。
コンテナ
i3 はコンテナを基本単位としたツリー構造でウィンドウを管理します。この構造は縦や横に分岐していきます。デフォルトではコンテナはタイル状に並べられますが、タブでまとめたり積み重ねるレイアウトに設定したり、フロートさせることもできます (ダイアログウィンドウのように)。フローティングウィンドウは常に一番上に表示されます。
詳しくは i3 Tree や Containers and the tree data structure を見て下さい。
アプリケーションランチャー
i3 はアプリケーションランチャーとして dmenu を使っており、デフォルトでは $mod+d
で呼び出せます。dmenu の代わりに、透過機能や xft フォントのサポートなどが搭載されている AUR の dmenu2AUR を使うこともできます。
i3-wm には dmenu の Perl ラッパーである i3-dmenu-desktop が含まれており、デスクトップエントリを利用してインストールされている全てのアプリケーションのリストを作成します。また、j4-dmenu-desktop-gitAUR パッケージを使うこともできます。こちらは i3-dmenu-desktop とほぼ同様に使える上に、高速に動作します [1]。
設定
詳しくは Configuring i3 を参照。この記事では i3 の設定ファイルは ~/.config
に置くことにします (i3-config-wizard では ~/.i3/config
に作成されます)。
設定ウィザードとキーボードレイアウト
i3 を最初に起動したとき、設定ウィザードの i3-config-wizard が実行されます。このツールは /etc/i3/config.keycodes
にあるテンプレート設定ファイルを書き換えることで ~/.i3/config
を作成します。デフォルトテンプレートには以下の2つの変更が加えられます:
- ウィザードはデフォルトの修飾キーを何にするかユーザーに尋ねます。
set $mod Mod1
のような行がテンプレートに追加されます。 - ユーザーの現在のキーボードレイアウトにあわせて bindcode 行をすべて bindsym 行で置き換えます。
後者が実行されることで、4つのナビゲーションショートカット j
, k
, l
と Qwerty キーボードの"セミコロン"が正しいキーシムにマッピングされます。例えば Dvorak キーボードなら h
, t
, n
, s
になります。ただし副作用として他のキーシムのマッピングが変更されるため Dvorak ユーザーはむしろ混乱してしまうかもしれません。"再起動"は $mod1+r
ではなく $mod1+p
に、"横に分割"は $mod1+h
ではなく $mod1+d
にバインドされます。チュートリアルに記載されているバインドと同じ、覚えやすいキーバインドを使いたい場合は /etc/i3/config
を ~/.config/i3/config
(または ~/.i3/config
) にコピーしてください。
キーボードレイアウトを頻繁に変更するユーザーなどに対応するために、キーコードによる設定も可能です。
カラースキーム
設定ファイルを使ってウィンドウ装飾の色をカスタマイズすることができますが、構文のためにテーマを作成したり共有するのは現実的ではありません。ユーザーが様々なテーマを作るのを楽にさせるプロジェクトが複数存在します。
- i3-style — JSON オブジェクトで保存されたテーマによって所定の設定を変更します。テーマは何度もカラースキームを調整・修正できるように作られています。
- j4-make-config — あなたの設定をテーマのコレクションや個人用の設定パーツ (たとえばホスト用の設定) と組み合わせます。テーマの簡単な変更や、柔軟でダイナミックな設定のカスタマイズを可能にします。
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
~/.config/i3/config
の bar{ }
セクションをコメントアウトすることで i3bar は無効にできます。
もしくは以下を使ってください:
~/.config/i3/config
# bar toggle, hide or show bindsym $mod+m bar mode toggle
この方法では好きなようにバーを表示したり隠したりできます。
i3status
デフォルトの設定ファイルをホームディレクトリにコピーしてください:
$ cp /etc/i3status.conf ~/.config/i3status/config
デフォルトの設定では定義されていないプラグインがあり、いくつかの設定あなたのシステムでは無効かもしれません。
そのためシステムに応じて設定を更新する必要があります。詳しくは man 1 i3status
を見て下さい。
i3status の代替
- i3blocks — シェルスクリプトで拡張することができます。クリックイベントや割り込み、ブロックごとによるリフレッシュ間隔の定義などを管理可能。
- i3phtatus — PHP で書かれた i3status の代替。簡単に拡張できます。
- https://github.com/mwgg/i3phtatus || パッケージが存在しないか AUR で検索
- goi3bar — Go で書かれた i3status の代替。コンポーネントを自由にアップデートすることができます。
- https://github.com/denbeigh2000/goi3bar || パッケージが存在しないか AUR で検索
- i3pystatus — デフォルトで多数のプラグインと設定オプションがある拡張可能な Python 3 ステータスバー。
- https://github.com/enkore/i3pystatus i3pystatus || i3pystatus-gitAUR
- i3situation — もうひとつの Python 3 ステータスバージェネレータ。
- j4status — C で書かれており、プラグインで設定ができる、ステータスラインを提供します。追加プラグインは j4status-plugins-gitAUR に入っています。
i3status のラッパー
- h2status — i3status の Bash ラッパー、カスタム json エントリを入力として、非同期のステータスバーの更新だけでなくクリックイベントの処理が可能。
- i3cat — go ベースのラッパーで外部の複数のソースからの入力を繋げることができます。クリックイベントの処理、ユーザーが定義した信号を子プロセスに転送することが可能。
- py3status — Python による拡張可能な i3status ラッパー。
ステータスバーにアイコンフォント
i3bar には XBM アイコンサポートのパッチをあてることができますが、代わりにアイコンフォントを使うこともできます。
- ttf-font-awesome — CSS でカスタマイズできるスケーラブルなベクターアイコン。それぞれの記号の Unicode を記した チートシート があります。
- ttf-font-icons — Awesome と Ionicons の重複をなくしてサイズを合わせたミックス。DejaVu Sans と Awesome が重複しないようにします。
フォントを混ぜ合わせるには、設定ファイルにフォントのフォールバックを定義してください、以下のように ,
でフォントを区切ります:
~/.config/i3/config
bar { ... font pango:DejaVu Sans Mono, Icons 8 ... }
pango syntax に従って、カンマで区切ったフォントファミリーのリストを記述してそれから一番後ろにサイズをひとつだけ指定してください。 各フォントにサイズを設定するのは最後のフォントを除いて無視される原因となります。
最後に、アイコングラフをフォーマット文字列にして ~/.config/i3status/config
に入力します。入力するために、上でリンクしているチートシートを見てユニコード番号を使います。入力方法はテキストエディタによって異なります。例えば "ハート" アイコン (ユニコード番号 f004) を入力するには:
- 様々な GUI のテキストエディタ (例: gedit や Leafpad) とターミナル (例: GNOME Terminal, xfce4-terminal):
ctrl+shift+u
,f004
,Enter
- Emacs:
ctrl+x
,8
,Enter
,f004
,Enter
- Vim (挿入モード):
Ctrl+v
,uf004
- urxvt:
Ctrl+Shift
を押して、f004
を入力
ターミナルエミュレータ
デフォルトでは $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 ユーティリティ。
- i3-wm-scripts — 正規表現にマッチする名前を持ったウィンドウを検索してジャンプ。
- winmenupy — クライアントのリストと一緒に dmenu を起動、ワークスペースの後にソートされます。クライアントを選択するとそのウィンドウにジャンプ。
- rofi — スクラッチパッドウィンドウを検索してジャンプして開く。
Jump to urgent window
.i3/config
に次を追加: [2]
bindsym $mod+x [urgent=latest] focus
ウィンドウレイアウトの保存と復元
バージョン 4.8 から、i3 ワークスペースレイアウトの保存・復元が可能になっています。これを行うには、次のパッケージが必要です: 公式リポジトリから perl-anyevent-i3 と perl-json-xs。
Save the current window layout of a single workspace
To save the current window layout, follow these steps:
- First, execute various commands to open windows in a preferred workspace and resize them if needed. Make sure to write down each executed command for each window.
- Now, in a new workspace, open a terminal and run the following:
i3-save-tree --workspace N > ~/.i3/workspace_N.json
where N is the number of the preferred workspace. This will save the current layout of workspace N to the file~/.i3/workspace_N.json
. - The newly created file needs to be edited, however this may be done with the following commands:
tail -n +2 ~/.i3/workspace_N.json | fgrep -v '// splitv' | sed 's|//||g' > ~/.i3/workspace_N.json
Restore the window layout of the workspace
There are two ways to restore the layout of the workspace: by writing a script, or by editing ~/.i3/config
to automatically load the layout. In this section only the first case will be considered, refer to the official documentation for the second case.
To restore the saved layout in the previous section, write a file named load_layout.sh
with the following contents:
- The starting lines:
~/load_layout.sh
#!/bin/bash i3-msg "workspace M; append_layout ~/.i3/workspace_N.json"
where M is the number of the workspace in which you would like to load the previously saved layout and N is the number of workspace saved in the previous section.
- And the commands used in the previous section to get the preferred windows, but enclosed in parentheses and with an ampersand appended before the last parentheses.
For example, if the saved layout contained three uxterm
windows:
~/load_layout.sh
#!/bin/bash # First we append the saved layout of worspace N to workspace M i3-msg "workspace M; append_layout ~/.i3/workspace_N.json" # And finally we fill the containers with the programs they had (uxterm &) (uxterm &) (uxterm &)
Then set the file as executable:
chmod u+x ~/load_layout.sh
And finally, the layout of worskpace N can be loaded onto to workspace M by running:
~/load_layout.sh
スクラッチパッドコンテナ
デフォルトでは、スクラッチパッド は一つのウィンドウしか含んでいません。しかしながら、コンテナをスクラッチパッドにすることが可能です。
新しいコンテナを作成して (例えば、Mod+Enter
)、コンテナを分割し (Mod+v
) 別のコンテナを作成します。親にフォーカスして (Mod+a
)、反対方向に分割し (Mod+h
)、もう一度作成します。
最初のコンテナにフォーカスして (必要なら親にもフォーカス)、ウィンドウをフロートさせ (Mod+Shift+Space
)、スクラッチパッドに移動します (Mod+Shift+-
)。これで自由にコンテナを分割できます。
マルチスクラッチパッドについては [3] も参照してください。
スクリーンセーバーと電源管理
With 電源管理#xss-lock you can register a screenlocker for your i3 session.
Alternatively, xautolock can lock the screen after awakening from sleep or hibernation with the -lockaftersleep
option. The -time
option locks the screen after a given time period.
xautolock -time 10 -locker "i3lock -i 'background_image.png'" -lockaftersleep &
See also DPMS.
シャットダウン, 再起動, 画面ロック
シャットダウン、再起動、画面ロックのキーコンビネーションを ~/.config/i3/config
に追加することができます。以下の例では電源管理コマンドを実行する権限がないユーザーに権限を与えるために polkit をインストールする必要があります。
set $Locker i3lock && sleep 1 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 $Locker, mode "default" bindsym e exec --no-startup-id i3-msg exit, mode "default" bindsym s exec --no-startup-id $Locker && systemctl suspend, mode "default" bindsym h exec --no-startup-id $Locker && systemctl hibernate, mode "default" bindsym r exec --no-startup-id systemctl reboot, mode "default" bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default" # back to normal: Enter or Escape bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+Pause mode "$mode_system"
Once completed, you will be presented with a prompt whenever you press $mod+pause
. For more complex behaviour, use a separate script, and refer to it in the mode. [4]
他の画面ロッカーについては、アプリケーション一覧/セキュリティ#スクリーンロックを参照。
External displays manual management
Thanks to xrandr there are many ways to easily manage systems displays. The below example integrates it in the i3 config file, and behave as the Power Management section above.
Here a laptop with both VGA and HDMI outputs will use a menu selection to switch them On/Off:
## Manual management of external displays # Set the shortcuts and what they do set $mode_display Ext Screen (v) VGA ON, (h) HDMI ON, (x) VGA OFF, (y) HDMI OFF mode "$mode_display" { bindsym v exec --no-startup-id xrandr --output VGA1 --auto --right-of LVDS1, mode "default" bindsym h exec --no-startup-id xrandr --output HDMI1 --auto --right-of LVDS1, mode "default" bindsym x exec --no-startup-id xrandr --output VGA1 --auto --off, mode "default" bindsym y exec --no-startup-id xrandr --output HDMI1 --auto --off, mode "default" # back to normal: Enter or Escape bindsym Return mode "default" bindsym Escape mode "default" } # Declare here the shortcut to bring the display selection menu bindsym $mod+x mode "$mode_display"
Any window that is still open in a switched Off display will automatically come back to the remaining active display.
The simplest way to determine names of your devices is to plug the device you wish to use and run:
$ xrandr --query
which will output the available, recognized devices and their in-system names to set your config file appropriately.
Refer to the xrandr page or man page for the complete list of available options, the i3 userguide and/or the i3 FAQ on reddit for more info.
タブまたはスタックによるウェブブラウジング
タブの管理はブラウザの仕事ではなく、ウィンドウマネージャの仕事だとして、故意にタブを実装していないウェブブラウザというのが存在します。
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 ではワークスペースを複数定義するので、ワークスペース変数を指定すると便利です。例えば [7]:
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 を見て下さい。
フロートするダイアログを正しく扱う
デフォルトではダイアログはフロートモードで開かれることになっていますが [8]、ダイアログはタイルモードで開いてしまうこともあります。この挙動を変更するには 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
Network Download/Upload speed on statusbar
You might adapt this upstream script. For that,
- rename both network cards according to your system (use
ip addr
) - find them on
/sys/devices
then replace them appropriately:
$ find /sys/devices -name network_interface
Now, just save the script in a suitable place (for example ~/.config/i3
) and point your status program to it.
パッチ
上流にマージされてないパッチがあてられたパッケージが AUR には存在します:
- i3bar-icons-git — i3bar で XBM アイコンを表示
- i3-smart-border — スマートボーダー
- i3-wm-iconpatch — タイトルバーアイコンのサポート
トラブルシューティング
一般
多くの場合、バグは開発版である i3-gitAUR と i3status-gitAUR で修正されているため上流では開発版を使ってエラーが再現できるかどうか訊いてきます。 [9] デバッグ - トレースを取得#一般も見てください。
i3 メッセージバーのボタンが動作しない
i3-nagbar
の "Edit config" などのボタンは i3-sensible-terminal
を呼び出します。ターミナルエミュレータが i3 によって認識されていることを確認してください。
タイル化されたターミナルで行の折り返しがおかしい
i3 v4.3 以上ではタイル配置したウィンドウのサイズ増加ヒントは無視されます [10]。これによってターミナルで行が早いところで折り返されてしまうなどの問題が生じます。解決方法としては、問題のウィンドウをフロートさせてから、もう一度タイル化してください。
マウスカーソルが待機状態のままになる
起動通知をサポートしていないスクリプやアプリケーションを起動すると、マウスカーソルは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$
[11] を参照。
ティアリング
i3 は ダブルバッファをちゃんと実装していない ためにティアリングやちらつきが発生することがあります。問題を修正したいときは、コンポジットマネージャを使ってみて下さい。
トレイアイコンが表示されない
デフォルトの tray_output primary
ディレクティブでは xrandr でプライマリ出力を設定する必要があります。明示的に出力を指定するか、ディレクティブを削除してください [12]。詳しくは Xrandr を参照。i3 のバージョン 4.12 から、i3-config-wizard によって作成されるデフォルト設定ではディレクティブが追加されないようになりました。
参照
- 公式ウェブサイト
- funtoo Wiki
- i3 ソースコード
- i3-extras - Collection of scripts and patches
- i3ipc-glib - i3 拡張のためのライブラリ
- i3ipc-ruby - An improved library for i3 extensions in Ruby
- 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
スクリーンキャスト