i3 wm タイル型ウィンドウマネージャを使う

CLI などキーボード操作主体で便利な i3

i3 Window Manager ‘Improved Tiling WM’

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

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

i3_wm_demo_tiling.jpg

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

i3 – improved tiling wm

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

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

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

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

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

タイル型ウィンドウマネージャ

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

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

このタイル型というのは、画面を格子で分割したその中に起動したアプリなどを表示してくる。

整然と並ぶものだから地味な印象だけれど、画面内のウィンドウは重なったりしないし、下に隠れるなんてこともなく、各々の主張をしっかりと受け止める。

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

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

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

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

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

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

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

私はこの i3 を Arch 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 へ転送となっているのでそれに合わせてちょっと書き換えました。

永続的ネット接続の確保

ガイド に沿って進めてくれば、既に有線接続か 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 を押すと端末エミュレータが起動するから、

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 のフォント設定

デフォルトでは等幅フォントが使用される。例えば ttf-dejavu がインストールされていれば DejaVu Sans Mono なんかが使われたりする。

自分好みのフォントがあるだろうから、これを書き換える例としてプロポーショナルな 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 リサイズモードを終了

おわりに

簡単に基本的な使い方までを記したけれども、本格的な操作の説明は i3 タイル型ウィンドウマネージャを使う (2) に。

Sources and Revisions

スポンサードリンク

コメント

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