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?

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.


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 ).


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.