시스템이 Lubuntu를 시작할 때 GUI Java jar 실행

시스템이 Lubuntu를 시작할 때 GUI Java jar 실행

Lubuntu 14.10을 실행하는 컴퓨터가 있고 모니터는 없습니다. 사용자가 자동으로 로그인됩니다. Sysvinit 스크립트를 생성하여 /etc/init.d에 설치했습니다. 내 스크립트는 무엇보다도 직렬 포트에서 수신 대기하는 GUI 응용 프로그램을 여는 jar 파일을 시작합니다.

문제는 부팅 시 jar 애플리케이션이 자동으로 시작되도록 할 수 없다는 것입니다. Java는 X11 디스플레이 서버에 연결할 수 없다고 불평합니다. 그런데 여기서 이상한 점이 있습니다. 컴퓨터에 ssh를 연결하고 sudo 서비스를 사용하여 직접 스크립트를 실행하면 정상적으로 시작됩니다. 또한 시작 중에 모니터를 연결하면 자체적으로 올바르게 부팅됩니다.

모니터가 연결되지 않은 상태에서 스크립트를 어떻게 시작하나요? 모니터가 연결되어 있지 않으면 Xorg 서버가 시작되지 않는 것 같습니다.

답변1

가상 X 프레임버퍼를 사용하여 모든 애플리케이션을 실행할 수 있습니다.wxya또는xV. 또한 실행 중인 X에 연결하도록 강요하지 않는 언어로 전환하는 것도 고려해야 합니다.

ssh이를 사용하여 기계에 연결하면 모든 것이 작동합니다. 놀랄 일도 아닙니다. 첫 번째 항목 이후에 연결을 시도 unset DISPLAY하거나 다음을 수행하십시오.

ssh -o "ForwardX11 no" owl

답변2

수많은 문제 해결과 @Anthon Anthon의 도움 끝에 마침내 원하는 것을 달성했습니다. 문제는 X 서버를 로드할 시간이 충분하지 않다는 사실로 귀결됩니다. Xserver는 upstart 서비스인 lightdm에서 시작되고 내 스크립트는 init.d에서 시작됩니다.

모니터가 연결되면 X 서버가 더 일찍 시작되고 init.d의 스크립트가 충돌하지 않는 것으로 보입니다.

간단한 sleep 10명령은 X 서버가 시작될 때까지 스크립트 실행을 차단합니다. 그러나 이는 X 서버가 언제 시작될지에 대한 추측입니다. 따라서 보다 우아한 해결책은 데스크탑이 언제 시작되는지 확인한 다음 내 응용 프로그램을 시작하는 것입니다. 이를 달성하기 위해 스크립트를 시작하기 전에 다음 줄을 삽입했습니다.

while [ -z $(pidof lxsession) ]; do
   echo "LXSession not started yet, waiting for 2 secs"
   sleep 2
done

-z $(pidof lxsession)반환된 pidof 문자열이 비어 있는지 확인합니다 . (그래서 lxsession 프로세스의 PID를 찾을 수 없었습니다.) lxsession이 시작되면 루프가 취소되고 스크립트는 이제 X 서버를 찾아 정상적으로 실행되는 Java 애플리케이션을 계속 실행합니다.

모두의 도움에 감사드립니다. 다른 사람들도 이 게시물을 통해 도움을 받고 저처럼 고문을 당하지 않기를 바랍니다!

관련 정보