วิธีการสำรวจความคิดเห็นเพื่อ Xvfb ให้พร้อม?


11

เอกสารเทรวิส CIกล่าวว่าเพื่อให้ทำงานsleep 3หลังจากที่เริ่มต้นxvfbจะ "ให้ [มัน] บางเวลาที่จะเริ่มต้น" ฉันไม่พบการอ้างอิงถึงความล่าช้านี้ในmanหน้าใด ๆ การเขียนโปรแกรมลัทธิขนส่งสินค้านี้หรือไม่ ถ้าไม่ฉันจะสำรวจความคิดเห็นมากกว่าการนอนหลับเพื่อรับประกันว่าใช้ได้หรือไม่

คำตอบ:


6

โดยค่าเริ่มต้นXvfbจะสร้างซ็อกเก็ต Unix Domain เพื่อให้ลูกค้าเชื่อมต่อ /tmp/.X11-unix/ในระบบของฉันแฟ้มซ็อกเก็ตไฟล์นี้ถูกสร้างขึ้นใน คุณสามารถใช้inotifywaitเพื่อฟังเหตุการณ์ในไดเรกทอรีนี้ ตัวอย่างเช่น,

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

จากนั้นเรียกใช้Xvfb :9(ตัวอย่างเช่นแสดง 9) เมื่อพร้อมคุณควรเห็น

/tmp/.X11-unix/ CREATE X9

จากสิ่งinotifywaitที่จะยุติ DISPLAY=:9ตอนนี้คุณควรจะสามารถเชื่อมต่อกับ


นี่จะทำงานบนระบบที่ฉันสามารถควบคุมงานได้อย่างเหมาะสม แต่ฉันกำลังพยายามทำสิ่งนี้ในไฟล์กำหนดค่า Travis CI ฉันไม่คิดว่าฉันจะสามารถใช้งานแบ็กกราวด์ได้และรอให้งานเสร็จ
l0b0

3
ง่ายwhile [ ! -e /tmp/.X11-unix/X99 ]; do sleep 0.1; doneจริงไม่หลอกลวง การทำเครื่องหมายว่าแก้ไขได้เนื่องจากส่วนปลายของเส้นทาง
l0b0

1

สำหรับผู้ที่สามารถรันสคริปต์แบบเต็มรูปแบบได้ตัวเลือกอื่นจะใช้xdpyinfoบนหน้าจอที่ต้องการ:

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

(คำตอบได้รับแรงบันดาลใจจากhttps://gist.github.com/tullmann/476cc71169295d5c3fe6 )


ขอบคุณ! แค่xdpyinfoบรรทัดเดียวก็พอแล้ว การวนซ้ำสามารถทำได้หลายล้านวิธี
l0b0

แน่นอนว่าสามารถทำได้หลายวิธี แม้ว่าตัวอย่างข้อมูลนี้จะสร้างผลลัพธ์ที่พิมพ์ออกมาสวย ๆ ซึ่งจะช่วยให้คุณทราบว่าต้องใช้เวลานานแค่ไหนในการทำให้ Xvfb พร้อมใช้งาน ฉันเขียนเพื่อการใช้งานของตัวเอง แต่การตระหนักว่าคนอื่นจะได้ประโยชน์จากสิ่งนั้นเช่นกัน
Anton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.