Raspberry Pi window matching utility devilspie2

アプリケーションによっては常に決まった位置、サイズ(スタイル)で起動したいものがあります。
Xアプリケーションのウインドウ位置、サイズなどをコントロールするユーティリティ devilspieは gdevilspieもインストール不可なことから中心はluaベースのdevilspie2に移っているようです。 devilspie自体はインストール、動作ともOKです。

機能としてはほぼ同じようですが開発者も違うことからデータの互換性は無いようです。
当サイトもdevilspie2に移行してみようと思います。

環境

Raspberry Pi 3 Raspberry Pi OS (32-bit) with desktop LXDE

devilspie2

# apt install devilspie2

なにかdevilspie2コマンドを実行するとディレクトリ~/.config/devilspie2が作成されます。

$ devilspie2 -v
Devilspie2 v0.42

参考サイト
スクリプトなどを紹介しています https://qiita.com/s-katsumata/items/318b4c58a9e32593553b
マニュアルはここ https://www.gusnan.se/scite/devilspie2/manual.php/

スクリプトの作成(ファイル名は適当に!devilspie2.lua以外ならいいと思う)
サイズの区切り文字を変更しています。
~/.config/devilspie2/devilspie2-debug.lua

debug_print( "window_name:        " .. get_window_name())
debug_print( "application_name:   " .. get_application_name())
debug_print( "instance_name:      " .. get_class_instance_name())
x, y, w, h = xywh()
debug_print( "xywh:               " .. x .. "," .. y .."," .. w .. "," .. h )
debug_print( "\n" )

スクリプト実行 (Ctrl-c 終了)

$ devilspie2 --debug


現在起動しているXアプリケーション全てが取得されます。
基本のウインドウ識別はgetで取得している3個の*name
xtermは3個とも同じネームなので複数のxtermを任意の位置に配置するのはdevilspie2では難しい。
chromium-browserはclass_instance_nameを使います。
pcmanfmは2箇所ありますがwindow_name: pi(ホームディレクトリ)がファイルマネージャー
もう一つはデスクトップになるので*name: pcmanfmを使うとデスクトップ全体が乱れることがあります。
その他window_name application_nameを使うのが多いと思います。

devilspie2起動
devilspie2はデーモンとして起動します。
=/.config/autostart/devilspie2.desktop 新規作成

[Desktop Entry]
Type=Application
Name=Devilspie2
Exec=devilspie2


lxsession
再起動するとdevilspie2は有効になっています。
pcmanfmからはNameのDevilspie2がファイルとして表示します。

設定ファイルの作成

準備ができたところで設定ファイルを作成
~/.config/devilspie2/applications.lua としておきます。

----------------------------------------------------
-- devilspie2 - Lua-based window matching utility --
----------------------------------------------------
-- get_window_name()
-- get_application_name()
-- get_class_instance_name()
-- pin_window() すべてのワークスペースにウィンドウを配置
-- shade() タイトルバーのみを表示
-- minimize() ウィンドウを最小化
-- set_window_workspace(x) x=workspace number
-----------------------------------------------------
-- pulseaudio Raspberry Pi 4
if (get_window_name()=="@cgDISVMf:- | pulseaudio Raspberry Pi 4") then
  set_window_geometry2 (600,24,340,100)
  pin_window()
  -- shade()
end

冒頭にマニュアルから当サイトで使いそうなコマンドを記載(– :コメント)しています。
例として当サイトで常時使っているpulse audio音量コントロールでテスト
devilspie2 –debugを実行しておくと記述に間違いがあればエラーを返します。

~/.config/devilspie2/以下の設定ファイルを再読込

$ killall devilspie2 && sleep 1 && devilspie2 &
$ surf pi4://html/pulse.php &

ディフォルトのsurfブラウザは800×600で起動します。
これをdevilspie2で340×100サイズまで小さくすのですが・・・ならないですね!
再度 killall devilspie2 && sleep 1 && devilspie2 &
小さくなりました。位置やpinも正常
これはdevilspieの時も同様でおそらくsurfがwindow_nameを取得するタイミングが遅いものと思っています。
ほかに起動しているdevilspie2で設定したアプリケーションは全て起動時に設定が反映されています。


起動(surf)の仕方は次回もう少しオシャレな方法でトライしてみたいと思います。

devilspieと比べるとdevilspie2は情報の取得や設定ファイルの作成はかなりわかりやすくなっていると思います。