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


11

Я слідую за цим підручником , і хочу знати еквівалентну цент-версію цього кроку, характерного для 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

Я використовую наступний скрипт init, щоб додати і запустити xvfb під час завантаження просто 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.
Підписався

1
Питання полягало в тому, як це зробити на CentOS. Поточний CentOS використовує systemd, і ця відповідь не вирішує питання. Відповідь JdeBP є більш доречною.
Йоїчі

З огляду на це питання було задано 6 років тому, коли нинішня версія centos не існувала (і не systemd iirc). Хоча системне рішення набагато приємніше і, коли це можливо, має бути кращим варіантом.
Тактик

19

А тепер системна відповідь.

Минуло майже чотири роки, як минули ці запитання та відповіді, і світ змінився, поки їх не було. З 7 версії CentOS використовує systemd. Ubuntu згадується у запитанні та коментарях. Починаючи з версії 15, Ubuntu також використовує systemd.

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

Як я вже казав деінде, якщо ви починаєте вивчати цей матеріал і перебуваєте у CentOS Linux версії 7 чи пізнішої версії або Ubuntu Linux версії 15 чи пізнішої версії, не починайте rcспочатку сценарії System 5 . Почніть з файлів системних одиниць.

шаблон для декількох служб Xvfb

Прості xvfb.serviceфайли системного блоку для 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 = багатокористувач

Оскільки, звичайно, написаний на локальному рівні, несистемний непакетний єдиний файл для загальносистемних послуг (на відміну від користувачів кожного користувача), це, /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

Ось приємний сценарій init для цього:

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


Я не відповідав вам, але думаю, що це працювало лише для Системи V.
Donato

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