是否有可靠的方法以编程方式确定窗口管理器已完全初始化?

时间:2011-01-17 19:30:36

标签: linux x11 xorg

我想只用一个窗口管理器和一个全屏程序来运行一个最小的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秒睡眠是一个可能在一些系统上严重过度杀伤的kludge并且可能完全不适用其他

那么是否有更好的方法来可靠地感知窗口管理器是否已完全初始化?

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的,没有办法。

特别是

metacity在设置_NET_SUPPORTING_WM_CHECK属性后仍然需要做的事情。

我认为你的方法是你能做的最好的。

从好的方面来说,除非有错误,否则比赛除了化妆品之外不应该有任何影响。 (即显示的东西不是最终状态)

要进行缓解,您可能需要在映射之前手动将窗口设置为全屏大小。 然后让WM在此之后设置大小。