10

Я следую этому уроку и хочу узнать эквивалентную centos-версию этого специфичного для Ubuntu шага:

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?

5 ответов5

18

А теперь системный ответ.

После этих вопросов и ответов прошло почти четыре года, и мир изменился, хотя они не изменились. Начиная с версии 7, CentOS использует systemd. Ubuntu упоминается в вопросе и в комментариях. Начиная с версии 15, Ubuntu также использует systemd.

Хотя можно использовать сценарии System 5 rc в systemd, сценарии в ответах здесь, по меньшей мере, крайне неоптимальны. Один беспечно использует killall , чьи проблемы с управлением демонами хорошо известны; а другой - путаница файла шаткой блокировки и логики PID-файла, ни одна из которых на самом деле не нужна в диспетчере сервисов, поскольку менеджеры сервисов сами отслеживают процессы демона.

Как я уже говорил в другом месте, если вы начинаете изучать этот материал и используете CentOS Linux версии 7 или новее или Ubuntu Linux версии 15 или новее, не начинайте со сценариев System 5 rc . Начните с файловых модулей systemd.

шаблон для нескольких сервисов Xvfb

Простые файлы модулей xvfb.service systemd для xvfb можно найти по адресу https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 и по адресу https://askubuntu.com/a/621256/. 43344 . Однако, как я уже упоминал в последнем, можно также использовать шаблонный подход:

[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

Как локально написанный, не системный, неупакованный, единичный файл для общесистемных (в отличие от пользователя) услуг, он, конечно, помещается в /etc/systemd/system/xvfb@.service .

контроль услуг

Один экземпляр шаблона, в фактическую именованную услугу, с желаемым номером дисплея. Поэтому для display :99 существует фактический экземпляр службы с именем xvfb@: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 .

дальнейшее чтение

12

Я использую следующий сценарий инициализации, чтобы добавить и запустить xvfb при загрузке, просто распаковать его в /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
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 виртуальный кадровый буфер при загрузке.

-2

Вы можете использовать более простой способ, если вам просто нужно запустить или запустить что-то при загрузке компьютера.

В Redhat/CentOS добавьте строку вашего скрипта в этот файл: /etc/rc.d/rc.local

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .