動機

ノートPCをArch Linux+Gnomeで使用していましたが、面倒な点がいくつか

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

で、i3というタイル型のウィンドウマネージャがあると聞いて飛びついたんですが、クリーンインストールからi3を導入するのは思ったより大変だったので備忘録ついでに書いた次第

Arch Linuxのインストール

基本的にArch wikiの通りに
ディスプレイマネージャはLightDMを使用
あとxtermでも入れとく

i3のインストール

i3-wmi3statusdmenuをインストール
(i3statusdmenuは後で別のものに置き換えるが、デフォルトがこれらのようなのでひとまずインストール)
画面ロックを行うi3lockは使わないのでインストールしない
初期設定でModキーをどこにするか聞かれるが、Windowsの入っていたPCならWinキーであるMod4が無難?

Arch Linux関連

インストールはArchWikiの通りなので省略
有線LANが使用可能な環境でインストールを行ったので、無線LAN用のパッケージは未導入

ネットワーク設定

ネットワーク管理にNetworkManager、右下のアイコン表示用にnm-appletを導入
NetworkManager.servicedhcpcd.serviceと競合するので、dhcpcd.serviceをdisable

Bluetoothはbluezbluez-utils導入して、CLIで接続設定
Bluetooth: CLIによる設定(ArchWiki)

Fcitx

日本語は大事

$ sudo pacman -S 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を起動したら、右下アイコンを右クリック→configureから適当なキーボードとmozcを追加
かな/英数切り替えキーの設定もお好みで

その他

udisk2を入れて、GUIのファイラーであるnautilus入れたらUSBメモリを自動でマウントできてた
けどnautilus入れてないときに確認してないからなんとも

あとノートPCなので電源管理にtlpを導入

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

APCIイベントを伝達するapcid2を用いて同様の設定をすることも可能
ACPI: バックライトコントロールを有効にする(ArchWiki)
この場合、輝度の最大値を知る必要がある

$ cat /sys/class/backlight/intel_backlight/max_brightness
$ 937

自分の環境では937だったのでstepを50に設定

音量

まずpulseaudiopavucontrolvolumeiconをインストール
pulseaudioは音量調節用、
pavucontrolは便利な設定ツール的な何か、
volumeiconは右下にアイコンを出現させるもの
あとflashの音を出すためにpulseaudio-alsaが必要だそう

音量をハードウェアキーに設定するのは、volumeiconを入れたなら、アイコンを右クリック→Preference→HotKeysから簡単に設定できる
もしくは

~/.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 --bg-scale ~/Pictures/wallpaper.png

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

$ ~/.fehbg

で大丈夫

外部モニタ

キーバインドで設定する

まずxrandrをインストール

~/.config/i3/config
# external monitor
bindsym $mod+F8 exec --no-startup-id bash $HOME/.config/i3/script/monitor_ctl.sh
~/.config/i3/script/monitor_ctl.sh
#!/bin/bash
if xrandr | grep "HDMI1 connected"; then
    xrandr --output eDP1 --mode 1600x900 --output HDMI1 --auto --above eDP1
else
    xrandr --output eDP1 --mode 1600x900 --output HDMI1 --off
fi

~/.fehbg

これで、外部モニターが接続した/接続解除したあとにMod+F8を押すことでいい感じになる

自動で行う(追記)
~/.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

一定時間後に起動するのだったり、どこかのキーに設定するのもありかも

ワークスペース

左下に表示されるワークスペースにアイコンを表示(Font Awesomeを使用)
特定のアプリに対し起動するワークスペースを指定
$mod+数字を押した際に、ワークスペースで起動されるアプリが起動していなければ起動するように(起動しているなら多重起動しないように)設定(i3runorraise.sh)

~/.config/i3/script/i3runorraise.sh
#!/bin/bash

if [ $# -eq 3 ]; then
    status=$(i3-msg "[class=\"$1\"] focus")
    if [ $status != [{\"success\":true}] ]; then
        i3-msg exec "$2"
        i3-msg workspace "$3"
    fi
fi
~/.config/i3/config
# workspace icon
set $workspace1 "1: "
set $workspace2 "2: "
set $workspace3 "3: "
set $workspace4 "4: "
set $workspace5 "5: "
set $workspace6 "6"
set $workspace7 "7"
set $workspace8 "8"
set $workspace9 "9"
set $workspace10 "10: "

# switch to workspace
bindsym $mod+1 workspace $workspace1
bindsym $mod+2 exec --no-startup-id ~/.config/i3/script/i3runorraise.sh Vivaldi-stable vivaldi-stable $workspace2
bindsym $mod+3 exec --no-startup-id ~/.config/i3/script/i3runorraise.sh Code code $workspace3
bindsym $mod+4 exec --no-startup-id ~/.config/i3/script/i3runorraise.sh Thunderbird thunderbird $workspace4
bindsym $mod+5 exec --no-startup-id ~/.config/i3/script/i3runorraise.sh Nautilus nautilus $workspace5
bindsym $mod+6 workspace $workspace6
bindsym $mod+7 workspace $workspace7
bindsym $mod+8 workspace $workspace8
bindsym $mod+9 workspace $workspace9
bindsym $mod+0 workspace $workspace10

# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $workspace1
bindsym $mod+Shift+2 move container to workspace $workspace2
bindsym $mod+Shift+3 move container to workspace $workspace3
bindsym $mod+Shift+4 move container to workspace $workspace4
bindsym $mod+Shift+5 move container to workspace $workspace5
bindsym $mod+Shift+6 move container to workspace $workspace6
bindsym $mod+Shift+7 move container to workspace $workspace7
bindsym $mod+Shift+8 move container to workspace $workspace8
bindsym $mod+Shift+9 move container to workspace $workspace9
bindsym $mod+Shift+0 move container to workspace $workspace10

#assign applications
assign [class="VirtualBox Machine"] $workspace10

config

~/.config/i3/config
# startup apps
exec --no-startup-id nm-applet
exec --no-startup-id fcitx
exec --no-startup-id xrandr --output eDP1 --mode 1600x900 --output HDMI1 --off
exec --no-startup-id ~/.fehbg
exec --no-startup-id volumeicon
exec --no-startup-id dropbox
exec --no-startup-id light-locker --lock-on-suspend

# 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

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

$ xprop | grep WM_CLASS

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

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

こんな感じで表示される

これでなんとか使えるようになった(はず)

最後に

すごく使いやすい

Source

GitHub: tonooo71/i3config

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.