2011-01-17 7 views
1

ウィンドウマネージャと1つのフルスクリーンプログラムで最小限のXセッションを実行したい。ウィンドウマネージャが完全に初期化されたことをプログラマチックに判断する信頼できる方法はありますか?

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

しかし、これらを並列に発売されているため、競合状態のビットがあります。これを行うには明白な方法は、.xinitrcの中で、このようなものを入れています。ウィンドウマネージャの準備が整う前に自分のアプリケーションを表示させたくないので、ウィンドウの表示サイズをフルスクリーンモードに変更する必要があります。ウィンドウマネージャが最初に初期化を完了したことを確認したい。

私が思い付くした最高のは、このようなものです:

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それはいくつかのシステムで深刻な過度の可能性があり、他の人に完全に不十分かもしれないクルーゲである後に2番目の睡眠。

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

+0

私はここで何かを見逃しているかもしれませんが、ウィンドウマネージャーがまったく必要ない場合はありませんか? –

+0

Karl、ウィンドウを適切にフルスクリーンするにはウィンドウマネージャが必要です。また、アプリが実行中に他のアプリを起動する可能性もあり、実行中のウィンドウマネージャが正しく機能する必要があります。 (私はその部分を言及することを怠ったと思う) – mackstann

答えて

1

短い答えはいいえ、方法はありません。

特にmetacityには、_NET_SUPPORTING_WM_CHECKプロパティを設定した後にまだ残っているものがあります。

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

バグがない限り、レースには化粧品以外の効果はないはずです。 (つまり、最終状態ではないものが表示されます)

軽減するには、マッピングする前に手動でフルスクリーンサイズに設定することをお勧めします。 その後、WMがそれ以降のサイズを設定するようにします。

+0

これは、フルスクリーンプロパティを使用するのと同じように画面のサイズに手動で設定することについての良い点である - それは、私の心配の大半が、小さなサイズのウィンドウ。 – mackstann

+0

別のアイデア:別のアイデアがあります:ウィンドウがアイコン化された状態でアプリを起動させてから、ウィンドウを非アイコン化して(EWMH経由で、WMが応答した後でのみ機能するように)働いた。私はこの技術的には、ユーザー(または他のプログラム)が手動で非常に迅速にウィンドウを再アイコン化した場合競合状態になる可能性があると思うが、コーナーケースが非常に起こりそうでないと仮定すると、これはうまくいくと思う... – mackstann

+0

これはおそらく動作する最初のマップの前にWM_STATEと他のプロパティを適切に設定する必要があります。 –

関連する問題