/etc/init.d의 시작 스크립트를 통해 시작할 때 제대로 작동하지 않는 Java 애플리케이션의 이상한 점을 추적하려고 하는데 GUI 터미널 창을 열고 /etc/init.d/를 통해 시작할 때 실행됩니다. myapp이 시작되면 괜찮습니다. (이상한 점은 응용 프로그램의 일부가 시작 방법에 대한 코드 작업을 사용하여 일부 해킹을 수행한다는 것입니다.
정답은이 게시물Gnome 터미널이 창 관리자 내에서 실행되고 있다는 단서를 제공했는데, 이는 bash 스크립트를 통해 시작한 애플리케이션의 환경에 (좋은 방식으로) 영향을 미쳤습니다. tty 터미널(ctrl-alt-f1 또는 ssh를 통해)을 통해 스크립트를 실행하는 것이 부팅 시 실행하는 것과 동일하게 동작하는지 확인할 수 있었습니다.
내 주요 질문:컴퓨터가 시작될 때 응용 프로그램이 시작되지만 마치 X에서 시작된 것처럼 동작하도록 하려면 어떻게 해야 합니까? 지금까지 우리는 특정 매개변수를 사용하여 Java VM을 시작해야 하므로 스크립팅 경로를 따라갔습니다.
후속 질문(엄격히 이해를 돕기 위해): 창 관리자에서 실행 중인 항목을 통해 스크립트가 실행될 때 스크립트가 다르게 동작하도록 하기 위해 뒤에서 무슨 일이 일어나고 있습니까? Google은 아직 이에 대해 알려주지 않았습니다.
답변1
/etc/init.d
스크립트는 비대화형, 비로그인이며 X 세션에 액세스하려고 시도하지 않습니다.시스템 전체제공하다. 1 시스템 서비스는 특정 서비스와 연결되어 있지 않습니다.로그인user, 2 이지만 X 세션은 항상 로그인한 사용자에게 속합니다.
애플리케이션이 작동하기 위해 GUI 컨텍스트가 필요한 경우 시스템 서비스가 아니어야 합니다. 너 아직 설명 안 했어왜그것은 그것을 요구하거나그것이 무엇을 할 수 있는지~/.xinitrc
하지만 init 대신 데스크탑 환경의 부팅 시스템을 사용해야 할 수도 있습니다 .
1
2서비스는 종종 자신의 특별한 사용자와 연결되지만, 서비스는 그렇지 않습니다. 로그인그러므로 (보통 그런 사용자들은할 수 없다로그했습니다).
답변2
어떤 이상한 이유로 인해 응용 프로그램에 X 서버가 필요하지만 유용한 기능을 수행하지 못하는 경우 가상 X 서버를 제공하십시오. 이는 웹 응용 프로그램에 대한 자동화된 테스트 모음에서 웹 브라우저를 실행하기 위해 종종 수행됩니다. 아무도 화면을 보고 있지 않지만 화면이 없으면 웹 브라우저를 실행할 수 없습니다.
wxya메모리에만 "표시"되고 아무것도 표시되지 않는 X 서버를 만듭니다. 하드웨어나 권한이 필요하지 않습니다.
이를 사용하는 가장 쉬운 방법은 데비안 xvfb-run
스크립트를 이용하는 것입니다.
xvfb-run java MyWeirdApp