Я хочу запустить минимальный 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-секундный сон после этого является кладжом, который может быть серьезным излишним в некоторых системах и может быть совершенно неадекватным в других.
Итак, есть ли лучший способ надежно определить, что оконный менеджер полностью инициализирован?