Как настроить DISPLAY для запуска Java JAR Swing Executable из Init.d

Мне нужно запустить исполняемый файл Java JAR Swing GUI в дистрибутиве Raspbian Wheezy Debian внутри устройства ARM во время загрузки.

Я следую этому как ссылка с myapp , myapp-start.sh и myapp-stop.sh , и это с возможными решениями (и другими более похожими). Но здесь нет ссылки на переменную DISPLAY.

Я проверил множество альтернатив, с

Пробовал и не применимо Опции :

  • /usr/bin/java -jar -Djava.awt.headless=true $myapp.jar
  • unset DISPLAY (внутри myapp-start.sh , выше предложения java -jar )

Ошибки:

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

myapp-start.sh варианты (внутри myapp-start.sh , над предложением java -jar ):

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

Ошибки:

  • 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

Неисправленные варианты

  • ssh - X localhost : Как мне сделать ssh на сервере X11 ? Где я должен выполнить это в процессе init.d ?. Это стандартное решение для запуска программы Java с графическим интерфейсом ?.
  • USER=root внутри myapp-start.sh : myapp-start.sh останавливается и запрашивает пароль. Такой умный, процесс не начинается.
  • Если какой-либо из вышеперечисленных вариантов должен быть включен в другое место, кроме кода myapp-start.sh ? Где?

Не должно быть проще запускать один кусок кода при запуске ?.

Любой другой вариант будет оценен.

EDIT 2015-04-12

Новые параметры

В следующих вариантах я добавляю код внутри этого местоположения /etc/xdg/lxsession/LXDE-pi/autostart для выполнения после пользовательских журналов pi и запуска X11 (см. Предложение jlliagre ):

  • usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar (без амперсанда)
  • export DISPLAY=:0.0 usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar (без амперсанда)
  • /bin/bash /home/pi/Embedded/bin/powerbarstart.sh (без амперсанда)

Все они запускают приложение в фоновом режиме, то есть воспроизводится фоновая музыка, а графики доступны только через VNC по адресу :0 (с использованием TightVNC ). В качестве побочного эффекта заставка активируется, и приложение замерзает каждые 60 секунд. Обратите внимание, что это же место также используется для отключения экрана.

Есть ли отсутствующий вариант, или символ, я не включаю ?.

Решение Устройство было настроено как :1.0 вместо :0.0 . Изменение этого на myapp-start.sh решило проблему.

  • Уникальная идентификация Java-процессов с тем же именем
  • Как установить Apache Tomcat 8 на centos 7?
  • Linux работает медленно с 0 swap left
  • Java на FreeBSD
  • Аутентификация на основе ключей от PyCharm / JSCH до OpenBSD не выполняется
  • На Debian, как мне создать скрипт, который будет запускать программу Java после ее остановки или сбоя?
  • Tomcat не будет использовать setenv.sh
  • случай отсутствия / usr / bin / jexec
  • One Solution collect form web for “Как настроить DISPLAY для запуска Java JAR Swing Executable из Init.d”

    Если ваше приложение не является интерактивным, вы можете запустить виртуальный сервер X11 и установить переменную DISPLAY для использования вашим приложением.

    Возможные серверы X11, которые можно использовать таким образом:

    • Xvfb
    • Xdummy
    • Xvnc

    Последний позволяет вам позже подключиться для просмотра и взаимодействия с экраном с клиентом VNC (vncviewer).

    Если вы используете малиновый pi (или аналогичный) для автологизации пользователя pi в графической среде, вы можете запустить приложение в качестве пользователя pi и использовать дисплей :0 . Помните, что вы должны убедиться, что X11 завершил запуск, прежде чем делать это.

    Изменить: похоже, что ваша конфигурация запускает сервер Xvnc сначала, когда пользователь pi запускает основной X-сервер фрейма в качестве пользователя root . В этом случае, как вы выяснили, ваше приложение должно быть запущено с root и используя :1 качестве своего дисплея.

    В качестве альтернативы, если вам действительно нужно не запускать приложение один раз во время загрузки, но всякий раз, когда пользователь (обычно pi ) входит в графическую среду, добавьте его в файл rc, применимый к этой графической среде. Например, /etc/xdg/lxsession/LXDE-pi/autostart .

    Linux и Unix - лучшая ОС в мире.