i3 window manager Tips
タイル型 window managerの一つであるi3wmに関するメモ。 タイル型WMは基本的にウィンドウを重ねず表示するため、配置を気にしなくて良いのが利点。 その中でもi3wmはある程度マウス操作もでき、フロートモードもあるためストイック過ぎず、使いやすいと思う。
インストール
(TBE)
クイックスタート
公式にショートカットキーのリファレンスカードがある。
ユーザーガイド
i3 config
キーバインド等の細かな挙動をカスタマイズできる。
~/.config/i3/config
に設定ファイルがある。一般的な設定が初回起動時のダイアログで自動生成される。
マウスによる操作設定
# マウスオーバーでフォーカスさせない
focus_follows_mouse no
# タイトルバー中クリックでウィンドウを閉じる
bindsym --release button2 kill
# Mod+ウィンドウ中クリックでウィンドウを閉じる
bindsym --whole-window $mod+button2 kill
# タイトルバー右クリックでフロート切り替え
bindsym button3 floating toggle
壁紙
fehで表示するのが良い exec
# 単独表示
exec --no-startup-id "feh --bg-fill ~/PATH/TO/PICTURE.png"
# --bg-fill はみ出して拡大, --bg-max はみ出さず拡大, --bg-scale 縦横比を変えて拡大,
# --bg-tile タイル表示, --bg-center 中央に表示
# 起動するたびランダム表示
# alwaysにするとMod+shift+rでリセットするたび変更できる
exec_always --no-startup-id "feh --bg-fill --randomize --recursive ~/PATH/TO/PICTURES/"
ハードウェア電源ボタンの挙動
ハードウェアの電源ボタンの挙動はi3wmでなくsystemdが管轄している。
挙動を変えるには/etc/systemd/logind.conf
を編集する。
[Login]
#...
#HandlePowerKey=poweroff
#HandleSuspendKey=suspend
#HandleHibernateKey=hibernate
#HandleLidSwitch=suspend
#HandleLidSwitchDocked=ignore
#...
となっている部分を HandlePowerKey=ignore
などすると無効化できる。
HandleLidSwitch
でラップトップの蓋を閉じたときの挙動も変更できる。
変更を反映させるには再起動するか、 sudo systemctl restart systemd-logind
をコマンドする。
トラックパッド切り替え
ラップトップのトラックパッド切り替えボタンを有効化する。 まず次のbashファイルを作っておく。
#!/bin/bash
declare -a STATES=(1 0)
DEVICE=$(xinput list --name-only | grep -i TouchPad)
STATE=$(xinput list-props "$DEVICE" | grep 'Device Enabled' | sed 's/^.*:[ \t]*//')
xinput set-prop "$DEVICE" 'Device Enabled' ${STATES[$STATE]}
chmod +x touch_toogle.sh
で実行権を付与。
パスの通った /usr/local/bin/
などに置いておくと便利。
これをi3configでキーバインドする。
# toogle touchpad
bindsym XF86TouchpadToogle exec touch_toogle.sh
(上手く動作しない?)
参考
画面調整
マルチモニタ
xrandrなどで直接Xを設定する。arandrを使えばGUIで設定できる。
sudo apt install arandr
DPI調整
基本は勝手に調整しているが、手動でしたい場合は xrandr --dpi 96
で設定できる。
設定はi3wmをリスタートすると反映される。
HiDPI - ArchWiki
シャットダウン
デフォルトだと i3wm からはログアウトしかできないので不便。 なので $mod+Shift+e に次をバインドする。 system mode に入ることでキー操作だけでシャットダウン等ができる。
bindsym $mod+Shift+e mode "$mode_system"
set $Locker "i3lock -i ~/Pictures/i3lock.png && sleep 1"
set $mode_system System (l) lock, (s) suspend, (h) hibernate, (Shift+e) logout, (Shift+r) reboot, (Shift+s) shutdown
mode "$mode_system" {
bindsym l exec --no-startup-id $Locker, mode "default"
bindsym s exec --no-startup-id "systemctl suspend", mode "default"
bindsym h exec --no-startup-id "systemctl hibernate", mode "default"
bindsym Shift+e exec --no-startup-id i3-msg exit, mode "default"
bindsym Shift+r exec --no-startup-id "systemctl reboot", mode "default"
bindsym Shift+s exec --no-startup-id "systemctl poweroff -i", mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
その他
# 新規ウィンドウにフォーカスしない
# (ブラクラ的なやつで操作不能になるのを防ぐ)
no_focus [window_role=".*"]
# アプリケーションごとのウィンドウ設定
# xpropで調べて
# >WM_CLASS(STRING) = "nemo", "Nemo"
# と出てくる内の後者"Nemo"をclassに指定する
for_window [class="Nemo"] floating enable
# 前者はinstanceで指定しても良い
for_window [class="Gnome-terminal" instance="gnome-terminal-server"] floating enable
dmenu
mod+d で出てくるアプリケーションランチャー。 パスの通ったコマンドが実行できる。
i3-dmenu-desktop
デフォルトではコメントアウトされてる代替のランチャー。 dmenu と同じ見た目だが、 Lens とかと同じく /usr/share/applications/ あたりにある desktop ファイルを参照する。 こっちのほうが便利なことも多い。
rofi
dmenu だと文字が小さくて読みづらい!、と思ったらいい感じの代替ランチャーソフトがあった。 画面中央に出してくれるので見やすい。 また、ウィンドウセレクターの役割も果たす。
# dmenu
bindsym $mod+d exec --no-startup-id dmenu_run
# i3-dmenu-desktop
bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
# rofi (Ctrl+Tab でコマンドとアプリケーションの候補を切り替え)
bindsym $mod+d exec --no-startup-id "rofi -modi 'run,drun' -show run"
# rofi as windows-changer
bindsym Mod1+Tab exec --no-startup-id "rofi -show window"
i3-msg
基本的にはキー操作によって予めconfigに記載されたコマンドをi3に送って操るわけだが、端末から直接コマンドを送ることもできる。
例えば i3-msg workspace 10
とすれば"workspace 10"のコマンドがi3に送られてworkspaceが切り替わる。
i3-nagbar
$mod+e
で出てくるようなメッセージバーを表示させているプログラム。
i3status
i3wm右下にあるステータスバー。設定ファイルは~/.config/i3status/config
など
ユーザーマニュアル
デフォルトでは/etc/i3status.conf
にある設定ファイルを読み込んでいるはず。
設定をカスタマイズするならこれを元にして~/.config/i3status/config
にコピーすると良い。
options
表示位置
デフォルトで status bar の位置は下だが、上にもできる。 i3 の config で以下の部分を追記する。
bar {
position top
status_command i3statu
#status_command "py3status -c ~/.config/py3status/config"
tray_output primary
}
ネットワークモジュール
order += "module"
で各モジュールを追加していく。
各モジュールの設定はmodele {...}
の形で行う。
formatと名前の付いた属性が大体表示する内容なので、この辺を変えれば日本語にローカライズもできる。
wireless
# Wi-Fiモジュール設定例
wireless _first_ {
format_up = "無線: 接続済み(%quality at %essid) %ip"
format_down = "無線: 接続なし"
}
# Ethernetモジュール設定例
ethernet _first_ {
format_up = "有線: %ip (%speed)"
format_down = "有線: 接続なし"
}
バッテリーモジュール
"battery all"の方を使えばバッテリーが複数ある場合も合算になる。
(合わせて"order += battery all"にしないといけない。)
デフォルトでは/sys/class/power_supply/BAT#/uevent
から情報を取得しているが、
/sys/class/power_supply/CMB#/uevent
にバッテリー情報がある場合には"No Battery"と表示されてしまう。
その場合にはpath属性にこのパスを指定してやれば良い。
battery
# バッテリーモジュール設定例
battery all {
format = "%status %percentage %remaining"
status_bat = "バッテリー"
status_chr = "充電中"
status_full = "充電済"
status_unk = "不明"
integer_battery_capacity = true
hide_seconds = true
# path = "/sys/class/power_supply/CMB1/uevent"
}
py3status
i3statusの拡張版
ドキュメンテーション
aptレポジトリにあるので手動でインストールする。(18.04)
sudo apt install py3status
i3で使うにはi3の設定ファイルで
status_command i3status
となっている箇所を次に置き換える。
status_command py3status -c /PATH/TO/CONFIG
設定ファイルはi3statusと互換性があるが、逆はないので~/.config/py3status/config
などにi3statusのconfigをコピーするのが良い。
ref
on_click属性
py3statusでは利用できるモジュールが増え、クリックイベントを拾うこともできるようになる。
例としてdiskモジュールをクリックするとnautilusを開くようにする。
on_click
disk "/" {
format = "%avail"
on_click 1 = "exec nautilus --no-desktop ~/"
# on_click 1 = "exec nemo --no-desktop ~/"
}
static_stringモジュール
文字列を表示するだけのモジュール
on_clickと合わせればアプリケーショランチャーにもできる。
# 例
# orderに追加
order += "static_string test"
# format属性で表示内容を指定
static_string test {
format = "Hello, py3status!"
}
# 例:ファイルランチャー
#order += "frame my_launcher"
frame my_launcher {
format = '{output} {button}'
format_separator = ' '
static_string entry1 {
format = "🦊Firefox"
on_click 1 = "exec firefox"
}
static_string entry2 {
format = "🐚Nemo"
on_click 1 = "exec nemo --no-desktop ~/"
}
}