i3 wm で セッションを保存するには

anyevent-i3およびperl-json-xsをインストールしておく

sudo pacman -Ss perl-anyevent-i3
sudo pacman -Ss perl-json-xs

最初にworkspace でターミナルをいくつか開き、好きなレイアウトにしておく。ここが対象のworkspaceとなる。
次に、別のworkspaceで、対象のworkspace を指定してi3のレイアウトの配置をファイルに保存する。

i3-save-tree --workspace 1 > ~/.config/i3/workspace_1.json

保存したファイルから、コメントを取り除く。

tail -n +2 ~/.config/i3/workspace_1.json | fgrep -v '// split' | sed 's|//||g'  > ~/.config/i3/workspace_1.json

作成したファイルをよみだすスクリプトを作成する。

load_layout.sh

#!/bin/bash
i3-msg "workspace 1; append_layout ~/.config/i3/workspace_1.json"

レイアウトにあわせて起動したいアプリケーションを以下の形式で呼出すように、スクリプトに追記する。

(urxvt &)
(qutebrowser &)

qutebrowserを起動する場合i3-save-tree が出力したレイアウト状態に上手くあてはまらずに、余白(なにも起動していない領域)ができる場合がある。

これは、qutebrowserがQTというGUIのツール上で起動するために、サイズを指定するパラメータがうまく渡せていないのかもしれない。

そこで、workspace_1.json から、対応する領域の記述部分を削除して(qutebrowser &) をスクリプトから呼び出すだけにする。そうすると、それ以外のレイアウトの状態を復元したうえで、qutebrowserを新規に立ち上げた状態となり、作業状態を復元するという目的は満たすことができる。

レイアウトと復元した状態にすることはできないが、アプリケーションは起動しておけるのでそれで良しとする。

最後に、i3の設定ファイルにショートカットキーで、スクリプトを呼びだせるようにしておく。

.config/i3/config

# 設定ファイルに追記
bindsym $mod+g exec sh ~/bin/load_layout

Appendix.

i3 - ArchWiki : Save and restore the window layout