2009-05-07 7 views
17

Estoy ejecutando una aplicación java que crea una visualización de algunas de las cosas que está haciendo, mientras lo hace. Sin embargo, quiero ejecutar esto en un script que no tendrá una pantalla para adjuntar. En el entorno actual, ni siquiera hay una variable de entorno DISPLAY establecida. Intenté simplemente configurar mi PANTALLA en: 0.0. Pero eso no existe. Realmente no me importa la pantalla. Solo quiero que la aplicación procese los archivos en silencio.A/dev/null Equivorent para DISPLAY cuando la pantalla es solo ruido

Como no puedo apagar la pantalla (no es mi aplicación), me queda tratar de evitar la necesidad de mostrarla.

¿Hay un agujero negro al que pueda enviar la PANTALLA? un equivalente a/dev/null?

He buscado un poco en la web, pero las palabras que se me ocurrió usar: "mostrar" "nulo", "ignorar", etc. son genéricas para darme una respuesta.

Este es el medio de un script más grande, por lo que quiero que el resto de la salida esté disponible.

Respuesta

13

Hay un servidor X sin cabeza llamado Xvfb. Básicamente es lo que necesita, ya que acepta clientes X pero básicamente no hace nada con los datos de ellos. Desde esa página vinculada (ligeramente parafraseada):

Xvfb, el X framebuffer virtual, es un servidor de pantalla que implementa el protocolo de servidor de pantalla X11.

A diferencia de otros servidores de pantalla, Xvfb realiza todas las operaciones gráficas en la memoria sin mostrar ninguna salida de pantalla.

Desde el punto de vista del cliente, actúa exactamente como cualquier otro servidor de visualización X, atendiendo solicitudes y enviando eventos y errores según corresponda. Sin embargo, no se muestra ninguna salida.

Este servidor virtual no requiere que la computadora en la que se ejecuta tenga una pantalla o cualquier dispositivo de entrada. Solo se necesita una capa de red.

Si no puede encontrar eso, entonces otra posibilidad sería usar una PC de repuesto con una instalación completa de CygWin. CygWin viene con un servidor X completo al que puedes conectar tu aplicación (y simplemente ignorarlo). Incluso podría configurarlo como la pantalla corporativa/dev/null.

Pero primero analizaría Xvfb.

+0

Esto funcionó muy bien para mí. Es Xvfb. La caja no es mía, pero el administrador fue lo suficientemente bueno para ponerla en la caja. – Marc

+0

¡Gracias! Siempre he querido poder ejecutar gschem para producir archivos PDF y PNG de mis esquemas en mi máquina de compilación, pero no ha funcionado sin X (que es un problema en el trasero). ¡Ahora con Xvfb hay un servidor X para que se conecte! – KeyserSoze

0

¿Se puede ejecutar una máquina virtual en la máquina de destino? Entonces podrías configurar tu PANTALLA para eso. O podría probar vnc (actualmente en una máquina que no permite esto o lo probaría ...).

1

Puede usar Xvfb, como se indicó anteriormente. De esta forma, nunca verás la salida (aunque puedes usar una herramienta para hacer capturas de pantalla).

http://en.wikipedia.org/wiki/Xvfb http://packages.debian.org/sid/xvfb

O usted podría configurar un servidor VNC. Bajo Linux, un servidor VNC se implementa como un servidor X especial al que se puede acceder a través de VNC, en lugar de mostrarlo en un monitor local. Eso le da un servidor X sin cabeza, con la ventaja añadida de que puede conectarse a través de VNC en caso de que haga necesite ver lo que está pasando.

http://www.tightvnc.com/vncserver.1.html

vncserver es un guión envoltorio agradable para (apretado) VNC, lo que hace a partir de un servidor VNC una brisa. La mayoría de las distribuciones deberían instalarlo por defecto.

2

Si se trata de un programa Java, puede usar el modo sin cabeza para ejecutar la aplicación.

intenta ejecutar con -Djava.awt.headless=true parámetro, como este si es un archivo jar:

java -Djava.awt.headless=true -jar jarfile.jar

More about headless mode...

+0

No tuve la oportunidad de hacer que este enfoque funcionara. Lo intenté, pero recibí una excepción sin cabeza todavía. Sin duda, si esta pequeña aplicación fue escrita correctamente, podría haber usado esta bandera. – Marc

+0

@Marc: 'java.awt.headless = true' simplemente le dice a la JVM que no hay ninguna pantalla disponible. Algunas API de Java pueden manejar esto y seguir trabajando, otras no, y lanzar 'HeadlessException'. Entonces, si funciona depende de lo que haga el programa. Consulte [Uso del modo sin cabeza en la plataforma Java SE] (http://www.oracle.com/technetwork/articles/javase/headless-136834.html) (por Artem Ananiev y Alla Redko, junio de 2006) para obtener más información. – sleske

0

Respuesta corta, utilice:

xvfb-run JAVA_COMMAND_LINE 

Dependiendo de la versión y sabor de Linux, puede haber one line you have to change en xvfb-run para que todo se ejecute.

Cuestiones relacionadas