i3 wm タイル型ウィンドウマネージャを使うことのメモ

CLI などキーボード操作主体で便利なウィンドウマネージャ「i3」

GNOME や Xfce 、あるいはマックOSやウィンドウズみたいな GUI をオーバーラップウィンドウ方式という。ウィンドウの形が可変で、重ねられて、マウスポインタでつまんでどうこうするというおなじみのタイプ。

一方、それらをマジョリティとした対極にタイル型ウィンドウマネージャというのがあって、こっちの方が歴史は長くて昔の低性能CPUでも描画がラクだった。

i3_wm_demo_tiling.jpg

このタイル型というのは、画面を格子で分割したその中に起動したアプリなんかを表示する。整然と並ぶものだから地味な印象だけれど、画面内のウィンドウは重なったりしないし、下に隠れるなんてこともなく、各々の主張をしっかりと受け止める。

マウスでつかんでずらしたりというのも許されないのだが、マウス操作を受け付けないというわけではなく、マウスを使うアプリではちゃんと使える。ただ、ウィンドウ操作のほとんどをキーボードでやるのが前提なのだ。

以前、私はウィンドウズなどですぐ Alt+Space x とやってウィンドウを最大化して使うものだから、だったらタイル型でも同じだろうと考えた。それで Emacs をよく使うので、似たキーバインドの StumpWM に手を出したのだった。

これはとても便利で、CLI 主体のオペレーションと見事に符合し、カスタマイズすると手足のように自在に操作できるようだった。

そういう、キーボード操作主体でのコンピューティングというのは、マウスばかりを使うことがいかに生産性をスポイルしているかということに気付かせてもくれる。得心した者の眼には世界が違って見えるのだ。

この StumpWM 、とても重宝したのだけれど、タイル型でないウィンドウマネージャにも魅力的なものは多いし、そちらで魅惑の小ツールとの組み合わせを楽しむうちにあまり利用しなくなっていた。なんだその程度かと言わないで欲しい。だってそれは私の浮気心がいけないのだ。

あるときたまさか Manjaro Linuxの コミュニティ 版をインストールしてちょっと遊んだ。これはなんだかすごくいいかもしれない、わかりやすくて素早いな、と思った同梱のウィンドウマネージャが「i3」だった。これを機に私のタイル型ブームが再燃したのだった。

私はこの i3 を Arch Linux にインストールして使ってみたのだけれど、そのときのメモをちょっとまとめた。

i3 ウィンドウマネージャとは

i3 wm は X11 で動くタイル型ウィンドウマネージャだ。 wmii というウィンドウマネージャにインスパイアされて作られたものだという。

i3 とだけきくとインテルコアのことかと思うし、検索すればちっちゃい自動車の写真がいっぱいでてくる。だからググッと調べるときには ‘i3 wm’ としなくちゃならない。 i3 はそういう、いい感じにマイナー感を醸し出しているが堂々のタイル型ウィンドウマネージャなのだ。

公式サイトには “improved tiling wm” と表現されてある。

i3 – improved tiling wm

タイル型ウィンドウマネージャには Xmonad や Awesome あるいは Ratpoison とその後継の StumpWM などといったスグレモノがあるわけだけれど、今日これらはやや古くなってきたかもしれない。その点、 i3 はまだ少し若くて開発が活発なようだ。

タイル型といえばカスタマイズだろう。 i3 もこの例にもれずカスタマイズにほぼ制限がない。

キーボード操作が主体ということは、細かなカスタマイズが容易でなければならないということでもある。なぜなら、コンピューターキーボードの大きさやキー配置が多様であるばかりでなく、メニューキーやモディファイアキーのあり方、操作法というのは人それぞれ、千差万別だからである。加えて、マウスボタンよりもはるかに多くのキーがあるわけだから、便利な工夫はやり放題とも言える。むしろこの容易なカスタマイズ性が目的でタイル型を利用する向きも多い。

i3 の設定ファイルはプレーンなテキストで、そんなに難しいものでないからプログラミング経験なども必要ないだろう。思いついたらエディタで書いて即反映できるし、シェルスクリプトなどと組み合わせるのも容易だ。

デフォルトのキーバインドは vi によく似たものだが、これも自由にカスタマイズできる。 Emacs ライクなキーバインドも可能だろう。

タイル型を使おうという人の多くは CLI が好物なんじゃなかろうか、というのは勝手な推測だけれど、 Linux ユーザはシェルコマンドに親しむ(?)事が多いはずだから、こういった仕様はよりフレンドリーな魅力をもたらしているかと思う。

i3 のインストール

すでに使っている Arch Linux へ i3 をインストールするのであれば pacman -S i3 dmenu ですむ。あとはディスプレイマネージャに任せるか、 ~/.xinitrcexec i3 などと記述して startx

