Como fazer uma pesquisa para o Xvfb estar pronto?

11

A documentação do Travis CI diz para executar sleep 3depois de começar xvfba "dar algum tempo para começar". Não encontrei nenhuma referência a esse atraso na manpágina . Essa programação é cult de carga? Caso contrário, como faço a pesquisa em vez de dormir para garantir que ela esteja disponível?

l0b0
fonte

Respostas:

6

Por padrão Xvfb, criará um soquete de domínio Unix para os clientes se conectarem. No meu sistema, esse arquivo de soquete de arquivo é criado /tmp/.X11-unix/. Você pode usar inotifywaitpara escutar eventos neste diretório. Por exemplo,

 $ inotifywait -e create /tmp/.X11-unix/

e depois execute Xvfb :9(exibição 9, por exemplo). Quando estiver pronto, você deverá ver

/tmp/.X11-unix/ CREATE X9

a partir do inotifywaitqual terminará. Agora você deve conseguir se conectar DISPLAY=:9.

meuh
fonte
Isso faria o trabalho em um sistema em que posso esperar o controle adequado do trabalho, mas estou tentando fazer isso em um arquivo de configuração do Travis CI. Acho que não posso confiar em poder usar trabalhos em segundo plano e esperar que eles terminem.
L0b0 18/09/16
3
Um simples while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donerealmente fez o truque . Marcação como resolvida devido à ponta do caminho.
L0b0
1

Para aqueles que podem executar scripts completos, outra opção seria usar xdpyinfona exibição desejada:

# Start Xvfb
sudo /usr/bin/Xvfb ${DISPLAY} -screen 0 1280x800x24 &

# Wait for Xvfb
MAX_ATTEMPTS=120 # About 60 seconds
COUNT=0
echo -n "Waiting for Xvfb to be ready..."
while ! xdpyinfo -display ${DISPLAY} >/dev/null 2>&1; do
  echo -n "."
  sleep 0.50s
  COUNT=$(( COUNT + 1 ))
  if [ "${COUNT}" -ge "${MAX_ATTEMPTS}" ]; then
    echo "  Gave up waiting for X server on ${DISPLAY}"
    exit 1
  fi
done
echo "  Done - Xvfb is ready!"

(Resposta inspirada em https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).

Anton
fonte
Obrigado! Apenas a única xdpyinfolinha seria suficiente; o loop poderia ser feito de um milhão de maneiras diferentes.
L0b0
Claro que isso pode ser feito de várias maneiras. No entanto, esse trecho cria uma saída bem impressa que também fornece uma idéia de quanto tempo levou para o Xvfb estar pronto. Escrevi isso para meu próprio uso, mas percebi que outros também podem se beneficiar disso.
Anton