GTKアプリケーション(Firefoxなど)が完全にロードされ、最大化する準備ができていることを確認する最も簡単な方法

GTKアプリケーション(Firefoxなど)が完全にロードされ、最大化する準備ができていることを確認する最も簡単な方法

Linuxキオスクでは、「背面から」(スクリーンセーバーが画面を空にした場合)、いくつかのアプリケーションの状態をリセットするために、以下を含むBASHスクリプトを使用します。コントロールパネル、Firefoxウィンドウを最大化する作業を担当します。

「wmctrl」は最初に「ウィンドウID」を見つけるためにウィンドウマネージャ(私の場合はXFWM)に(非同期?)メッセージを送信します。

FF_WID=$(wmctrl -l | grep ' - Mozilla Firefox' | cut -d ' ' -f1)

その後、フルスクリーンに最大化します。

wmctrl -ir $FF_WID -b add,fullscreen

問題は、Firefoxウィンドウが何らかの方法で「完全にロードされていない」場合(つまり、ウィンドウマネージャがすでにウィンドウIDを割り当てているがおそらく完了しているため)、後者の呼び出しが自動的に失敗することです(「詳細情報」を使用しても) 。スイッチ)ウィジェットを描きますか? - また、必要な作業を実行できません(最大化)。

sleep N回避策:デフォルトでは、最大化コマンドの前にランダムな遅延を追加する場合は、次のようにします。

しかし、2つの欠点がある。各コンピュータには異なる遅延が必要です。また、遅延が長すぎると、デスクトップが空であっても明確な瞬間に表示されるため、ユーザーにとってはエレガントではありません。

(あまりにも)短い遅延のためにプロセス(Firefox)が生成されたが、WMの「ウィンドウID」がまだ割り当てられていない瞬間があるようです。考えられるより良い解決策は次のとおりです。

while FF_WID=$(wmctrl -l | grep ' - Mozilla Firefox' | cut -d ' ' -f1) ; do
    true
done    
wmctrl -ir $FF_WID -b add,fullscreen

しかし残念ながら、「ウィンドウID」だけでは十分ではありません。これは、最大化要求をある程度ブロックする保留中のGTKイベントがあるためです。


Firefoxを別のGTKアプリケーション(「xfce4-terminal」など)に置き換えても同じ動作を確認できます。


別の回避策 - しかし、これはFirefox側でのみ動作しますが、一般的な解決策を探しています - アプリケーション側でロギングを有効にし、ロードフェーズ中にイベントを監視して「アプリケーションの準備」などを見つけることです。これを行うには、Firefoxロギングツール(NSPR_LOG_MODULES)を使用していくつかの実験を行います。

もう1つの部分的な解決策として、キオスク(フルスクリーン)モードでいくつかのFirefoxアドインを試しましたが、UIのカスタマイズに関してわずかに異なる動作が必要(および実装)されました。

言うまでもなく、-fullscreen他の場所に文書化されたFirefoxスイッチはLinuxバージョンでは機能しません。


読書としてこれは別の質問ですそして、多くの実験では、スイッチを使用または使用せずに(名前または整数の形式で)-i呼び出すと、「wmctrl」が発生する可能性があるさまざまな動作に関連する問題を排除する傾向があります。


この問題についてGoogleでたくさん検索しましたが、普遍的で「汚れていない」解決策が見つかりませんでした。

回答:不完全なGTKキューがなくなったために問題が発生するのは実際に可能ですか?

第二:(Aが真の場合)上記のようにキューが使い果たされる点に遅延を制限するBASHスクリプト技術はありますか?

  • PythonやPERLバインディングなど、GTKエンジンと対話する方法がいくつかあります。
  • GTKとBASHスクリプト間の相互作用に適した「gtk-server」もあります。
  • BASHスクリプトから直接共有ライブラリ(GTK、すべての共有ライブラリを含む)を呼び出すためにBASHプラグインで作業できるFFIインタフェース(ctypes.sh)もあります。

もちろん、理想的なソリューションは可能な限り水平なもの(FirefoxだけでなくすべてのGTKアプリケーションに対して)であり、できるだけ小さい数字が必要です。プログラム|バージョン依存ハッキングインストールとメンテナンス...

(とても長い)読んでくれてありがとう。良い一日をお過ごしください

ベストアンサー1

おすすめ記事