Como eu inicio o Xvfb na inicialização do Debian?

9

Eu tenho um servidor web do Debian que estou usando para captura de tela ocasional via Selenum e Python.

Eu uso o Xvfb como um servidor X virtual para o Firefox rodar quando estiver sendo controlado pelo Selenium. Dado que eu (acho) tenho que começar isso usando sudo , eu não acho que será viável iniciá-lo a partir do Python a cada vez (veja my Stack Overflow question ), então achei que poderia ter correndo o tempo todo.

Eu atualmente inicio assim na linha de comando:

sudo Xvfb :99 -nolisten tcp -fbdir /var/run

Qual método devo usar para fazer isso automaticamente na inicialização? Devo usar cron , como sugerido aqui ?

    
por Paul D. Waite 01.04.2011 / 19:34

3 respostas

6

No debian, você pode adicionar o comando Xvfb a /etc/rc.local . Se o Xvfb não se destacar em segundo plano, use um & no final do comando.

O uso do cron também funcionaria, embora os scripts de inicialização ofereçam mais controle sobre quando a seqüência de inicialização será executada e a maneira tradicional de iniciar os serviços.

    
por 01.04.2011 / 21:12
4

Sua premissa é inválida: não há razão para executar o Xvfb como root. Seu servidor X usual só precisa ser executado como root (em muitos, mas não em todos os unices) apenas para poder acessar o hardware de vídeo; isso não é um problema para o Xvfb por definição.

Se você deseja executar o Xvfb na inicialização, você pode usar o cron com @reboot substituindo os cinco campos de data e hora. Você pode fazer isso no crontab de qualquer usuário, não apenas no root. Mas eu não vejo o ponto. Seus scripts seriam mais robustos se você iniciasse o Xvfb quando necessário, exatamente como você planejou originalmente.

    
por 01.04.2011 / 21:23
4

Como @Gilles sugeriu, é mais adequado executar sob demanda, especialmente quando você o usa para Teste de selênio. Aqui estão exemplos de comandos do shell:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

A verificação da exibição usando xdpyinfo antes fará com que você não execute o framebuffer virtual duas vezes.

Se você realmente precisa iniciá-lo na inicialização, você pode tentar o seguinte script init.d :

#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

Fonte: dloman / xvfb no GitHub (bifurcado de: jterrace/xvfb )

Salve-o como /etc/init.d/xvfb e torne-o executável e inicie-o como:

/etc/init.d/xvfb start

Para ser executado automaticamente na inicialização, execute:

sudo update-rc.d xvfb defaults

Para removê-lo da execução automática, execute:

sudo update-rc.d -f xvfb remove

Adicione também ao arquivo environment a ser reconhecido pelos programas X, por exemplo:

echo DISPLAY=":1" | sudo tee -a /etc/environment

Aqui está a versão para a versão do systemd: dloman / xvfb.service .

    
por 24.07.2016 / 01:38