¿Forma correcta de iniciar xvfb en el inicio en centos?


11

Estoy siguiendo este tutorial , y quiero saber la versión equivalente en centos de este paso específico de 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

¿Cuál es la forma correcta de iniciar xvfb en el inicio en centos?

Respuestas:


12

Utilizo el siguiente guión de inicio para agregar e iniciar xvfb en el arranque, simplemente blat eso en /etc/init.d/ y ejecuto chkconfig xvfb en

   #!/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
no olvide agregar permiso de ejecución a este archivo: chmod + x xvfb
panchicore

2
Aunque su pregunta se planteó para CentOS, también se ha vuelto útil para otras distribuciones. Esto funciona bien en Ubuntu; solo necesitas correr en update-rc.dlugar de chkconfig. Vea esta respuesta para más información sobre update-rc.d.
firmado el

1
La pregunta era sobre cómo hacerlo en CentOS. El CentOS actual usa systemd, y esta respuesta no resuelve la pregunta. La respuesta de JdeBP es más apropiada.
Yoichi

Teniendo en cuenta la pregunta que se hizo hace 6 años, cuando la versión actual de centos no existía (ni systemd iirc). Sin embargo, la solución systemd es mucho mejor y debería ser la opción preferida cuando sea posible.
Tacticus

19

Y ahora, la respuesta del sistema.

Han pasado casi cuatro años desde estas preguntas y respuestas, y el mundo ha cambiado mientras que no lo han hecho. Desde la versión 7, CentOS ha usado systemd. Ubuntu se menciona en la pregunta y en los comentarios. Desde la versión 15, Ubuntu también ha usado systemd.

Aunque uno puede usar rcscripts del Sistema 5 en systemd, los scripts en las respuestas aquí son muy subóptimos, por decir lo menos. Uno lo usa alegremente killall, cuyos problemas para el manejo de demonios son bien conocidos; y el otro es un desorden de archivo de bloqueo desvencijado y lógica de archivo PID, ninguno de los cuales es realmente necesario bajo un administrador de servicios, ya que los mismos administradores de servicios realizan un seguimiento de los procesos de daemon.

Como he dicho en otra parte, si está comenzando a aprender estas cosas y está en CentOS Linux versión 7 o posterior o Ubuntu Linux versión 15 o posterior, no comience con los rcscripts del Sistema 5 en primer lugar. Comience con los archivos de la unidad systemd.

una plantilla para múltiples servicios Xvfb

Se xvfb.servicepueden encontrar archivos de unidad systemd simples para xvfb en https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 y en /ubuntu//a/621256/43344 . Sin embargo, como mencioné en este último, también puede adoptar un enfoque de plantilla:

[Unidad]
Descripción = servidor X del búfer de trama virtual para la visualización% I
Después = network.target

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

[Instalar en pc]
WantedBy = multi-user.target

Como un archivo de unidad escrito localmente, no empaquetado y no del sistema para servicios de todo el sistema (a diferencia de por usuario), esto entra, por /etc/systemd/system/xvfb@.servicesupuesto.

controlar los servicios

Uno crea una instancia de la plantilla, en un servicio con nombre real, con el número de pantalla que se desea. Para la visualización :99, por lo tanto, hay una instancia de servicio real llamada xvfb@:99.service.

  • Configure el servicio para que se inicie automáticamente en bootstrap con systemctl enable xvfb@:99.service.
  • Desarme el inicio automático del servicio con systemctl disable xvfb@:99.service.
  • Inicie el servicio manualmente con systemctl start xvfb@:99.service.
  • Detenga el servicio manualmente con systemctl stop xvfb@:99.service.
  • Inspeccione el estado actual del servicio en detalle con systemctl status xvfb@:99.service.

Otras lecturas


el enlace para "Agregar xvfb a los servicios del sistema" está inactivo.
Manish

La pregunta de Superusuario a la que se hace referencia se ha eliminado automáticamente. Afortunadamente, el interlocutor lo publicó en varias páginas. ☺
JdeBP

4

Aquí hay un buen guión de inicio para lograr esto:

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

El guión es:

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

Guarde el script como xvfbd y cópielo /etc/init.d, luego ejecute el siguiente comando:

sudo chkconfig --add xvfbd

1

La forma más simple es agregar la siguiente línea en el /etc/rc.localarchivo (cree una si no está allí):

Xvfb :0 -screen 0 1024x768x16 &

para iniciar X virtual framebuffer en el arranque.


-2

Puede usar una forma más fácil si solo necesita iniciar o iniciar algo en el arranque de la computadora.

En Redhat / CentOS, agregue su línea de script en este archivo: /etc/rc.d/rc.local


No te rechacé, pero creo que esto solo funcionó para el Sistema V.
Donato

Intenté esto en un sistema CentOS 7 de vainilla hoy (porque soy vago), y funcionó, lanzando Xvfb.
clusterdude
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.