Bagaimana cara polling agar Xvfb siap?

11

The dokumentasi Travis CI mengatakan untuk menjalankan sleep 3setelah memulai xvfbuntuk "memberi [itu] beberapa waktu untuk memulai". Saya tidak dapat menemukan referensi untuk keterlambatan ini di manhalaman . Apakah ini program pemujaan kargo? Jika tidak, bagaimana cara polling daripada tidur untuk menjamin itu tersedia?

l0b0
sumber

Jawaban:

6

Secara default Xvfbakan membuat soket Unix Domain untuk disambungkan klien. Di sistem saya file soket file ini dibuat di /tmp/.X11-unix/. Anda dapat menggunakannya inotifywaituntuk mendengarkan acara di direktori ini. Sebagai contoh,

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

dan kemudian jalankan Xvfb :9(tampilan 9, misalnya). Ketika sudah siap Anda akan melihat

/tmp/.X11-unix/ CREATE X9

dari inotifywaitmana akan berakhir. Anda sekarang harus dapat terhubung DISPLAY=:9.

meuh
sumber
Ini akan melakukan pekerjaan pada sistem di mana saya dapat mengharapkan kontrol pekerjaan yang tepat, tapi saya mencoba melakukan ini dalam file konfigurasi Travis CI. Saya tidak berpikir saya bisa mengandalkan untuk dapat menggunakan pekerjaan latar belakang dan menunggu mereka selesai.
l0b0
3
Sederhana while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donesebenarnya berhasil . Menandai telah dipecahkan karena ujung lintasan.
l0b0
1

Bagi mereka yang dapat menjalankan skrip lengkap, opsi lain adalah menggunakan xdpyinfopada tampilan yang diinginkan:

# 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!"

(Jawaban terinspirasi oleh https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).

Anton
sumber
Terima kasih! Hanya satu xdpyinfobaris saja sudah cukup; loop dapat dilakukan dalam jutaan cara berbeda.
l0b0
Tentu itu bisa dilakukan dengan banyak cara. Namun, cuplikan ini menciptakan keluaran yang tercetak cantik yang juga memberi Anda gambaran tentang berapa lama waktu yang dibutuhkan untuk Xvfb untuk siap. Saya menulis itu untuk saya gunakan sendiri, tetapi menyadari orang lain dapat memperoleh manfaat dari itu juga.
Anton