Есть ли надежный способ программно определить, что оконный менеджер полностью инициализирован? - PullRequest
1 голос
/ 17 января 2011

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

Так есть лилучший способ надежно ощутить, что оконный менеджер полностью инициализирован?

1 Ответ

1 голос
/ 18 января 2011

Короткий ответ - нет, нет пути.

В частности, у metacity еще есть что делать после установки свойства _NET_SUPPORTING_WM_CHECK.

Я думаю, что ваш подход - лучшее из того, что вы можете сделать.

С положительной стороны, если нет ошибок, гонка не должна иметь никаких эффектов, кроме косметических. (то есть показаны вещи, которые не находятся в своем окончательном состоянии)

Для смягчения, вы можете установить окно в полноэкранный размер вручную, прежде чем отобразить его. Затем позвольте WM установить размер после этого.

...