วิธีที่เหมาะสมในการเริ่ม xvfb เมื่อเริ่มต้นบน centos?


11

ฉันกำลังทำตามบทช่วยสอนนี้และฉันต้องการทราบ Centos-version ที่เทียบเท่าของขั้นตอนเฉพาะอูบุนตู:

You may receive a few warnings regarding fonts and such, but it’ll still work despite these. If you want the framebuffer to start automatically on system startup you can do:
sudo update-rc.d xvfb defaults 10

วิธีที่เหมาะสมในการเริ่ม xvfb เมื่อเริ่มต้นใน centos คืออะไร?

คำตอบ:


12

ฉันใช้สคริปต์ init ต่อไปนี้เพื่อเพิ่มและเริ่ม xvfb เมื่อ boot เพียงแค่ทำ blat ใน /etc/init.d/ และเรียกใช้ chkconfig xvfb บน

   #!/bin/bash
   #chkconfig: 345 95 50
   #description: Starts xvfb on display 99
   if [ -z "$1" ]; then
   echo "`basename $0` {start|stop}"
       exit
   fi

   case "$1" in
   start)
       /usr/bin/Xvfb :99 -screen 0 1280x1024x24 &
   ;;

   stop)
       killall Xvfb
   ;;
   esac

1
อย่าลืมเพิ่มสิทธิ์ดำเนินการให้กับไฟล์นี้: chmod + x xvfb
panchicore

2
แม้ว่าคำถามของเขาถูกโพสต์สำหรับ CentOS แต่ก็มีประโยชน์สำหรับการแจกแจงอื่นเช่นกัน สิ่งนี้ทำงานได้ดีบน Ubuntu; คุณเพียงแค่ต้องทำงานแทนupdate-rc.d chkconfigดูคำตอบนี้update-rc.dสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ
sigpwned

1
คำถามคือว่าจะทำอย่างไรกับ CentOS CentOS ปัจจุบันใช้ systemd และคำตอบนี้ไม่สามารถแก้ปัญหาได้ คำตอบจาก JdeBP เหมาะสมกว่า
Yoichi

เมื่อพิจารณาคำถามถูกถามเมื่อ 6 ปีที่แล้วเมื่อไม่มี centos เวอร์ชันปัจจุบันอยู่ (หรือ systemd iirc) โซลูชัน systemd นั้นดีกว่าและควรเป็นตัวเลือกที่ต้องการเมื่อเป็นไปได้
Tacticus

19

และตอนนี้ systemd ตอบ

เกือบสี่ปีแล้วที่คำถามและคำตอบเหล่านี้เปลี่ยนแปลงไปในขณะที่ไม่มี CentOS ตั้งแต่รุ่น 7 เป็นต้นมาใช้ systemd อูบุนตูถูกกล่าวถึงในคำถามและในความคิดเห็น ตั้งแต่รุ่น 15, Ubuntu ก็ใช้ systemd ด้วย

แม้ว่าจะสามารถใช้rcสคริปต์System 5 ภายใต้ systemd แต่สคริปต์ในคำตอบที่นี่มีความน่าเชื่อถือสูงเพื่อพูดอย่างน้อยที่สุด มีผู้ใช้งานคนหนึ่งkillallซึ่งปัญหาการจัดการdæmonนั้นเป็นที่รู้จักกันดี และอื่น ๆ ที่เป็นระเบียบของไฟล์ล็อคง่อนแง่นและ PID ตรรกะไฟล์ไม่มีของที่เป็นจริงที่จำเป็นภายใต้ผู้จัดการบริการตั้งแต่ผู้จัดการบริการตัวเองติดตามกระบวนการภูติ

อย่างที่ฉันได้กล่าวไว้ที่อื่นถ้าคุณเริ่มเรียนรู้สิ่งนี้และอยู่ใน CentOS Linux เวอร์ชัน 7 หรือใหม่กว่าหรือ Ubuntu Linux รุ่น 15 หรือใหม่กว่าอย่าเริ่มต้นด้วยrcสคริปต์System 5 ในตอนแรก เริ่มต้นด้วยไฟล์ systemd unit

เทมเพลตสำหรับบริการ Xvfb หลายบริการ

ง่ายxvfb.serviceไฟล์หน่วย systemd สำหรับ Xvfb สามารถพบได้ที่https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363และhttps://askubuntu.com/a/621256/43344 อย่างไรก็ตามอย่างที่ฉันได้กล่าวไปแล้วคนหลัง ๆ ก็สามารถใช้วิธีการแบ่งอารมณ์:

[Unit]
คำอธิบาย = เซิร์ฟเวอร์เฟรมบัฟเฟอร์เสมือน X สำหรับแสดง% I
หลังจาก = network.target

