All Articles

i3wm + Arch Linux初期環境構築まとめ

概要

なんで i3wm という Window Manager を使うようになったかというと、ノート PC を Arch Linux+Gnome で使用していて以下のような気になる点があったからです。

  • 画面が小さいので、無駄なくウィンドウを整列させて使いたい
  • タッチパッドでの操作がしにくいので、キーボードで基本的な操作を完結させたい
  • Gnome は(比較的)重い(らしい)ので、軽いウィンドウマネージャを使いたい

実際使ってみると軽いしキーボードで操作しやすいし、なんなら GUI じゃなくて CUI のアプリケーション使うようになったりといった変化もありました。

ただ Arch Linux をインストールした上で Windows Manager を i3wm だけインストールすると、いろいろ設定したりパッケージをインストールしたりするのがね…面倒…

Arch Linux のインストールはArchWiki: インストールガイドのとおりにやりましたがここは省略。

i3wm インストール

i3-wmi3statusdmenu(ランチャー)をインストールします。 (i3statusdmenuは後で別のものに置き換えますが、設定しなくとも使えるのでまずはこれをインストールしておきます) 初期設定で Mod キーをどこにするか聞かれますが、Windows の入っていた PC なら Win キーである Mod4 が無難だと思います。

ディスプレイマネージャとしてLightDM、あとはターミナルを何かインストールしておきます。

ノート PC なら省電力用にtlpとかインストールしておくのもあり。

ネットワーク設定

ネットワーク管理のためのパッケージをインストールします。(私はNetworkManagerにしています) NetworkManager.servicedhcpcd.serviceと競合するので、dhcpcd.serviceを disable する必要があります。

Bluetooth を使用するにはbluezbluez-utilsを導入します。 (PluseAudio を使用していて Bluetooth ヘッドホン使いたいならpulseaudio-bluetoothもインストールする必要がありそうです) このままでも CLI で接続設定することができますが(Bluetooth: CLI による設定)、私は GUI で設定したいのでBluemanをインストールしました。

Fcitx

日本語入力するために Fcitx と Mozc をインストールします。 あとは日本語フォントも適当に入れておきます。(Noto font とか ipafont とか)

sudo pacman -S fcitx fcitx-mozc fcitx-im fcitx-configtool
sudo pacman -S otf-ipafont ttf-dejavu

設定

~/.xintrc

export DefaultImModule=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

fcitx を起動したら、fcitx-configtool から適当なキーボードと mozc を追加します。

i3 関連

i3 は~/.config/i3/configに設定を記述することでカスタマイズが可能です。 ここで設定可能な項目は、だいたいキーバインドとアプリケーション設定がほとんどです。

キーバインド

ほとんどデフォルトのままですが、追加した設定をいくつか記述します 3 つめのはマルチディスプレイのときにワークスペースを移動するためのものです。

~/.config/i3/config

# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
#font pango:monospace 8
font pango:Dejavu Sans,IPAGothic 10

# Prior=Page up Next=Page Down
bindsym $mod+Prior workspace prev
bindsym $mod+Next workspace next

#move workspace
bindsym $mod+Shift+Prior move workspace to output up
bindsym $mod+Shift+Next move workspace to output down

ハードウェアキーの設定

特殊キーの名前を調べるにはxorg-xevパッケージのxevコマンドで可能です。

輝度

バックライト(ArchWiki)を参照。 輝度の調整をキーに割り当てるには、xorg-xbacklightパッケージのxbacklightコマンドを使って config に書き込みます。

~/.config/i3/config

# Screen brightness controls
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10

音量

まずpulseaudioと設定ツールであるpavucontrolをインストールします。 pluseaudioのフロントエンドとしてはpamixerなどが存在します。(あとで使うのでインストールしておきました) あと flash の音を出すためにpulseaudio-alsaが必要です。

~/.config/i3/config

# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle

スクリーンショット

せっかくなのでスクリーンショットも PrtScr キーで動作させます。 スクリーンショットにはimagemagickパッケージを使用します。 ] ~/.config/i3/config

# screenshot
bindsym Print exec --no-startup-id import -window root ~/Pictures/screenshot`date "+%y%m%d%H%M"`.jpg

その他

壁紙

fehで設定します。(feh は軽量の画像ビューアです)

feh --bg-scale ~/Pictures/wallpaper.png

最後に設定した壁紙(とコマンド)を使用するのであれば

~/.fehbg

で大丈夫です。

外部モニタ

まずxrandrをインストールします。 そして HDMI ポートや VGA ポートに接続された際に、自動的に画面を拡張するようなスクリプトを書いた上で、自動起動させておきます。(スクリプトはご自身の環境に合わせてください)

~/.config/i3/config

exec --no-startup-id ~/.config/i3/script/monitor_detect.sh

~/.config/i3/script/monitor_detect.sh

