恥は/dev/nullへ by 初心者

~ PC初心者による右往左往の記録 ~

i3wmを毎回同じレイアウトで起動する

Debianを起動して使うものは毎回ほぼ同じで、ターミナルを2つとGoogle Chromeです。普段は、これらを起動した後、画面の幅(横幅)のうち6割をChromeに割り当てるべく、Chromeの幅を調整しています。



しかし、PCを使っているのに同じ作業を人間が毎回手動でやるのはおかしいですよね。そこで、この作業を自動化することにしました。

現在はウィンドウマネージャとしてi3wmを使用しているので、i3wmのマニュアルを調べたところ、案の定、レイアウトを保存しておいて、起動時にそれを復元する方法が用意されていました。

情報源

https://i3wm.org/docs/layout-saving.html
もしくは
/usr/share/doc/i3-wm/

現在のレイアウトを保存する

最初の作業は、現在のレイアウトを保存することです。 デスクトップを普段使用する状態にして以下のコマンドを実行します。
(以下の実行例は、ワークスペース1を対象にしています。)

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


これで、ワークスペース1のレイアウト情報がworkspace-1.jsonファイルに保存されました。しかし、このファイルはこのままでは使用できません。少しだけ編集する必要があります。

レイアウト情報ファイルの編集

レイアウト情報ファイル(出力したworkspace-1.jsonファイル)の中には種々の項目が並んでいますが、ユーザーがチェックすべき項目は以下の4つです。

instance
class
title
window_role

(備考)このうちinstanceとclassは必須

初期状態ではこれらの項目がコメントになっているので各行の//を除去します(アンコメントします)。これで編集は終わりです。


終わりなのですが・・・、上記4項目に記述する内容を調べる方法を書いておきます。

xprop

というコマンドを実行するとマウスカーソルが十字になります。このカーソルで開いているウィンドウの1つをクリックします。するとターミナルに、そのウィンドウに関する情報が表示されます。

$ xprop
WM_WINDOW_ROLE(STRING) = "gimp-toolbox-color-dialog"
WM_CLASS(STRING) = "gimp-2.8", "Gimp-2.8"
_NET_WM_NAME(UTF8_STRING) = "Change Foreground Color"

(この出力例は「情報源」のページにあった例をコピペしたものです。)

出力例にある情報は、以下のように4項目に対応しています。

instanceは、WM_CLASSの1つ目の出力(出力例だとgimp-2.8)  
classは、WM_CLASSの2つ目の出力(出力例だとGimp-2.8)  
titleは、_NET_WM_NAME(出力例だとChange Foreground Color)  
window_roleは、WM_WINDOW_ROLE(出力例だとgimp-toolbox-color-dialog)  


レイアウトの復元設定

i3wmが起動時にレイアウト情報ファイルを読み込むように設定します。

まず、レイアウト情報ファイルを普段うっかり触らないように、i3wmの設定ファイルを置いているディレクトリに移動します。

mv workspace-1.json ~/.config/i3/


次に、

~/.config/i3/config

を開いて、ファイルの末尾に以下の行を加えました。

exec --no-startup-id "i3-msg 'workspace 1; append_layout ~/.config/i3/workspace-1.json'"

「これで作業は終わった」と思っていたのですが、i3wmを起動し直すと、ウィンドウ枠は復元されているものの、ソフトが起動していないことに気づきました。

私の場合、sakuraというターミナルを2つとGoogle Chromeを起動することになるので、~/.config/i3/configファイルの内容を以下のようにしました。

exec --no-startup-id sakura
exec --no-startup-id sakura
exec --no-startup-id google-chrome
exec --no-startup-id "i3-msg 'workspace 1; append_layout ~/.config/i3/workspace-1.json'"


念のために書いておくと、sakuraを2つ起動するのでsakuraに関する行が2行あります。わざと1行だけにすると(sakuraを1つしか起動しないと)下記画像のように左下の枠においてターミナルが起動していない状況になります。

追記

i3wmについて参考になりそうなウェブページを見つけた場合は、ここに追記していこうと思います。

i3wm(i3-gaps)の紹介およびトラブルシューティング | 点と接線。