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

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

在设置 _NET_SUPPORTING_WM_CHECK 属性之后,metacity 尤其还有一些事情要做。

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

从好的方面来说,除非有错误,否则比赛应该没有任何效果,除了装饰效果。(即显示未处于最终状态的事物)

为了减轻影响,您可能希望在映射之前手动将窗口设置为全屏大小。然后让 WM 设置之后的大小。

于 2011-01-17T22:17:33.887 回答