Làm thế nào để thăm dò ý kiến ​​cho Xvfb để sẵn sàng?


11

Các tài liệu Travis CI nói để chạy sleep 3sau khi bắt đầu xvfbđến "Người [nó] một thời gian để bắt đầu". Tôi không thể tìm thấy bất kỳ tài liệu tham khảo cho sự chậm trễ này trong mantrang . Đây có phải là chương trình sùng bái hàng hóa? Nếu không, làm thế nào để tôi thăm dò chứ không phải ngủ để đảm bảo nó có sẵn?

Câu trả lời:


6

Theo mặc định Xvfbsẽ tạo ra một ổ cắm tên miền Unix để khách hàng kết nối. Trên hệ thống của tôi, tập tin ổ cắm tập tin này được tạo ra /tmp/.X11-unix/. Bạn có thể sử dụng inotifywaitđể nghe các sự kiện trong thư mục này. Ví dụ,

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

và sau đó chạy Xvfb :9(hiển thị 9 chẳng hạn). Khi nó sẵn sàng, bạn sẽ thấy

/tmp/.X11-unix/ CREATE X9

từ inotifywaitđó sẽ chấm dứt. Bây giờ bạn có thể kết nối với DISPLAY=:9.


Điều này sẽ thực hiện công việc trên một hệ thống mà tôi có thể mong đợi kiểm soát công việc phù hợp, nhưng tôi đang cố gắng thực hiện điều này trong tệp cấu hình Travis CI. Tôi không nghĩ rằng tôi có thể dựa vào việc có thể sử dụng các công việc nền và chờ chúng hoàn thành.
l0b0

3
Một đơn giản while [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; donethực sự đã làm các trick . Đánh dấu là giải quyết vì các mẹo đường dẫn.
l0b0

1

Đối với những người có thể chạy các tập lệnh đầy đủ, một tùy chọn khác sẽ được sử dụng xdpyinfotrên màn hình mong muốn:

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

(Câu trả lời lấy cảm hứng từ https://gist.github.com/tullmann/476cc71169295d5c3fe6 ).


Cảm ơn! Chỉ cần một xdpyinfodòng là đủ; vòng lặp có thể được thực hiện theo một triệu cách khác nhau.
l0b0

Chắc chắn nó có thể được thực hiện theo nhiều cách. Mặc dù vậy, đoạn mã này tạo ra đầu ra được in đẹp cũng cho bạn ý tưởng về việc Xvfb đã mất bao nhiêu thời gian để sẵn sàng. Tôi đã viết rằng để sử dụng riêng của tôi, nhưng nhận ra những người khác cũng có thể được hưởng lợi từ đó.
Anton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.