[java] Java는 DISPLAY 변수의 값으로 ‘localhost : 10.0’을 사용하여 X11 윈도우 서버에 연결할 수 없습니다.

java를 사용하여 localhost의 포트 10.0에 X11을 표시하기 위해 연결하는 스크립트가 있습니다.

하지만 항상이 오류가 발생합니다

java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:112)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.Toolkit$2.run(Toolkit.java:849)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841)
    at ij.io.Opener.openJpegOrGif(Opener.java:367)
    at ij.io.Opener.openImage(Opener.java:220)
    at ij.io.Opener.openImage(Opener.java:249)
    at ij.io.Opener.open(Opener.java:116)
    at ij.IJ.open(IJ.java:1112)
    at ij.macro.Functions.open(Functions.java:2006)
    at ij.macro.Functions.doFunction(Functions.java:129)
    at ij.macro.Interpreter.doStatement(Interpreter.java:205)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.runUserFunction(Interpreter.java:278)
    at ij.macro.Interpreter.getFactor(Interpreter.java:1200)
    at ij.macro.Interpreter.getTerm(Interpreter.java:1162)
    at ij.macro.Interpreter.getExpression(Interpreter.java:1145)
    at ij.macro.Interpreter.getBooleanExpression(Interpreter.java:881)
    at ij.macro.Interpreter.getLogicalExpression(Interpreter.java:857)
    at ij.macro.Interpreter.getBoolean(Interpreter.java:850)
    at ij.macro.Interpreter.doIf(Interpreter.java:829)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.doStatement(Interpreter.java:241)
    at ij.macro.Interpreter.doIf(Interpreter.java:831)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doStatements(Interpreter.java:195)
    at ij.macro.Interpreter.run(Interpreter.java:99)
    at ij.macro.Interpreter.run(Interpreter.java:65)
    at ij.macro.Interpreter.run(Interpreter.java:75)
    at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:127)
    at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.java:112)
    at ij.IJ.runMacroFile(IJ.java:103)
    at ij.ImageJ.main(ImageJ.java:517)

이 문제를 해결하기 위해 모든 것을 시도했습니다.

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

포트 0.0도 시도했지만 항상 동일한 오류가 발생합니다.

xhost를 시도한 후

xhost +local:all
xhost:  unable to open display ""
xhost:  unable to open display ":10.0"

이 문제를 어떻게 해결할 수 있습니까? X 서버가 실행되지 않는다고 생각했기 때문에 startx해당 포트에서 실행한다고 말했습니다.

내 시스템은 Ubuntu 서버 에디션 10.04입니다.



답변

이 명령은 문제를 해결하는 데 도움이되었습니다.

export DISPLAY=:0


답변

-Djava.awt.headless=true시작시 매개 변수 를 지정해야합니다 .


답변

DISPLAY 변수 제거

unset DISPLAY

이는 대부분의 경우 (예 : 응용 프로그램 서버 또는 기타 Java 기반 도구 시작)에 도움이되며 많은 명령 줄을 수정하는 것을 방지합니다.

전용 app-server / tools 사용자를 위해 .bash_profile에 추가하는 것도 편할 수 있습니다.


답변

sudo 모드에서 작업중인 것 같습니다. 사용자 모드로 체크 아웃 한 후 다시 시도하세요.


답변

CI (jenkins, ..)에서 maven-surefire-plugin을 통해 자동화 된 단위 테스트를 실행하고 위에서 언급 한 오류가 발생하는 경우 확실한 플러그인 구성을 업데이트해야합니다.

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${maven-surefire-plugin.version}</version>
     <configuration>
            <systemPropertyVariables>
                <java.awt.headless>true</java.awt.headless>
            </systemPropertyVariables>
      </configuration>
</plugin>


답변

이것은 그것을 고칠 것입니다 :

/usr/bin/java -Djava.awt.headless=true $Your_program


답변

나를 위해 로그인 -X 대신 -Y 작동했습니다.

아래에 표시된대로 신뢰할 수없는 X11이있는 경우 대신 -Y 플래그를 시도하십시오 (호스트를 신뢰하는 경우).

경고 : 신뢰할 수없는 X11 전달 설정 실패 : xauth 키 데이터가 생성되지 않았습니다.