On Fri, Jan 25, 2002 at 01:54:22PM +0300, Alexey Voinov wrote: > Сначала опишу ситуацию в которой код, используемый в настоящее время для > поиска свободной циферки для запуска Xvfb, не работает. > > Я уже давно пересобираю все пакеты в chroot среде, к которой не монтируется > даже /proc. В связи с этим получаю /tmp, который радикально отличается от > настоящего тем, что в нём нет файла /tmp/.X11-unix/X0 в момет работы > X сервера. Т.е. тот код, который используется сейчас радостно находит > $DISPNUM==0 и считает, что Xvfb запустился. На самом деле этот сокет уже > занят, о чём Xvfb сообщает. > > Предлагаю немного доработать то, что есть сейчас. У меня прекрасно > отработал следующий код: > > > unset XAUTHORITY ||: > unset DISPLAY ||: > DISPNUM=0 > while [ -z "$DISPLAY" ]; do > while [ -f /tmp/.X$DISPNUM-lock -o -e /tmp/.X11-unix/X$DISPNUM ]; do > DISPNUM=$[DISPNUM+1] > [ "$DISPNUM" != 0 ] > done > DISPLAY=:$DISPNUM > %_x11bindir/Xvfb $DISPLAY & > if [ -f /tmp/.X$DISPNUM-lock -o -e /tmp/.X11-unix/X$DISPNUM ]; then Это race condition. > export DISPLAY > else > unset DISPLAY > DISPNUM=$[DISPNUM+1] > fi > done В общем, проблема есть, но хорошего решения я пока что не видел. Стоит подумать о вспомогательной программе (bind_cloexec_socket && exec_Xvfb). Regards, Dmitry +-------------------------------------------------------------------------+ Dmitry V. Levin mailto://ldv@alt-linux.org ALT Linux Team http://www.altlinux.com/ Fandra Project http://www.fandra.org/ +-------------------------------------------------------------------------+ UNIX is user friendly. It's just very selective about who its friends are.