Modo corretto di avviare xvfb all'avvio su centos?


11

Sto seguendo questo tutorial e voglio conoscere la versione centos equivalente di questo passaggio specifico di 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

Qual è il modo corretto di avviare xvfb all'avvio su centos?

Risposte:


12

Uso il seguente script di init per aggiungere e avviare xvfb all'avvio, semplicemente cancellarlo in /etc/init.d/ ed eseguire chkconfig xvfb su

   #!/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
non dimenticare di aggiungere il permesso di esecuzione a questo file: chmod + x xvfb
panchicore

2
Anche se la sua domanda è stata posta per CentOS, è diventata utile anche per altre distribuzioni. Questo funziona bene su Ubuntu; devi solo correre update-rc.dinvece di chkconfig. Vedi questa risposta per maggiori informazioni su update-rc.d.
firmato il

1
La domanda era su come farlo su CentOS. L'attuale CentOS utilizza systemd e questa risposta non risolve la domanda. La risposta di JdeBP è più appropriata.
Yoichi,

Considerando la domanda è stata posta 6 anni fa quando l'attuale versione di centos non esisteva (né Systemd Iirc). La soluzione systemd è però molto più bella e dovrebbe essere l'opzione preferita quando possibile.
Tattico,

19

E ora, la risposta di systemd.

Sono passati quasi quattro anni da queste domande e risposte, e il mondo è cambiato mentre non lo sono state. Dalla versione 7, CentOS utilizza systemd. Ubuntu è menzionato nella domanda e nei commenti. Dalla versione 15, Ubuntu ha usato anche systemd.

Sebbene uno possa usare gli rcscript System 5 in systemd, gli script nelle risposte qui sono altamente non ottimali, per non dire altro. Si usa killallbeato, i cui problemi per la gestione del demone sono ben noti; e l'altro è un casino di file di blocco traballanti e logica di file PID, nessuno dei quali è effettivamente necessario sotto un gestore di servizi, poiché i gestori di servizi stessi tengono traccia dei processi di demonio.

Come ho già detto altrove, se stai iniziando a imparare queste cose e sei su CentOS Linux versione 7 o successive o Ubuntu Linux versione 15 o successive, non iniziare con gli rcscript System 5 in primo luogo. Inizia con i file di unità di sistema.

un modello per più servizi Xvfb

xvfb.serviceFile di unità di sistema semplici per xvfb sono disponibili su https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 e su /ubuntu//a/621256/43344 . Tuttavia, come ho accennato in quest'ultima, si può anche adottare un approccio basato su modelli:

[Unità]
Descrizione = server X frame buffer virtuale per display% I
Dopo = network.target

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

[Installare]
WantedBy = multi-user.target

In quanto file unitario, non di sistema e non impacchettato, scritto localmente per i servizi a livello di sistema (anziché per utente), ciò vale /etc/systemd/system/xvfb@.servicenaturalmente.

controllo dei servizi

Si crea un'istanza del modello, in un vero servizio denominato, con il numero visualizzato desiderato. Per la visualizzazione :99, pertanto, esiste un'istanza di servizio effettiva denominata xvfb@:99.service.

  • Impostare il servizio per l'avvio automatico sul bootstrap con systemctl enable xvfb@:99.service.
  • Disattivare l'avvio automatico del servizio con systemctl disable xvfb@:99.service.
  • Avviare il servizio manualmente con systemctl start xvfb@:99.service.
  • Interrompere il servizio manualmente con systemctl stop xvfb@:99.service.
  • Controllare lo stato del servizio corrente in dettaglio con systemctl status xvfb@:99.service.

Ulteriori letture


il link per "Aggiungere xvfb ai servizi di sistema" è morto.
Manish,

La domanda di SuperUser a cui si fa riferimento è stata automaticamente cancellata. Fortunatamente, l'interrogante lo ha pubblicato più volte. ☺
JdeBP,

4

Ecco un bel script di init per realizzare questo:

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

Lo 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

Salvare lo script come xvfbd e copiarlo in /etc/init.d, quindi eseguire il comando seguente:

sudo chkconfig --add xvfbd

1

Il modo più semplice è aggiungere la seguente riga nel /etc/rc.localfile (crearne una se non è presente):

Xvfb :0 -screen 0 1024x768x16 &

per avviare X framebuffer virtuale all'avvio.


-2

Puoi usare un modo più semplice se devi solo avviare o avviare qualcosa all'avvio del computer.

Su Redhat / CentOS, aggiungi la tua riga di script su questo file: /etc/rc.d/rc.local


Non ti ho sottovalutato, ma penso che abbia funzionato solo per System V.
Donato,

Ho provato questo su un sistema CentOS 7 vanilla oggi (perché sono pigro), e ha funzionato, lanciando Xvfb.
clusterdude,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.