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


93

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입니다.

답변:


35

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

export DISPLAY=:0

40
unset DISPLAY나를 도왔습니다 ( export DISPLAY=:0오류가 발생했습니다Can't connect to X11 window server using ':0'
beluchin

1
당신은 어디 넣어 않았다
Spektakulatius

1
글쎄 언젠가-그것은 리눅스에서 작동하지 않을 것입니다. 그러면 Xvfb를 apt와 함께 설치하고 다음과 같은 화면에서 실행하는 것이 좋습니다. Xvfb : 1 다음 빌드 단계에서 변수 설정-export DISPLAY = : 1-> 이것은 완벽하게 작동합니다.
Pankaj Kumar Katiyar


57

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


고마워하지만 정확히 지정해야 할 곳은 어디입니까?
Elteroooo

1
스레드 "main"의 예외 java.awt.He adlessException at java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

보안 관리자를 운영하고 있습니까? 그렇다면 권한을 부여해야 할 수도 있습니다.
마이클-O

1
덕분에 문제는 X 서버가 다른 포트에서 실행되고 있는지이었다
Elteroooo

1
asker의 프로그램이 원하는 작업을 수행 ij.io.Opener.openJpegOrGif하려면 GUI가 필요할 것입니다. 따라서 헤드리스는 또 다른 오류를 발생시킵니다 : java.awt.HeadlessException.
Nicolas Raoul

40

DISPLAY 변수 제거

unset DISPLAY

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

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


1
전혀 도움이되지 않았습니다. 나는이있어 : 사용 X11 윈도우 서버에 AWT 캔이 연결되지 ...
카지 쿠마 Katiyar에게

앱에서 awt를 사용하는 경우 DISPLAY를 올바르게 설정해야합니다. awt를 사용하지 않는 앱용입니다.
bebbo

이것을 가지고 놀 때, bashfile에 unset 명령을 추가 한 후 mobaXterm을 다시 시작하십시오. Display 변수는 이전부터 설정되므로 bash 파일을 실행해도 변경되지 않습니다.
mrk


9

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>

1
gradle에서 수행하는 방법과 속성 값을 설정하는 방법.
Sobhit Sharma

7

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

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

내 문제를 해결하지 못했습니다
Alex Shnyrov

1
이것은 나를 위해 일했습니다. 감사합니다. poi를 사용하고 있기 때문에 오류가 발생했습니다.
dev4life

6

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

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

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


4

헤드리스 페도라 22를 사용하여 라즈베리 파이 2에 글래스 피시를 설치하는 며칠간의 헛된 노력 끝에 아래는 문제없이 저를 위해 일했습니다.

 unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar

여기서 내 도움을 받았다


3

첫째 : XQuartz 시작

두 번째 : ssh -X user @ ip_address

... : 프로세스 시작

ssh하고 XQuartz를 시작하면 해당 오류가 발생합니다.


3

이것은 내 문제를 해결했습니다.

xhost +

그러나 xhost +인증 이 완전히 비활성화되고 모든 사람이 화면의 모든 응용 프로그램에 액세스 할 수 있습니다.

xhost +si:localuser:root 적절한 인증과 유사하게 작동하는 것 같습니다.


2

나는 Xming을 사용하고 있었고 비슷한 오류가 발생했습니다. 문제를 해결하기 위해 다음 단계를 수행했습니다.

  1. Xming 시작에서 액세스 제어 없음 확인란을 선택하십시오.
  2. 퍼티에서 다음 명령을 실행했습니다. DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

XXX.XXX.XXX.XXIP 주소로 바꿉니다 .


나는 동일한 구성에 있지만 작동하지 않았습니다. 나는 X0.hosts 파일에 X11을 실행하는 IP 추가 필요
크리스토프 Moine을

2

먼저 Jenkins의 빌드 단계에서 다음을 사용하거나 / etc / profile에 설정합니다.

unset DISPLAY
export DISPLAY=:0

그런 다음 Java 코드에서 또는 maven을 사용하여이 속성을 설정합니다. -Djava.awt.headless = false


2

해결되었습니다. 로그 아웃하고 xorg로 로그인합니다!


1
export DISPLAY = : 0 또는 export DISPLAY = : 1이 작동하지 않았습니다. 로그 아웃하고 로그인하면 문제가 해결되었습니다.
Optimus

1

Michael-O는 문제를 해결하는 데 유용한 접근 방식을 제공했습니다. 이를 해결하는 또 다른 방법은 Putty 콘솔로 서버를 시작하는 것입니다.


어떻게 작동하는지 조금 더 설명해 주시겠습니까? (퍼티를 사용한 적이 없습니다)
mrk

1

내 경우에는 내 컴퓨터에 남은 공간이 없었고 같은 문제에 직면했습니다. 때로는 공간 문제가 될 수 있습니다. Linux / Unix 환경의 공간을 확인하고 컴퓨터에 충분한 공간이 있는지 확인하십시오.


1

su를 사용하여 디스플레이를 내보내려고하는데 여전히 작동하지 않는 경우. 이것이 나를 위해 일한 것입니다. sudo 사용자를 위해 X11 전달을 시도하십시오.

ssh와 함께 -X 옵션을 사용하여 원격 호스트를 연결합니다.

# ssh -X root@remote-host

이제 현재 사용자에 대한 coockie 세트를 나열하십시오.

# xauth list $DISPLAY
    node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa
# echo $DSIPLAY
    localhost:10.0

sudo를 사용하여 다른 사용자 계정으로 전환하십시오. 위의 명령 출력에서 ​​쿠키를 sudo 사용자에게 추가하십시오.

# sudo su - [user]
# xauth add node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

sudo 사용자에 대해 2 단계에서 디스플레이를 다시 내 보냅니다. xclock 명령을 사용하여 x 클라이언트 응용 프로그램이 예상대로 작동하는지 확인하십시오.

# export DISPLAY=localhost:10.0

출처 : https://www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/


1

아래 명령을 사용하여 $ DISPLAY 변수가 설정되었는지 확인하십시오.

에코 $ DISPLAY

디스플레이 변수가 설정되지 않은 경우 아래 명령을 실행하여 설정하십시오 (설정되어 있어도 세션에 대해 아래 명령을 사용할 수 있음).

내보내기 DISPLAY = : 0.0

퍼티에서는 x 표시 위치도 : 0.0



0

원격에서 jconsole 명령을 실행할 때 동일한 오류가 발생합니다. 원격 Linux 호스트에서 실행되는 jconsole에서 매개 변수를 수정하고 싶습니다. 호스트에 로그인하여 secureCRT를 사용하면 터미널이이 오류 정보를 표시합니다. 다행히도 Putty를 사용하면 괜찮습니다. 기묘한....


0

Hudson에서이 오류가 표시되는 경우 홈 디렉토리에서 .java 디렉토리를 제거하십시오. 작동 할 수 있습니다.


0

SSH로 로그인하는 동안 원격 서버에 응용 프로그램을 시작할 경우 다른 방법으로 ssh를 시작하는 것입니다 -x매개 변수 또는 추가 ForwardX11 no귀하의에서 /etc/ssh/ssh_config. 이 경우 ssh는 환경 변수 DISPLAY를 생성하지 않습니다.


0

Jenkins에서 코드를 트리거하는 경우 "빌드 전에 Xvfb를 시작하고 이후에 종료"옵션을 활성화하면 도움이 될 수 있습니다. 그것은 나를 도왔다.


0

다른 사용자로 변경하고 루트를 제외하고 시도하십시오. 그것은 나를 위해 작동합니다.



0

Ubuntu 17.10의 경우 X 가상 프레임 버퍼 (xvfb) 설치

apt install xvfb

그리고이 줄을 / etc / profile 파일에 추가했습니다 ...

# Start the X virtual frame buffer (Xvfb)
if [ -f /usr/X11R6/bin/Xvfb ]; then
/usr/X11R6/bin/Xvfb :1 -screen 0 1366x768x32
fi

# Set the DISPLAY variable for the X virtual frame buffer (Xvfb)
export DISPLAY=localhost:1.0

2
이제 "Exception in thread"main "java.awt.AWTError : Ca n't connect to X11 window server using 'localhost : 1.0'as the value of the DISPLAY variable." Ubuntu 16.04에서. Xvfb 바이너리는 이제 / usr / X11R6 / bin이 아닌 / usr / bin에있는 것처럼 보이지만 "Could n't add screen 0 (EE)"가 표시됩니다.
Chris Jenks 2018 년

0

제 경우에는이 오류가 DISPLAY 포트와 관련이 없습니다. XML을 Windchill (PLM 소프트웨어)에로드하려고했는데 터미널에서 위의 오류 만 받았습니다. 로그 파일에서 내 XML 파일이 손상 되었다는 보고서를 찾았습니다 . 누군가 비슷한 문제가 있고이 대답을 사용할 수 있습니다.


0

내 문제는 방화벽에있었습니다. 일시적으로 비활성화했습니다.

[편집] 그리고 서버 호스트 이름이 다른 IP를 가리키고있었습니다. 단순히 localserver로 설정하십시오. strace xclock이 문제를 디버깅하는 데 도움이되었습니다.


0

Xorg를 사용하여 로그인하여이 문제를 해결했습니다. 기본적으로 저는 Wayland를 사용했습니다. Wayland는 자체 문제가있는 Xorg의 대부분의 디자인 결함을 제거하는 것처럼 보입니다.여기에 이미지 설명 입력


-1

나에게 문제는 xorg-x11-xauth 가 설치되지 않았다는 것입니다. 나는 그것을 설치하고 작동했습니다.

지금 가지고있는 패키지는 다음과 같습니다.

  • libX11-common-1.6.3-2.el6.noarch
  • libX11-1.6.3-2.el6.i686
  • libX11-1.6.3-2.el6.x86_64
  • xorg-x11-drv-ati-firware-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.