मैं डेबियन पर स्टार्टअप पर Xvfb कैसे शुरू करूं?


9

मुझे एक डेबियन वेब सर्वर मिला है जिसका उपयोग मैं सेलेनियम और पायथन के माध्यम से कभी-कभी स्क्रीन-स्क्रैपिंग के लिए कर रहा हूं।

सेलेनियम द्वारा नियंत्रित किए जाने पर फ़ायरफ़ॉक्स को चलाने के लिए मैं Xvfb को वर्चुअल X सर्वर के रूप में उपयोग करता हूं। यह देखते हुए कि मुझे (लगता है) मुझे इसका उपयोग शुरू sudoकरना है, मुझे नहीं लगता कि इसे पायथन से हर बार शुरू करना संभव होगा ( मेरे स्टैक ओवरफ्लो प्रश्न देखें ), इसलिए मुझे लगा कि मैं इसे हर समय चला सकता हूं ।

मैं वर्तमान में इसे कमांड लाइन पर इस तरह शुरू करता हूं:

sudo Xvfb :99 -nolisten tcp -fbdir /var/run

स्टार्टअप पर स्वचालित रूप से ऐसा करने के लिए मुझे किस विधि का उपयोग करना चाहिए? क्या मुझे यहाँcron सुझाए अनुसार उपयोग करना चाहिए ?

जवाबों:


6

डेबियन पर, आप Xvfb कमांड को जोड़ सकते हैं /etc/rc.local। अगर Xvfb बैकग्राउंड में खुद को अलग नहीं करता है, &तो कमांड के अंत में उपयोग करें ।

क्रोन का उपयोग करना बहुत अधिक काम करेगा, हालांकि इनइट स्क्रिप्ट आपको स्टार्टअप के अनुक्रम में वास्तव में इस पर अधिक नियंत्रण देती हैं, और यह सेवा शुरू करने का पारंपरिक तरीका है।


अहा, उत्कृष्ट। क्या संपादन किसी की अपनी व्यक्तिगत स्क्रिप्ट के साथ /etc/rc.localउपयोग करना पसंद किया जाता है update-rc.d?
पॉल डी। वेट

2
@Paul मैं कहूंगा कि update-rc.dप्राथमिकता है और निश्चित रूप से अधिक सक्षम है, लेकिन rc.localतेज और आसान है। इसके अलावा, मुझे लगता है कि गिल्स सही हैं, कोई कारण नहीं है कि यह रूट के रूप में चलाने की आवश्यकता है।
एंडी

4

आपका आधार अमान्य है: Xvfb को रूट के रूप में चलाने का कोई कारण नहीं है। आपके सामान्य एक्स सर्वर को केवल रूट (कई पर नहीं बल्कि सभी यूनियनों पर) चलाने की जरूरत है ताकि वह वीडियो हार्डवेयर तक पहुंच सके; यह परिभाषा द्वारा Xvfb के लिए एक मुद्दा नहीं है।

यदि आप स्टार्टअप पर Xvfb चलाना चाहते हैं, तो आप क्रोन का उपयोग @rebootपांच तारीख-और-समय के फ़ील्ड को बदलने के साथ कर सकते हैं । आप किसी भी उपयोगकर्ता के crontab में कर सकते हैं, न कि केवल रूट के। लेकिन मैं बात नहीं देख रहा हूँ। यदि आपको जरूरत पड़ने पर Xvfb शुरू किया, तो आपकी स्क्रिप्ट अधिक मजबूत होगी, जिस तरह से आप मूल रूप से इसकी योजना बना रहे हैं।


वैध बिंदु। केवल एक कमांड के लिए Xvfb चलाने के लिए आप उस xvfb-runकमांड का उपयोग कर सकते हैं जो आमतौर पर Xvfb के साथ जहाज करता है। यहाँ xvfb-run manpages.debian.org/stretch/xvfb/xvfb-run.1.en.html के लिए cli संदर्भ है । @ पाओल आप इसे निम्नानुसार चला सकते हैं:xvfb-run --server-args="-nolisten tcp -fbdir /var/run" python some-selenium.py
sebisnow

4

जैसा कि @Gilles ने सुझाव दिया, यह मांग पर चलने के लिए अधिक उपयुक्त है, खासकर जब आप इसे सेलेनियम परीक्षण के लिए उपयोग कर रहे हैं। यहाँ उदाहरण शेल कमांड हैं:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

xdpyinfoपहले का उपयोग करके प्रदर्शन की जाँच करना सुनिश्चित करेगा कि आप दो बार वर्चुअल फ्रेमबफ़र नहीं चलाएंगे।


यदि आपको वास्तव में इसे स्टार्टअप पर शुरू करने की आवश्यकता है, तो आप निम्नलिखित init.d स्क्रिप्ट की कोशिश कर सकते हैं :

#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

स्रोत: GitHub पर dloman / xvfb (forked: jterrace / xvfb से )

इसे सहेजें /etc/init.d/xvfbऔर इसे निष्पादन योग्य बनाएं, फिर इसे इस प्रकार शुरू करें:

/etc/init.d/xvfb start

स्‍वचालित रूप से स्‍टार्टअप पर चलने के लिए, रन करें:

sudo update-rc.d xvfb defaults

इसे ऑटोरन से निकालने के लिए, रन करें:

sudo update-rc.d -f xvfb remove

environmentएक्स कार्यक्रमों द्वारा मान्यता प्राप्त करने के लिए फ़ाइल में भी जोड़ें , उदाहरण के लिए:

echo DISPLAY=":1" | sudo tee -a /etc/environment

यहाँ systemd संस्करण के लिए संस्करण है: dloman / xvfb.service


मुझे पता है कि यह एक वर्ष पुराना है, लेकिन इसके साथ काम करने के लिए एक जावास्क्रिप्ट सेलेनियम संस्करण प्राप्त नहीं कर सकता। अगर मैं बूट करने के बाद काम करता हूं, लेकिन जब मैं इसे एक सेवा के रूप में शुरू करता हूं तो ऐसा लगता है कि यह xvfb का पता नहीं लगाता है। कोई भी विचार कि मैं शुरू में सेवाओं के रूप में काम करने के लिए दोनों कैसे प्राप्त कर सकता हूं?
मस्सिदे मुलिरो

@MasindeMuliro आप तब एक और प्रश्न पूछ सकते हैं, इसलिए उत्तर आपकी समस्या के लिए विशिष्ट होने के लिए अधिक अपडेट किए जा सकते हैं।
केनोरब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.