#!/bin/bash

#st_prev=$(cat /sys/class/drm/card0-HDMI-A-1/status)
st_prev="disconnected"

while :
do
    st_next=$(cat /sys/class/drm/card0-HDMI-A-1/status)
    if [ $st_prev != $st_next ]; then
        st_prev=$st_next
        if [ $st_next = "connected" ]; then
            xrandr --output eDP1 --mode 1600x900 --output HDMI1 --auto --above eDP1
        else
            xrandr --output eDP1 --mode 1600x900 --output HDMI1 --off
        fi
        ~/.fehbg
    fi
    sleep 1
done

蓋を閉じたときの動作

ノート PC なので、蓋を閉じたらサスペンドするように変更します。

/etc/systemd/logind.conf

HandleLidSwitch=suspend

画面ロック

i3lockが標準で推奨されているようですが、マルチモニタで壁紙がずれるのでlight-lockerを使います。 これだと LightDM のログイン画面と同じになります。 light-lockerをサスペンドから起動した後に使用するには、

~/.config/i3/config

exec --no-startup-id light-locker --lock-on-suspend

dmenu の代替

rofiが上位互換として使えます。 これについてはこちらのサイト(Jenemal Notes)に詳しく説明されているので割愛します。

i3status の代替

自作スクリプトを適用できたり、見た目をより柔軟に変えられるパッケージが存在します。 シンプルながらある程度の拡張性があるi3blocksと、外観までかなり自由に変えることができるpolybarがあります。 詳しい設定は省きますが、i3blockspolybarも設定ファイルは GitHub に上げていますので良ければ。 polybarに関しては別記事にも書いています。

config(一部)

~/.config/i3/config

# start a terminal
bindsym $mod+Return exec termite

# kill focused window
bindsym $mod+Shift+q kill

# start a program launcher
bindsym $mod+d exec ~/.config/i3/script/rofi_launch.sh

# switch to workspace
bindsym $mod+Zenkaku_Hankaku exec --no-startup-id ~/.config/polybar/scripts/add_ws.py
bindsym $mod+Prior workspace prev
bindsym $mod+Next workspace next

#move workspace
bindsym $mod+Shift+Prior move workspace to output up
bindsym $mod+Shift+Next move workspace to output down

# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r exec --no-startup-id ~/.config/polybar/launch.sh restart

# color
# class                 border  backgr. text    indicator child_border
client.focused          #98c379 #98c379 #282c34 #98c379   #545862
client.focused_inactive #545862 #545862 #abb2bf #545862   #545862
client.unfocused        #545862 #545862 #abb2bf #545862   #545862

# Pulse Audio controls
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle

# backlight
bindsym XF86MonBrightnessUp exec xbacklight -inc 10
bindsym XF86MonBrightnessDown exec xbacklight -dec 10

# screenshot
bindsym Print exec --no-startup-id import -window root ~/Pictures/screenshot`date "+%y%m%d%H%M"`.jpg

# startup apps
exec --no-startup-id xrandr --output eDP1 --mode 1600x900 --output HDMI1 --off
exec --no-startup-id ~/.config/i3/script/monitor_detect.sh
exec --no-startup-id ~/.fehbg
exec --no-startup-id fcitx
exec --no-startup-id ~/.config/polybar/launch.sh
exec --no-startup-id light-locker --lock-on-suspend
exec --no-startup-id xset s off -dpms
exec --no-startup-id dropbox

# application setting(float)
for_window [class="Lxappearance"] floating enable, resize set 600 400
for_window [class="Pavucontrol"] floating enable, resize set 600 400
for_window [class="Fcitx-config-gtk3"] floating enable, resize set 600 400
for_window [class="mozc_tool"] floating enable, resize set 600 400
for_window [class="Blueman-manager"] floating enable, resize set 600 400
for_window [class="Gnome-terminal"] floating enable move absolute position 990 px 470 px, resize set 600 400

最後の application setting(float)では、タイルではなく通常のウィンドウのような感じで表示させるアプリの指定ができます。 基本的には設定ツールに適用しています。 lxappearanceは GTK+テーマやアイコン、ポインタを変更することができるツールです。 アプリのクラス名を調べるためにはxorg-xpropパッケージをインストールして、

xprop | grep WM_CLASS

任意のアプリの画面をクリックすると

WM_CLASS(STRING) = "urxvt", "URxvt"

こんな感じで表示されます。

最後に

本当に使いやすいです。 基本的にキーボードで操作できるということもあって、同様にキーボードで操作できる CUI アプリケーションを使うようになりましたね。(rangerとかneovimとかncmpcppとか) メモリも起動時で 0.2~0.3GB 程度しか使用しておらずかなり軽量なのも良いです。

Source

GitHub: tonooo71/dotfiles

Qiita

Qiita: i3+Arch Linux 初期環境構築まとめ