2009-05-07 4 views
17

나는 일을하는 동안 수행중인 일 중 일부를 시각적으로 표시하는 Java 응용 프로그램을 실행 중입니다. 그러나 첨부 할 디스플레이가없는 스크립트에서이 스크립트를 실행하고 싶습니다. 현재 환경에서는 DISPLAY 환경 변수도 설정되어 있지 않습니다. DISPLAY를 0.0으로 설정하려고했습니다. 그러나 그것은 존재하지 않습니다. 디스플레이에 대해서는별로 신경 쓰지 않습니다. 난 그저 그 파일을 자동으로 처리하기를 원해.디스플레이가 노이즈 일 때 DISPLAY에 대해/dev/null이 같음

나는 (내 앱이 아닌) 디스플레이를 켤 수 없기 때문에 디스플레이의 필요성을 없애기 위해 노력하고있다.

DISPLAY를 보낼 수있는 블랙홀이 있습니까?/dev/null과 동등한가?

웹에서 약간 검색했지만 사용할 수있는 단어 : "display" "null" "disregard"등은 모두 나를 대답으로 가져 오는 일반적인 두 가지 항목입니다.

이것은 더 큰 스크립트의 중간이므로 나머지 출력을 stdout에 사용 가능하게하려고합니다.

답변

13

Xvfb이라는 헤드리스 X 서버가 있습니다. 기본적으로 X 클라이언트를 허용하지만 기본적으로 클라이언트의 데이터는 사용하지 않기 때문에 필요한 것입니다. (약간 의역) 링크 된 페이지에서 :

Xvfb

의 X 가상 프레임 버퍼는 X11 디스플레이 서버 프로토콜을 구현하는 디스플레이 서버입니다.

다른 디스플레이 서버와 달리 Xvfb은 화면 출력을 표시하지 않고 메모리의 모든 그래픽 작업을 수행합니다.

클라이언트의 관점에서 볼 때, 이는 다른 X 디스플레이 서버와 똑같이 작동하여 요청을 처리하고 적절하게 이벤트 및 오류를 전송합니다. 그러나 출력이 표시되지 않습니다.

이 가상 서버에서는 실행중인 컴퓨터에 화면이나 입력 장치가 필요하지 않습니다. 네트워크 계층 만 필요합니다.

찾을 수 없다면 CygWin이 설치된 여분의 PC를 사용하는 것이 좋습니다. CygWin에는 응용 프로그램을 연결하고 무시할 수있는 완전한 X 서버가 제공됩니다. 기업/dev/null DISPLAY로 설정할 수도 있습니다.

하지만 먼저 Xvfb를 살펴 보겠습니다.

+0

이것은 정말 잘되었습니다. 그것은 Xvfb입니다. 상자는 제 것이 아니지만 관리자가 상자에 넣을만큼 멋졌습니다. – Marc

+0

감사합니다. 필자는 gschem을 사용하여 빌드 머신에서 내 회로도의 PDF 및 PNG를 생성 할 수 있기를 원했지만 X (엉덩이의 통증) 없이는 작동하지 않았습니다. 이제 Xvfb에 연결하기위한 X 서버가 있습니다! – KeyserSoze

0

대상 컴퓨터에서 VM을 실행할 수 있습니까? 그런 다음 DISPLAY를 설정할 수 있습니다. 또는 vnc를 시도해 볼 수도 있습니다 (현재이 작업을 허용하지 않는 컴퓨터에서 시도하거나 시도 할 수 있습니다 ...).

1

위에서 설명한 것처럼 Xvfb를 사용할 수 있습니다. 그렇게하면 출력물을 볼 수 없게됩니다 (그러나 스크린 샷을 찍는 도구를 사용할 수는 있습니다).

http://packages.debian.org/sid/xvfb

http://en.wikipedia.org/wiki/Xvfb 또는 당신은 VNC 서버를 설정할 수 있습니다. 리눅스에서는 VNC 서버가 로컬 모니터에 표시되지 않고 VNC를 통해 액세스 할 수있는 특별한 X 서버로 구현됩니다. 그것은 당신에게 머리가없는 X 서버를 제공합니다. 만약 당신이 일을 할 경우에 VNC를 통해 연결할 수있는 추가 보너스가 있습니다.은 무슨 일이 일어나는지를 알아야합니다.

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

vncserver가은 VNC 서버에게 바람을 시작하게 (꽉) VNC를위한 좋은 래퍼 스크립트입니다. 대부분의 배포판은 기본적으로 설치해야합니다.

2

자바 프로그램 인 경우 헤드리스 모드를 사용하여 응용 프로그램을 실행할 수 있습니다.

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

More about headless mode...

+0

나는이 접근법을 사용할 수있는 기회를 얻지 못했습니다. 나는 시도했지만 헤드리스 예외를 여전히 받았다. 의심의 여지가 작은 응용 프로그램이 바로 작성된 경우, 나는이 깃발을 사용할 수 있습니다. – Marc

+0

@Marc :'java.awt.headless = true'는 디스플레이가 사용 가능하지 않다는 것을 JVM에 알립니다. 일부 Java API는이를 처리하고 계속 작업 할 수 있으며 일부는 처리 할 수 ​​없으며'HeadlessException'을 throw합니다. 따라서 작동 여부는 프로그램의 기능에 달려 있습니다. 자세한 내용은 [Java SE 플랫폼의 헤드리스 모드 사용] (Artem Ananiev 및 Alla Redko, 2006 년 6 월) (http://www.oracle.com/technetwork/articles/javase/headless-136834.html)을 참조하십시오. – sleske

0

짧은 답변, 사용 :

xvfb-run JAVA_COMMAND_LINE 

버전에 따라이 jar 파일의 경우

시도는 다음과 같이, -Djava.awt.headless=true 매개 변수와 함께 실행하기 그리고 리눅스의 맛, xvfb-run에 one line you have to change이있어 모든것을 실행할 수 있습니다.