Cách thích hợp để bắt đầu xvfb khi khởi động trên centos?


10

Tôi đang theo dõi hướng dẫn này và tôi muốn biết phiên bản centos tương đương của bước cụ thể trên Ubuntu này:

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

Cách thích hợp để bắt đầu xvfb khi khởi động trên centos là gì?

Câu trả lời:


12

Tôi sử dụng đoạn script init sau để thêm và khởi động xvfb khi khởi động chỉ cần làm điều đó trong /etc/init.d/ và chạy chkconfig xvfb trên

   #!/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
đừng quên thêm quyền thực thi vào tệp này: chmod + x xvfb
panchicore

2
Mặc dù câu hỏi của anh ấy được đặt ra cho CentOS, nó cũng trở nên hữu ích cho các bản phân phối khác. Điều này hoạt động tốt trên Ubuntu; bạn chỉ cần chạy update-rc.d thay vì chkconfig. Xem câu trả lời này để biết thêm thông tin về update-rc.d.
sigpwned

1
Câu hỏi là về cách thực hiện trên CentOS. CentOS hiện tại sử dụng systemd và câu trả lời này không giải quyết được câu hỏi. Câu trả lời từ JdeBP là phù hợp hơn.
Yoichi

Xem xét câu hỏi đã được hỏi 6 năm trước khi phiên bản hiện tại của centos không tồn tại (cũng không có systemd iirc). Giải pháp systemd mặc dù đẹp hơn nhiều và nên là lựa chọn ưu tiên khi có thể.
Tacticus

18

Và bây giờ, câu trả lời systemd.

Đã gần bốn năm kể từ khi những câu hỏi và câu trả lời này, và thế giới đã thay đổi trong khi họ không có. Kể từ phiên bản 7, CentOS đã sử dụng systemd. Ubuntu được đề cập trong câu hỏi và trong các ý kiến. Kể từ phiên bản 15, Ubuntu cũng đã sử dụng systemd.

Mặc dù người ta có thể sử dụng Hệ thống 5 rc kịch bản theo systemd, các kịch bản trong câu trả lời ở đây rất tối ưu, để nói rằng ít nhất. Một cách sử dụng hoàn toàn killall, có vấn đề về quản lý dmon được biết đến; và cái còn lại là một mớ hỗn độn của tệp khóa ọp ẹp và logic tệp PID không ai trong đó thực sự cần thiết theo người quản lý dịch vụ, vì người quản lý dịch vụ chính họ theo dõi các quá trình dmon.

Như tôi đã nói ở nơi khác, nếu bạn bắt đầu tìm hiểu nội dung này và trên CentOS Linux phiên bản 7 trở lên hoặc Ubuntu Linux phiên bản 15 trở lên, đừng bắt đầu với Hệ thống 5 rc kịch bản ở nơi đầu tiên. Bắt đầu với các tập tin đơn vị systemd.

một mẫu cho nhiều dịch vụ Xvfb

Đơn giản xvfb.service Tập tin đơn vị systemd cho xvfb có thể được tìm thấy tại https://www.centos.org/forums/viewtopic.php?f=48& và tại https://askubfox.com/a/621256/43344 . Tuy nhiên, như tôi đã đề cập ở phần sau, người ta cũng có thể thực hiện một cách tiếp cận templatized:

[Unit]
Description=virtual frame buffer X server for display %I
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb %I -screen 0 1280x1024x24

[Install]
WantedBy=multi-user.target

Là một tệp đơn vị được viết cục bộ, không được đóng gói, cho các dịch vụ trên toàn hệ thống (trái với mỗi người dùng) /etc/systemd/system/xvfb@.service tất nhiên.

kiểm soát dịch vụ

Người ta bắt đầu mẫu, vào một dịch vụ có tên thực tế, với số hiển thị mong muốn. Để trưng bày :99, do đó, có một ví dụ dịch vụ thực tế có tên xvfb@:99.service.

  • Đặt dịch vụ thành tự động khởi động trên bootstrap với systemctl enable xvfb@:99.service .
  • Bỏ cài đặt tự động khởi động dịch vụ với systemctl disable xvfb@:99.service .
  • Bắt đầu dịch vụ bằng tay với systemctl start xvfb@:99.service .
  • Dừng dịch vụ theo cách thủ công với systemctl stop xvfb@:99.service .
  • Kiểm tra chi tiết tình trạng dịch vụ hiện tại với systemctl status xvfb@:99.service .

đọc thêm


liên kết "Thêm xvfb vào dịch vụ hệ thống" đã chết.
Manish

Câu hỏi SuperUser được tham chiếu đã bị xóa tự động. May mắn thay, người hỏi đa đăng nó. ☺
JdeBP

4

Đây là một kịch bản init đẹp để thực hiện điều này:

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

Kịch bản là:

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

Lưu tập lệnh dưới dạng xvfbd và sao chép tập lệnh vào /etc/init.d, sau đó chạy lệnh sau:

sudo chkconfig --add xvfbd

1

Cách đơn giản nhất là thêm dòng sau vào /etc/rc.local tập tin (tạo một nếu nó không có ở đó):

Xvfb :0 -screen 0 1024x768x16 &

để khởi động X framebuffer ảo khi khởi động.


-2

Bạn có thể sử dụng một cách dễ dàng hơn nếu bạn chỉ cần khởi động hoặc khởi chạy một cái gì đó trên máy tính khởi động.

Trên Redhat / CentOS, thêm dòng tập lệnh của bạn vào tệp này: /etc/rc.d/rc.local


Tôi không đánh giá thấp bạn, nhưng tôi nghĩ rằng điều này chỉ hoạt động cho Hệ thống V.
Donato

Tôi đã thử điều này trên hệ thống vanilla CentOS 7 ngày hôm nay (vì tôi lười biếng) và nó đã hoạt động, khởi chạy Xvfb.
clusterdude
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.