あるいは、

Arch Linux をインストールしたけれど X や Window Manager (または Desktop Environment)はまだこれからという状態からは、以下の手順でインストールする。

さしあたり、 ArchWiki の インストールガイド – ArchWiki で、ネットワーク設定以外を終えているものとする。まだ再起動はしない。

※以前は ArchWiki 英語版、日本語版ともに Beginners’ Guide があったけれど、今は Installation Guide へ転送となっているのでそれに合わせてちょっと書き換えました。

永続的ネット接続の確保

ArchWiki のガイド に沿って進めてきたなら、既に有線接続か wifi-menu なんかでネットに接続していることであろう。このネットへの接続は明示的に永続化しておく必要がある。

ケース1) 有線接続の場合 dhcpcd が接続を確立しているだろう。 dhcpcd は base パッケージのインストールに含まれているから、あとはこれを永続化すればいい。すなわち以下のようにしておく。

systemctl enalbe dhcpcd

ケース2) Wi-Fi 接続あるいは Wi-Fi と有線の両方を設定したいということなら NetworkManager をインストールする(念の為 wifi-menu を動かせるよう dialog も入れる)。

pacman -S networkmanager network-manager-applet gnome-keyring wpa_supplicant dialog
systemctl enable NetworkManager

いまここで systemctl start をかますと接続中の dhcpcd や wifi-menu とかぶってしまうのでやらない。

なお dhcpcd と NetworkManager の両方を enable するのはトラブルのもとなので同時に設定などしない。ちなみに設定をもどしたいなら systemctl disable を使う。

network-manager-applet( nm-applet )はマウス操作でネットワーク接続を設定できるようにするが、当の Window Manager がないと使えやしないので、このまま再起動せずに次項の X と i3 のインストールまでやってしまう。

X と i3 をインストール

ここでインストールするものは Xウィンドウシステムとビデオドライバ(xf86-video-*)、ウィンドウマネージャ(i3)、 デスクトップマネージャ(LightDM)である。ビデオドライバについては Xorg / Driver – ArchWiki を参照のこと。

以下のようにインストールして、 LightDM を有効化しておく。

pacman -S xf86-video-intel    # nvidiaならxf86-video-nouveauなど適宜
pacman -S xorg-server xorg-xinit xterm i3-wm i3status
pacman -S lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings
pacman -S dmenu compton lxappearance ttf-dejavu otf-ipafont
systemctl enable lightdm

i3 の設定なんかで便利なものをいくつか入れてある。

lightdm-gtk-greeter-settings はログイン画面のテーマやアイコンなどをカスタマイズするアプリ。

dmenu は i3 標準指定のメニューソフト。初めて i3 をインストールするなら入れておいた方がいい。

compton はウィンドウの透過と影を生成する(タイリングで、なぜ透過や影が必要かって?)。

i3_wm_demo_transparency.jpg

lxappearance は軽量の GTK+ テーマスイッチャー。

ttf-dejavu は欧文書体 DejaVu、 otf-ipafont は日本語書体 IPAゴシック と IPA明朝。

さて、そうしておいてから再起動。

systemctl reboot

再起動の後

再起動すると LightDM の画面が表示されるのでログインする。

最初のログイン後に i3 が2つの質問をしてくる。

config をつくるか?
~/.config/i3/config が作成される。
$mod キーは何か?
私のデフォルトでは Mod4 ( Super / Windows キー) だった。

~/.config/i3/config は後でカスタマイズに使う。 yes しておく。

$mod キーは別のキーと組み合わせて i3 に命令するときに使う。 Windows キーをあてるのが迷いがなくていい。

Wi-Fi 接続

有線接続なら既にネットに接続されているはずである。けれど Wi-Fi 接続の場合はいま一度ネットワーク接続を確保しなければならない。

$mod+d を押すと最上段の一行に dmenu という小さなランチャが立ち上がるので、そこで nm-applet を起動する。

すると最下段のステータスバーにネットワーク接続のアイコンが表示されるので、マウスでクリックしてネットワークに接続する(SSID とパス入力)。これでネットワーク接続を永続化出来たはずだ。

なお、再起動した後でもネットワーク接続アイコンを表示させたいから、 exec --no-startup-id nm-applet の一行をさきほど作成されたばかりの ~/.config/i3/config に追記しておく。

$mod+Enter を押すと端末エミュレータが起動するから、 nanovi~/.config/i3/config を開いて書き加えるか、あるいはコマンドラインで

printf "\n%s\n" "exec --no-startup-id nm-applet" >>~/.config/i3/config

などとしておく。

端末エミュレータ xterm の設定

