1

ウィンドウマネージャーと単一のフルスクリーンプログラムだけで最小限のXセッションを実行したいと思います。これを行うための明白な方法は、次のようなものを.xinitrcに入れることです。

metacity & # this could be any window manager
exec my-fullscreen-app

ただし、これらは並行して起動されるため、競合状態が少しあります。ウィンドウマネージャーの準備が整う前にアプリを表示したくないのは、ウィンドウのサイズがフルスクリーンモードに表示されるためです。最初にウィンドウマネージャーの初期化が完了していることを確認したいと思います。

私が思いついた最高のものは次のようなものです:

metacity &
while ! xprop -root | grep -q _NET_SUPPORTING_WM_CHECK
do
    sleep 0.1
done
sleep 0.3
exec my-fullscreen-app

ただし、ルートウィンドウに_NET_SUPPORTING_WM_CHECKが設定されているからといって、必ずしもWMの準備ができているとは限りません。また、0.3秒のスリープは、一部のシステムでは深刻なやり過ぎであり、他のシステムでは完全に不十分である可能性があります。

それで、ウィンドウマネージャーが完全に初期化されていることを確実に感知するためのより良い方法はありますか?

4

1 に答える 1

1

簡単に言えば、いいえ、方法はありません。

特に metacity には、_NET_SUPPORTING_WM_CHECK プロパティを設定した後にやるべきことがまだ残っています。

あなたのアプローチはあなたができる最善のことだと思います。

プラス面としては、バグがない限り、レースには見た目以外の影響はありません。(つまり、最終状態ではないものが表示されます)

軽減するには、ウィンドウをマッピングする前に手動でフルスクリーン サイズに設定することをお勧めします。その後、WMにサイズを設定させます。

于 2011-01-17T22:17:33.887 に答える