我想用一个窗口管理器和一个全屏程序运行一个最小的 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 秒睡眠是一个杂物,在某些系统上可能是严重的过度杀伤,而在其他系统上可能完全不够。
那么有没有更好的方法来可靠地感知窗口管理器已完全初始化?