$mod+Enter で端末エミュレータ(xterm)が起動するが、そのままだと白い。好き好きはあるのだろうけれども、私は黒っぽくいきたいと思うので以下のような設定をした。

!! ================================================================
!! Xterm
!! ================================================================

!! General
XTerm*termName: xterm-256color
XTerm*scrollBar: False
XTerm*cursorBlink: True

!! Fonts and Encoding
XTerm*utf8: True
XTerm*locale: True
XTerm*utf8Title: True
XTerm*faceName: xft:DejaVu Sans Mono
XTerm*faceNameDoublesize: xft:IPAGothic
XTerm*faceSize: 9
XTerm*scaleHeight: 1.08

!! Color Scheme : Tomorrow Night
!! https://github.com/chriskempson/tomorrow-theme

XTerm*background: #1D1F21
XTerm*foreground: #C5C8C6
! black
XTerm*color0: #282A2E
XTerm*color8: #373B41
! red
XTerm*color1: #A54242
XTerm*color9: #CC6666
! green
XTerm*color2: #8C9440
XTerm*color10: #B5BD68
! yellow
XTerm*color3: #DE935F
XTerm*color11: #F0C674
! blue
XTerm*color4: #5F819D
XTerm*color12: #81A2BE
! magenta
XTerm*color5: #85678F
XTerm*color13: #B294BB
! cyan
XTerm*color6: #5E8D87
XTerm*color14: #8ABEB7
! white
XTerm*color7: #707880
XTerm*color15: #C5C8C6

以上を ~/.Xresources に書いて、

xrdb -merge ~/.Xresources

としてリソース登録する。

~/.Xdefaults に書く方法もあるが、リソースマネージャでの定義がある場合に ~/.Xdefaults は読まれないので、普通は上記のように ~/.Xresources を書いて(書き換えて)、都度 xrdb コマンドでリソース定義しておくのが無難でいいと思う。

また、 xterm もいいのだけれど rxvt-unicode (urxvt) も軽くていい。インストールすれば i3 が urxvt を優先して使ってくれるもよう。

フォントレンダリングパッチ Infinality について

従前、ここでは Infinality bundle & fonts を使ってフォント表示を美麗にする方法を採っていたのだけれど、この infinality-bundle が更新されなくなってて、freetype2 の新バージョンに追いつかなくなってる。

そのまま使うといわゆる harfbuzz エラーをおこして PyGTKなどが動かず、著しい不自由に陥る。先行き不透明な状態でもあるので、infinality-bundle の利用はしばらく控えたほうがいいかもしれない。

アンインストールと代替案については「infinality-bundle アップデート停止中なので、とりあえずアンインストールするメモ」に書いたので参照してみて下さい。

i3 のフォント設定

i3 のデフォルトでは monospace が指定されており、ウィンドウタイトルやステータスラインは等幅フォントで表示される。例えば ttf-dejavu がインストールされていれば DejaVu Sans Mono なんかが使われたりする。日本語ロケールで IPAGothic をインストールしていれば等幅のIPAゴシックが使われるかもしれない。

自分好みのフォントがあるだろうから、これを書き換える例としてプロポーショナルな DejaVu Sans と IPAゴシック の設定をする。

i3 の設定は ~/.config/i3/config に記されているので、これをちょっと改変する。

nano ~/.config/i3/config

15〜16行目あたりに font pango:monospace 〜 という行があるので、これを以下のように書き換える。

font pango:DejaVu Sans,IPAPGothic 9

これで Shift+$mod+r で i3 を再起動すれば、ウィンドウタイトルとステータスバーの両方がプロポーショナル書体に変わるだろう。

フォント設定書式は font pango:<font>,<font>,... <style> <font-size> という様に指定する。スタイルも指定できるから、

font pango:DejaVu Sans,IPAPGothic Italic 9

などとすると斜体で表示される。

なお、サイズは 12px というようにピクセルでも指定できるもよう。

また、ステータスバーのフォントをウィンドウタイトルとは違うものにも設定できる。試しに今度は monospace の DejaVu Sans Mono を指定してみる。

設定ファイル ~/.config/i3/config の最後に bar { 〜〜 } という記述が数行あるところへ、フォントの設定を書き加える。

bar {
        status_command i3status
        font pango:DejaVu Sans Mono 12px
}

これで i3 を再起動( Shift+$mod+r )すればステータスバーのフォントが変わる。

さて、ここではポピュラーなフォントとして DejaVu と IPA ゴシックを設定したが、個人的におすすめしたいのは Nasuフォント

もともとかっこいい源ノ角ゴシックをもとに、I と l や濁点・半濁点などの区別がつきやすいよう改良されており、特に等幅の NasuM はエディタで使うのにいい。VLゴシックがなんか丸すぎてダメだと思っている人にもおすすめです。

