Redirecionando a saída X

3

Eu tenho um pequeno programa que verifica alguns elementos de um serviço da web. O programa mostra a saída gráfica e exibe os resultados da linha de comando também.

Eu tenho tentado automatizar este programa para ser executado periodicamente em um servidor no meu escritório. O problema é que só funciona quando tenho o X ativado - diretamente no servidor ou via SSH -X .

Seguindo o Google, eu tentei o Xvfb, o que me deu uma mensagem de erro bastante críptica:

Xvfb :1 -screen 0 1600x1200x32

Fatal server error:
Server is already active for display 1
        If this server is no longer running, remove /tmp/.X1-lock
        and start again.

Alguma idéia de como executá-lo? Na verdade, estou procurando o equivalente X de &>/dev/null ...

    
por Adam Matan 22.10.2009 / 15:26

4 respostas

1

Você pode criar um display VNC. O VNC destina-se a fazer um ambiente de trabalho remoto: no servidor, cria um monitor virtual X que renderiza na memória (não precisa sequer de uma placa de vídeo) e pode ligá-lo remotamente utilizando um cliente VNC.

O pacote do Ubuntu é chamado vnc4server no universo. Você pode iniciar uma exibição usando o seguinte comando:

vnc4server :10

Quando você o executa pela primeira vez, ele pede uma senha, mas como você não precisa se conectar remotamente ao display, pode digitar qualquer coisa. Note que isto abre uma porta na sua máquina (5910 neste exemplo) que pode ser usada para conectar a este novo display X, seria sensato fazer um firewall.

Agora, execute o script cron com DISPLAY=:10.0 em seu ambiente e ele deve usar a exibição do VNC.

    
por 01.12.2009 / 00:39
3

No Ubuntu, echo $DISPLAY provavelmente gera :0.0 , informando que sua sessão do Ubuntu está usando o display 0. Isso deve deixar qualquer outro número para você usar. Então, :1 deveria ter sido bom, a menos que ainda haja algum Xvfb correndo de um teste anterior? (Ou, como os estados de erro: a menos que algum arquivo temporário /tmp/.X1-lock não tenha sido removido depois de algum teste anterior.) Mas: se você não consegue descobrir o que está usando o display 1, qualquer outro número maior faça também.

Um teste rápido em um novo Ubuntu 9.10:

# Install once, if required:
sudo apt-get install xvfb
sudo apt-get install imagemagick

# Run Xvfb in the background, on display 1
Xvfb :1 &

# Run xclock in the background, on display 1
DISPLAY=:1 xclock &

# Make a screen capture of the window with name Xclock
DISPLAY=:1 import -window Xclock current-time.png

# Stop xclock
kill 'pidof xclock'

# Stop Xvfb
kill 'pidof Xvfb'

Isso deve criar um arquivo current-time.png mostrando a hora atual. Isso funciona para você?

    
por 06.11.2009 / 21:11
3

Eu tive um problema semelhante e, enquanto a resposta de Alex Morega é boa, gostei mais desta:

Depois de instalar o xvfb, você pode resolver isso em uma única linha: "xvfb-run < command >", onde < command > é o seu programa.

Fonte

    
por 02.10.2012 / 00:00
0

Parece que seu servidor está executando no nível de execução 5 (X11 ativo). O que você pode querer é um runlevel sem isso, então tente 3 para executar o Xvfb? (supondo que você não execute o Ubuntu, caso em que isso pode ficar feio)

    
por 22.10.2009 / 15:40