これはRICORA言語班 Advent Calendarの18日目の記事です。新入生相手におままごとをしていたら完全に書くのを忘れていたので、適当なことを書きます。すみません。
背景
windows10をサクサク動かせないPCを普段使いするためにはどうすればいいのだろうか?という問題が与えられたとき、大体ubuntuとかlinux mintみたいな軽量ディストロがおすすめされると思うのですが、あえてウィンドウマネージャーの方から攻めてみたいと思ったので書きます。
導入とか
dotfileとかどうせ上げてるんだろ? → はい。これです。見たければ見てもいいよ。
i3はフリーソースのタイル型ウィンドウマネージャです。 タイル型ウィンドウマネージャは、画面上のアプリケーションを画面を埋めるように配置します。
個人的に感じるi3のメリットは、カーソルを動かす必要がない(=キーボード上で操作が完結する)ことと、バッテリーの持ちが非常に良くなることです。
もちろんacpi
で充電の上限は設けていますが、大体70%充電しておけば6時間程度は使えるはずです。
さらに、feh
などを用いることで背景を設定することもでき、i3bar
やi3status
を調整することで、天気やバッテリー情報などを常時表示することもできます。
導入方法
i3は文献があまりになさすぎるので、いつものarch wikiに全面的に頼ることになります。 私も全面的に頼りました。
archで入れているわけではないので、ubuntuを使いつつ入れる方法を説明します。
公式でおすすめされているのは、配布されているtarballを用いる方法ですが、apt
でも拾ってこれます。
sudo apt install i3 i3-wm
このくらいで十分だった気がする。 足りなくなったら都度足してください。
i3をインストールすると、ログイン画面の右下に歯車マークが出て、ログイン後のウィンドウマネージャが選べるようになります。 これでi3を選択してログインすれば、無事にインストール完了です。
操作
i3はまあまあ独特な動きをします(vimよりは習得コストが低いかもしれない)。 キーマップの完全版はDefault Keybindingsを参照してください。
i3を使う際にはmod
と呼ばれる特殊キーを設定する必要があります。
私はaltキーに設定して使っていますが、このmod
キーと何らかのキーを同時に押すことで画面の操作を行います。
例えば、mod + 1
なら1番目のウィンドウに移動します。
また、mod + shift + 1
なら現在のウィンドウを1番目のウィンドウに移動させます。
意味がわかりませんね。手を動かさないと理解できないので自分で頑張ってi3を使ってみてください。
i3
i3の設定ファイルは、ルート直下の.config/i3/config
になります。
デフォルトでは生成されていなかったと思うので、そのようなファイルを新しく作って設定してあげると勝手にファイルを見に行ってくれます。
確か開発レポジトリをクローンしてきてブランチをcheckoutするとデフォの設定が入っているconfigがあるはずです。
おそらく初見で利用する際にはそれをコピー・コピーアンドペーストするといいと思います。
私が追記している設定は確かこんな感じです。
画面閉じたらスリープさせる(だった気がする)
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
日本語入力用のibusを裏で起動
exec --no-startup-id ibus-daemon -x -d -r
背景の起動
exec --no-startup-id ~/.fehbg
明るさ
exec --no-startup-id compton -cbm 0.6
通知マネージャのDunstをきちんと動かしたかった...
exec --no-startup-id dunst -print -config "/home/n/.config/dunst/dunstrc"
音量の上げ下げ
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
ミュート
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
音量調整
bindsym XF86MonBrightnessUp exec --no-startup-id brightnessctl set +10%
bindsym XF86MonBrightnessDown exec --no-startup-id brightnessctl set 10%-
音量調整はだるいというかリファレンスがなくてstack overflowとかに頼りまくりですが多分これで動くはず。
i3bar
大抵のOSは(勝手、あるいは不親切もしくは手を回しすぎているので)上か下に何らかの情報を表示するバーみたいなのがあります。 i3のバーはデフォルトではクソダサなのでどうにかこうにか整えていきましょう。
(username)/.config/i3/config
の一番下にバーという項目があります。
いろんな設定ができるので、適当に参照して動かしてください。
この設定の中で割と参照される設定はfont
、colors
、position
とかだと思います。
font
はまあフォントなんですが、実は記号っぽい(例:バッテリーとか)を付け加えるフォントが存在し、それを利用するとメモリマークなどを表示させることができます。詳しくはAwesome Font
で調べてみてください。colors
は色ですが、RGB16進表示で色変できます。よかったですね。position
は確かtopとbottomしかないのですが、位置は変えられます。よかったですね2。
いや肝心の表示するものは!?という話ですが、この設定は(username)/.config/i3status/config
で行います。
このファイルもデフォルトでは存在しないので、作ってくださいね。
i3statusの設定によってバーに表示されるものの指定を行うことができます。 私のstatusにはこんな感じのものが表示されているらしいです。
order += "read_file spotify"
order += "read_file weather"
order += "cpu_usage"
order += "memory"
order += "battery all"
order += "tztime local"
order += "wireless _first_"
order += "volume master"
read_file
以外はそれぞれの機器の現在の状況を読み取って表示してくれます。あとは詳細を読んでね。
read_file
はファイルを読んで表示してくれる感じのやつです。
上のspotify、weatherはそれぞれspotifyとwttr.inから情報を拾ってきて表示するスクリプ卜のログを読んでいます。wttr.inはたまに止まってバグってわろてる。
まあこんな感じでカスタマイズできます。
スクリプトについて
スクリプトっていってもどういうスクリプトやねん。 はい。
#/usr/bin/bash
WEATHER_LOG="/home/$(whoami)/.cache/weather/weather.log"
echo "Tsukuba " > $WEATHER_LOG
curl wttr.in/Tsukuba?format=1 | tr -d '\n ' >> $WEATHER_LOG
echo " / Unga " >> $WEATHER_LOG
curl wttr.in/Unga.Station?format=1 | tr -d '\n ' >> $WEATHER_LOG
こんなん。大学が運河にあり、家がつくばにあるのでcurl
してそれを表示しています。
cron
で15分ごとに更新される手筈だが、wttr.inの天気の更新が遅いのでもはや参考情報にしかならないので観葉植物みたいなもん。spotifyのも同じ感じで、これもspofityを動かしてないといけないので観葉植物もどき。
あとディスプレイの照度調整をするスクリプトを書かないと照度調整ができなかった(カス!)ので、それも書いた。
CURRENT_VAL=$(cat /sys/class/backlight/intel_backlight/actual_brightness)
MAX_VAL=$(cat /sys/class/backlight/intel_backlight/max_brightness)
if [ $1 = '-' ]; then
echo $(expr $CURRENT_VAL - $(expr $MAX_VAL / 20)) > /sys/class/backlight/intel_backlight/brightness
elif [ $1 = '+' ]; then
echo $(expr $CURRENT_VAL + $(expr $MAX_VAL / 20)) > /sys/class/backlight/intel_backlight/brightness
fi
/sys/class/backlight/intel_backlight/brightness
を読み書きすることで明るさ調整をしているらしいので、入力によってプラスしたりマイナスしたりした値を返すようにしています。なぜこれが組み込まれていないか謎。
ファイル管理について
dotfileというレポを作って、init.sh
で初期設定を勝手にできるようにしています。というか.vimrcと.bashrcもあるので、それはrootにおいて、それ以外は.configを作成してそれに突っ込んでる。ubuntuでしか動かんが、ワシはそれでいいのでそれでいい。
結論
i3を使いたい気持ちになりましたか?早くwindowsかOS Xをディスクから完全に消し去り、i3と心中しましょう。おわり。