ダウンロードして ~/.local/share/fonts の下に解凍し fc-cache -fv ~/.local/share/fonts とすれば使えるようになる。

i3 操作の基本

簡易的だが i3 の基本操作について記す。

端末起動 / アプリ起動 / ログアウト

キー 動作
$mod+Enter 端末エミュレータを起動する
Shift+$mod+q ウィンドウを閉じる
$mod+d アプリランチャー (dmenu)
Shift+$mod+e ログアウト
Shift+$mod+r i3 の再起動

$mod+Enter を押すと端末エミュレータが起動する。もう一度押すと画面が分割されて端末エミュレータのウィンドウが増える。どんどん押すとどんどん分割されてウィンドウが増殖していく。

減らす (閉じる) には exit コマンドを実行するか Shift+$mod+q を押す。この Shift+$mod+q ではどんなウィンドウでも閉じることができる。

アプリの起動はもちろん端末エミュレータからやってもいいけれど、 i3 標準指定の dmenu を使うのが便利だ。 $mod+d を押すと最上部に現れ、コマンドを入力していくと逐次検索してくれる。カーソルをあわせて Enter で起動。

i3 を終了してログアウトするには Shift+$mod+e を押す。画面上部にメッセージダイアログ(横棒ってかんじ)が出てくるので “Yes, exit i3” をクリックする。 DM まかせだったなら DM のログイン画面に戻っていく。

i3 の再起動は Shift+$mod+r で行う。i3 が upgrade したり、設定ファイルを書き換えたときなどに。

ウィンドウを縦横に構成する

ウィンドウを開くと右に開かれていくが(縦長ディスプレイでは下方向らしい)、この方向を変えるにはウィンドウを開く前に $mod+h あるいは $mod+v を押して、方向を決めておく。

例えば、あるウィンドウを選んでいる状態で $mod+v を押してから $mod+Enter を押すと、もとのウィンドウの垂直方向(下)に新しい端末が開く。また $mod+h を押した後であれば水平方向(右)に開く、という具合だ。

キー 動作
$mod+h (+ウィンドウ作成) 水平方向つまり右にウィンドウを作成する
$mod+v (+ウィンドウ作成) 垂直方向つまり下にウィンドウを作成する

ウィンドウの切り替え

複数のウィンドウがあれば切り替えないと使えない。 $modj k l ; 各キーの組み合わせで切り替える。

キー 動作
$mod+j 左のウィンドウ
Smod+k
$mod+l
$mod+;

ウィンドウの大きさ

キー 動作
$mod+f フルスクリーン表示
$mod+r リサイズモードへと突入

$mod+f でフルスクリーン表示になる。ウィンドウタイトル欄もステータスバーも、そして枠までも消してくれる。ビデオの再生なんかにいい。

ウィンドウのリサイズは、マウスでウィンドウの境界をドラッグする。あるいは、これをキーボードで行うには $mod+r でリサイズモードに入ってから行う。

リサイズモードに入ったらあとは方向キーか j k l ; で。

タイル型に並んでいるのだから、片方を大きくすれば片方が小さくなるということだ。

ESC を押すとリサイズモードを終了する。

$mod+r mode 動作
j または 水平方向に縮小
k または 垂直方向に拡大
l または 垂直方向に縮小
; または 水平方向に拡大
ESC リサイズモードを終了

おわりに

$mod+Enter で起動する端末エミュレータは i3-sensible-terminal というシェルスクリプトを介して実行される。端末エミュレータが複数インストールされている場合に妥当なものが起動されるようなスクリプトのようだ。

rxvt-unicode (urxvt) をインストールした場合には xterm よりは優先するが、 x-terminal-emulator を起動できる場合はそれを優先することとなっている。つまり Ubuntu や Debian に i3 をインストールした場合は、 x-terminal-emulator が起動されてしまう。この場合 i3/config を書き換える(例: bindsym $mod+Return exec urxvt )ことでもいいが、環境変数 TERMINAL が設定されてあればこれの内容を最優先するもよう(関係の記述が 別投稿 にあり)。

以上、ここでは i3 のインストールと基本的な使い方を記したけれども、もう少し詳しい操作説明やカスタマイズについては別に記した。

Sources and Revisions

コメント

  1. […] i3 wm タイル型ウィンドウマネージャを使う【Jenemal Notes】 […]

  2. […] i3 wm タイル型ウィンドウマネージャを使うことのメモ | Jenemal Notes i3 – ArchWiki i3 Window Manager を使ってみて分かったおすすめ設定集 – Qiita i3: i3 User’s Guide […]

  3. […] 参考サイト – i3+Arch Linux初期環境構築まとめ – i3 wm タイル型ウィンドウマネージャを使うことのメモ […]