[บริการ]
ExecStart = / usr / bin / Xvfb% I-screen 0 1280x1024x24

[ติดตั้ง]
WantedBy = multi-user.target

ในฐานะที่เป็นประเทศที่เป็นลายลักษณ์อักษรที่ไม่ใช่ระบบที่ไม่ได้บรรจุแฟ้มหน่วยทั้งระบบ (เมื่อเทียบกับต่อผู้ใช้) บริการนี้จะเข้าสู่การ/etc/systemd/system/xvfb@.serviceของหลักสูตร

การควบคุมบริการ

หนึ่งอินสแตนซ์เทมเพลตลงในบริการที่มีชื่อจริงพร้อมหมายเลขแสดงผลที่ต้องการ สำหรับการแสดงผลจึงมีเป็นตัวอย่างที่เกิดขึ้นจริงบริการชื่อ:99xvfb@:99.service

  • systemctl enable xvfb@:99.serviceตั้งค่าบริการให้กับรถยนต์เริ่มต้นในการบูตด้วย
  • systemctl disable xvfb@:99.serviceยกเลิกการตั้งค่าอัตโนมัติเริ่มต้นให้บริการกับ
  • systemctl start xvfb@:99.serviceเริ่มให้บริการด้วยตนเอง
  • systemctl stop xvfb@:99.serviceหยุดให้บริการกับตนเอง
  • systemctl status xvfb@:99.serviceตรวจสอบสถานะการบริการในปัจจุบันในรายละเอียดกับ

อ่านเพิ่มเติม


ลิงก์สำหรับ "การเพิ่ม xvfb ไปยังบริการของระบบ" นั้นตายแล้ว
Manish

คำถาม SuperUser ที่อ้างอิงนั้นถูกลบโดยอัตโนมัติ โชคดีที่ผู้ถามหลายคนโพสต์มัน ☺
JdeBP

4

นี่เป็นสคริปต์เริ่มต้นที่ดีในการทำสิ่งนี้:

http://onemoretech.wordpress.com/2009/05/27/an-xvfb-init-script/

สคริปต์คือ:

#!/bin/bash
#
# /etc/rc.d/init.d/xvfbd
#
# chkconfig: 345 95 28
# description: Starts/Stops X Virtual Framebuffer server
# processname: Xvfb
#

. /etc/init.d/functions

[ "${NETWORKING}" = "no" ] && exit 0

PROG="/usr/X11R6/bin/Xvfb"
PROG_OPTIONS=":5 -screen 0 640x480x24"
PROG_OUTPUT="/tmp/Xvfb.out"

case "$1" in
    start)
        echo -n "Starting : X Virtual Frame Buffer "
        $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
        disown -ar
        /bin/usleep 500000
        status Xvfb & >/dev/null && echo_success || echo_failure
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
            /bin/touch /var/lock/subsys/Xvfb
            /sbin/pidof -o  %PPID -x Xvfb > /var/run/Xvfb.pid
        fi
        echo
        ;;
    stop)
        echo -n "Shutting down : X Virtual Frame Buffer"
        killproc $PROG
        RETVAL=$?
        [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
 /var/run/Xvfb.pid
        echo
        ;;
    restart|reload)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
    status)
        status Xvfb
        RETVAL=$?
        ;;
    *)
     echo $"Usage: $0 (start|stop|restart|reload|status)"
     exit 1
esac

exit $RETVAL

บันทึกสคริปต์เป็น xvfbd และคัดลอกสคริปต์ไปยัง/etc/init.dจากนั้นเรียกใช้คำสั่งต่อไปนี้:

sudo chkconfig --add xvfbd

1

วิธีที่ง่ายที่สุดคือการเพิ่มบรรทัดต่อไปนี้ลงใน/etc/rc.localไฟล์ (สร้างหนึ่งไฟล์หากไม่มี):

Xvfb :0 -screen 0 1024x768x16 &

เพื่อเริ่ม X framebuffer เสมือนเมื่อบูต


-2

คุณสามารถใช้วิธีที่ง่ายกว่านี้หากคุณต้องการเริ่มหรือเปิดใช้งานบางอย่างในการบูตคอมพิวเตอร์

ใน Redhat / CentOS ให้เพิ่มบรรทัดสคริปต์ของคุณในไฟล์นี้: /etc/rc.d/rc.local


ฉันไม่ได้ลงคะแนนคุณ แต่ฉันคิดว่าสิ่งนี้ใช้ได้เฉพาะกับ System V.
Donato

ฉันลองสิ่งนี้ในระบบ Vanilla CentOS 7 วันนี้ (เพราะฉันขี้เกียจ) และมันใช้งานได้เปิดตัว Xvfb
clusterdude
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.