タイル型WMで快適な環境を構築する

はじめに

この記事は東京理科大学 Advent Calendar 2016 - Qiitaの6日目の記事です.昨日はfujitoraさんのNew Relicでめっちゃ簡単にRailsアプリケーションの監視をするでした.明日の枠はまだ埋まっていないので,この記事を見た誰かが書いてくれると嬉しいなあ.

デスクトップ環境とは

さて皆さん,快適なデスクトップ環境をお過ごしでしょうか?

唐突ですが,このスクリーンショットは半年前の僕のパソコンの様子です.

この頃はCinnamonというウインドウマネージャを使っていました.これは「スタック型」と呼ばれるウインドウマネージャです.Windowsでも同じような雰囲気だと思いますが,いくつものウインドウがあり,マウスで自在に動かせるタイプの環境です.
僕は今までスタック型の環境しか使ってこなかったわけですが,あるときふと気付きました.
「新しいウインドウを開いた時,いつも最大化している!!」

そして,知人の紹介で「タイル型」のウインドウマネージャがあるということを知り,ウインドウマネージャを変えることにしました.

タイル型を使う

今使っている環境はi3です.
こんな感じに,モニタをn分割していい感じのレイアウトで表示してくれます.


ブラウザでおなじみの「タブ」のようにウインドウを切り替えることもできます.

画面を分割した中に,タブを作ることもできます.

またi3には”floating mode”なるモードが存在し,GIMPなどスタック型のウインドウマネージャ用に作られたアプリケーションも楽々使うことができます.これが,タイル型の中でもi3をオススメしたい一番の理由です.

i3の設定

ノートパソコンで運用する上で,必要と思われる設定をまとめておきます.

ランチャー

今までGNOMEのランチャー(スタートメニュー?)を使っていたため,i3標準のdmenuは使いづらく思いました.
freedesktop.org準拠のデスクトップファイルを参照できるようにしたい,ということで,僕はrofiを使っています.rofiはコマンドライン引数に色々と書くことで挙動や見た目を変更させることができます.
i3の設定ファイルに次にように設定しました.

1
bindsym $mod+semicolon exec "rofi -show drun -font 'snap 10' -fg '#505050' -bg '#000000' -hlfg '#ffb964' -hlbg '#000000' -o 85 -kb-cancel 'Escape,Control+g' -kb-mode-next 'Control+i'"

Emacsのhelmと対応させて”S-;”で起動,”C-g”で閉じられるように設定しています.

デスクトップファイルについてはfreedesktop.org 規格のデスクトップファイルについてのメモ - Λlisue’s blogを参照しました.

電源管理

ロック・サスペンド・シャットダウンあたりはぱぱっとできるように設定をします.

ロック

i3の場合はi3lockを使うことでお手軽にロックがかけられます.

1
2
3
4
5
6
7
8
9
10
11
12
set $Locker i3lock -i ~/Pictures/Wallpaper/kishimen.png && 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"
bindsym Return mode "default"
bindsym Escape mode "default"
}

PrintScreen

スクリーンショットも撮りたいので設定を行います.
僕はmaimを使いました.なかなかよいアプリケーションで,画面の一部を切り取ってキャプチャを行うことができます(別途slopが必要).

1
2
3
bindsym Print exec "maim ~/Pictures/screenshot/$(date +%F-%T).png"
bindsym $mod+Print exec "maim -i $(xdotool getactivewindow) ~/Pictures/screenshot/$(date +%F-%T).png"
bindsym Shift+Print exec "maim --select ~/Pictures/screenshot/$(date +%F-%T).png"

その他のキーボード・ショートカット

音量・ミュート・明るさなどを特殊キーから調整できるようにしました.
この際,キーの名前を取得する際にはxevコマンドを利用して調べました.
参考:特別なキーボードキー - ArchWiki

1
2
3
4
5
6
bindsym XF86MonBrightnessDown exec "xbacklight -dec 5"
bindsym XF86MonBrightnessUp exec "xbacklight -inc 5"
bindsym XF86AudioMute exec "amixer -q -D pulse set Master toggle"
bindsym XF86AudioLowerVolume exec "amixer -c 0 -D pulse sset Master 1%- unmute"
bindsym XF86AudioRaiseVolume exec "amixer -c 0 -D pulse sset Master 1%+ unmute"
bindsym XF86AudioMicMute exec "amixer -c 0 -D pulse set Capture toggle"

インターネットにつなぐ

この辺からただの覚書です.
コンピュータの起動時にネットワークに接続できるようにします.

1
exec_always --no-startup-id nm-applet

音を出せるようにする

1
exec_always --no-startup-id pulseaudio --start

背景を設定する

1
exec_always --no-startup-id feh --bg-scale ~/Pictures/Wallpaper/1366_768_20091126090927427353.jpg

i3の基本操作(大嘘)

i3の初期設定についてはデフォルトの設定ファイルを見てもらうとして,この記事では僕オリジナルの設定を自慢したいと思います.

ワークスペースの切り替え

ワークスペースの切り替えは”S-[1234567890]”がデフォルトになっているようですが,正直狙った数字キーを押すのが面倒なので,思い切って変更しています.
“S-[asdfuiop]”とすることでいい感じに使っています.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
set $WSa 1:a
set $WSs 2:s
set $WSd 3:d
set $WSf 4:f
set $WSu 5:u
set $WSi 6:i
set $WSo 7:o
set $WSp 8:p
bindsym $mod+a workspace $WSa
bindsym $mod+s workspace $WSs
bindsym $mod+d workspace $WSd
bindsym $mod+f workspace $WSf
bindsym $mod+u workspace $WSu
bindsym $mod+i workspace $WSi
bindsym $mod+o workspace $WSo
bindsym $mod+p workspace $WSp
bindsym $mod+Shift+a move container to workspace $WSa
bindsym $mod+Shift+s move container to workspace $WSs
bindsym $mod+Shift+d move container to workspace $WSd
bindsym $mod+Shift+f move container to workspace $WSf
bindsym $mod+Shift+u move container to workspace $WSu
bindsym $mod+Shift+i move container to workspace $WSi
bindsym $mod+Shift+o move container to workspace $WSo
bindsym $mod+Shift+p move container to workspace $WSp

もう一つポイントがあって,ワークスペース名を”数字:名前”にしています.
次の設定を書くことで,i3bar上に並ぶワークスペースが降順にソートされるようになります.

1
2
3
4
5
bar {
status_command i3status
font pango:DejaVu Sans 10px
strip_workspace_numbers yes
}

ウインドウの切り替え

複数のウインドウを表示している時,その間の移動は”S-[jkl;]”がデフォルトになっています.しかし,vimキーバインドと一つずれていてとても気持ちが悪かったので,”S-[hjkl]”で移動できるように変更しました.

1
2
3
4
5
6
7
8
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right

最後に

ここまで長々と設定を書いてきましたが,僕の設定ファイルをgithubに公開しているので貼り付けておきます.
taniho0707/dotfiles - gihub

また,i3の設定で参考にしたサイトです.