Правильный способ запуска xvfb при запуске на centos?


11

Я следую этому уроку и хочу узнать эквивалентную 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?

Ответы:


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

1
не забудьте добавить разрешение на выполнение этого файла: chmod + x xvfb
panchicore

2
Несмотря на то, что его вопрос был задан для CentOS, он стал полезным и для других дистрибутивов. Это хорошо работает на Ubuntu; вам просто нужно бежать update-rc.dвместо chkconfig. Смотрите этот ответ для получения дополнительной информации о update-rc.d.
13

1
Вопрос был о том, как это сделать на CentOS. Текущий CentOS использует systemd, и этот ответ не решает вопрос. Ответ от JdeBP более уместен.
Йоичи

Учитывая, что вопрос был задан 6 лет назад, когда существующей версии centos не существовало (как и systemd iirc). Решение systemd, тем не менее, намного лучше и должно быть предпочтительным вариантом, когда это возможно.
Tacticus

19

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

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

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

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

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

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

[Ед. изм]
Описание = виртуальный фрейм-буфер X-сервер для отображения% I
После того, как = network.target

[Обслуживание]
ExecStart = / usr / bin / Xvfb% I-экран 0 1280x1024x24

[Установить]
WantedBy = multi-user.target

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

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

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

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


ссылка «Добавление xvfb к системным службам» не работает.
Маниш

Упомянутый выше вопрос 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 виртуальный кадровый буфер при загрузке.


-2

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

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


Я не понизил вас, но думаю, что это сработало только для System V.
Донато

Я попробовал это сегодня на ванильной системе CentOS 7 (потому что я ленив), и это сработало, запустив Xvfb.
clusterdude
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.