Une bonne façon de démarrer xvfb au démarrage sur centos?


11

Je suis en train de suivre ce tutoriel , et je veux connaître la version centos équivalente de cette étape spécifique à 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

Quelle est la bonne façon de démarrer xvfb au démarrage sur centos?

Réponses:


12

J'utilise le script d'initialisation suivant pour ajouter et démarrer xvfb au démarrage, juste blat que dans /etc/init.d/ et exécuter chkconfig xvfb sur

   #!/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
n'oubliez pas ajouter la permission d'exécution à ce fichier: chmod + x xvfb
panchicore

2
Même si sa question a été posée pour CentOS, elle est également devenue utile pour d'autres distributions. Cela fonctionne bien sur Ubuntu; vous avez juste besoin de courir update-rc.dau lieu de chkconfig. Voir cette réponse pour plus d'informations sur update-rc.d.
sigpwned

1
La question était de savoir comment le faire sur CentOS. Le CentOS actuel utilise systemd, et cette réponse ne résout pas la question. La réponse de JdeBP est plus appropriée.
Yoichi

Considérant que la question a été posée il y a 6 ans lorsque la version actuelle de centos n'existait pas (ni systemd iirc). La solution systemd est cependant beaucoup plus agréable et devrait être l'option préférée lorsque cela est possible.
Tacticus

19

Et maintenant, la réponse systemd.

Cela fait près de quatre ans depuis ces questions et réponses, et le monde a changé alors qu'ils ne l'ont pas fait. Depuis la version 7, CentOS utilise systemd. Ubuntu est mentionné dans la question et dans les commentaires. Depuis la version 15, Ubuntu utilise également systemd.

Bien que l'on puisse utiliser des rcscripts System 5 sous systemd, les scripts dans les réponses ici sont pour le moins très sous-optimaux. On utilise allègrement killall, dont les problèmes de gestion des démons sont bien connus; et l'autre est un désordre de fichier de verrouillage branlant et de logique de fichier PID dont aucun n'est réellement nécessaire sous un gestionnaire de services, car les gestionnaires de services eux-mêmes gardent une trace des processus dæmon.

Comme je l'ai dit ailleurs, si vous commencez à apprendre ce genre de choses et que vous utilisez CentOS Linux version 7 ou ultérieure ou Ubuntu Linux version 15 ou ultérieure, ne commencez pas par les rcscripts System 5 en premier lieu. Commencez par les fichiers d'unité systemd.

un modèle pour plusieurs services Xvfb

Les xvfb.servicefichiers d'unité systemd simples pour xvfb peuvent être trouvés sur https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 et sur /ubuntu//a/621256/43344 . Cependant, comme je l'ai mentionné lors de cette dernière, on peut également adopter une approche modélisée:

[Unité]
Description = serveur X de tampon de trame virtuelle pour l'affichage% I
Après = network.target

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

[Installer]
WantedBy = multi-user.target

En tant que fichier d'unité écrit localement, non système et non empaqueté pour les services à l'échelle du système (par opposition aux services par utilisateur), cela va /etc/systemd/system/xvfb@.servicebien sûr.

contrôler les services

On instancie le modèle, dans un service nommé réel, avec le numéro d'affichage souhaité. Pour l'affichage :99, il existe donc une instance de service réelle nommée xvfb@:99.service.

  • Définissez le service pour qu'il démarre automatiquement au démarrage avec systemctl enable xvfb@:99.service.
  • Désactivez le démarrage automatique du service avec systemctl disable xvfb@:99.service.
  • Démarrez le service manuellement avec systemctl start xvfb@:99.service.
  • Arrêtez le service manuellement avec systemctl stop xvfb@:99.service.
  • Inspectez en détail l'état actuel du service avec systemctl status xvfb@:99.service.

Lectures complémentaires


le lien pour "Ajouter xvfb aux services système" est mort.
Manish

La question SuperUser référencée a depuis été supprimée automatiquement. Heureusement, le questionneur l'a posté plusieurs fois. ☺
JdeBP

4

Voici un joli script d'init pour accomplir cela:

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

Le script est:

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

Enregistrez le script sous xvfbd et copiez le script dans /etc/init.d, puis exécutez la commande suivante:

sudo chkconfig --add xvfbd

1

La façon la plus simple consiste à ajouter la ligne suivante dans le /etc/rc.localfichier (en créer une si elle n'est pas là):

Xvfb :0 -screen 0 1024x768x16 &

pour démarrer X framebuffer virtuel au démarrage.


-2

Vous pouvez utiliser un moyen plus facile si vous avez juste besoin de démarrer ou de lancer quelque chose au démarrage de l'ordinateur.

Sur Redhat / CentOS, ajoutez votre ligne de script sur ce fichier: /etc/rc.d/rc.local


Je ne vous ai pas downvote, mais je pense que cela n'a fonctionné que pour System V.
Donato

J'ai essayé cela sur un système CentOS 7 vanilla aujourd'hui (parce que je suis paresseux), et cela a fonctionné, en lançant Xvfb.
clusterdude
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.