Cómo configurar DISPLAY para ejecutar Java JAR Swing Executable desde Init.d

Necesito ejecutar un ejecutable Java JAR Swing GUI en una distribución Debian Wheezy Debian dentro de un dispositivo ARM durante el time de arranque.

Lo sigo como reference con myapp , myapp-start.sh y myapp-stop.sh , y esto con posibles soluciones (y otras más bastante similares). Pero aquí no se hace reference a la variable DISPLAY.

He revisado muchas alternativas, con

Opciones probadas y no aplicables :

  • /usr/bin/java -jar -Djava.awt.headless=true $myapp.jar
  • unset DISPLAY (dentro de myapp-start.sh , arriba de la frase java -jar )

Errores:

  • java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.

Opciones myapp-start.sh (dentro de myapp-start.sh , arriba de la frase java -jar ):

  • export DISPLAY=:0
  • export DISPLAY=:0.0
  • export DISPLAY=localhost:0.0

Errores:

  • Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable
  • Client is not authorized to connect to ServerException in thread stack

Opciones no probadas

  • ssh - X localhost : ¿cómo debo hacer un ssh al server X11 ? ¿Dónde debo ejecutar eso bajo un process de init.d ?. ¿Es esa la solución estándar para ejecutar un progtwig Java con GUI ?.
  • USER=root dentro de myapp-start.sh : el init.d detiene y solicita una contraseña. Muy inteligente, el process no comienza.
  • ¿ myapp-start.sh de las opciones anteriores debe includese en otro lugar que no sea el código myapp-start.sh ? ¿Dónde?

¿No debería ser más simple ejecutar una sola pieza de código al inicio ?.

Cualquier otra opción, será apreciada.

EDITAR 2015-04-12

Nuevas opciones

En las siguientes opciones, agrego un código dentro de esta location /etc/xdg/lxsession/LXDE-pi/autostart para su ejecución después de que los loggings pi usuario pnetworkingeterminados y X11 se inicien (consulte la sugerencia jlliagre ):

  • usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar (sin ampersand)
  • export DISPLAY=:0.0 usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar (sin ampersand)
  • /bin/bash /home/pi/Embedded/bin/powerbarstart.sh (sin ampersand)

Todos ellos inician la aplicación en segundo plano, es decir, se reproduce la música de background y los charts están disponibles solo a través de un VNC en :0 (usando TightVNC ). Como efecto secundario, el protector de pantalla se activa y la aplicación se congela, cada 60 segundos aproximadamente. Tenga en count que esta misma location también se usa para desactivar el protector de pantalla.

¿Hay una opción faltante, o símbolo, no estoy incluyendo ?.

Solución El dispositivo se configuró como :1.0 lugar de :0.0 . Cambiar esto en myapp-start.sh resolvió el problema.

Si su aplicación no es interactiva, puede iniciar un server virtual X11 y configurar la variable DISPLAY para que la use su aplicación.

Los posibles serveres X11 que se pueden usar de esa manera son:

  • Xvfb
  • Xdummy
  • Xvnc

Este último le permite conectarse más tarde para ver e interactuar con la pantalla con un cliente VNC (vncviewer).

Si Raspberry pi (o similar) está configurado para iniciar session en el usuario pi en un entorno gráfico, puede iniciar su aplicación como el usuario pi y usar la pantalla :0 . Tenga en count que debe asegurarse de que X11 haya completado su inicio antes de hacerlo.

Editar: parece que su configuration está iniciando un server Xvnc primero, ya que el usuario pi está lanzando el server X principal del búfer de cuadros como usuario root . En ese caso, como descubrió, su aplicación debe iniciarse como root y usar :1 como pantalla.

Alternativamente, si lo que realmente desea es no iniciar su aplicación una vez en el momento del arranque, pero siempre que un usuario (típicamente pi ) inicie session en un entorno gráfico, agréguelo al file rc aplicable a este entorno gráfico. Por ejemplo /etc/xdg/lxsession/LXDE-pi/autostart .