我想只用一个窗口管理器和一个全屏程序来运行一个最小的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并且可能完全不适用其他
那么是否有更好的方法来可靠地感知窗口管理器是否已完全初始化?
答案 0 :(得分:1)
简短的回答是否定的,没有办法。
特别是metacity在设置_NET_SUPPORTING_WM_CHECK属性后仍然需要做的事情。
我认为你的方法是你能做的最好的。
从好的方面来说,除非有错误,否则比赛除了化妆品之外不应该有任何影响。 (即显示的东西不是最终状态)
要进行缓解,您可能需要在映射之前手动将窗口设置为全屏大小。 然后让WM在此之后设置大小。