Java 'localhost:10.0'을 DISPLAY 변수 값으로 사용하여 X11 창 서버에 연결할 수 없습니다.
java를 사용하여 로컬호스트의 포트 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 Server가 않다고 했기 때문에 X Server를 하려고 했습니다.startx
항구에서 있다고 있다.
내 시스템은 Ubuntu 서버 에디션 10.04입니다.
시작할 때 매개 변수를 지정해야 합니다.
DISPLAY 변수를 제거합니다.
unset DISPLAY
이를 통해 대부분의 경우(예를 들어 애플리케이션 서버나 기타 Java 기반 도구 시작)에 도움이 되며, 많은 명령줄을 수정할 필요가 없습니다.
전용 app-server/tools 사용자용 .bash_profile에 추가하는 것도 편리합니다.
이 명령어는 문제를 해결하는 데 도움이 되었습니다.
export DISPLAY=:0
당신은 sudo 모드로 작업하고 있는 것 같습니다.사용자 모드로 체크아웃한 후 다시 시도하십시오.
CI(jenkins,..)의 maven-surefire-plugin을 통해 자동 장치 테스트를 실행하려고 할 때 위의 오류가 발생할 경우 surefire 플러그인 구성을 업데이트하십시오.
<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 키 데이터가 생성되지 않았습니다.
su를 사용하여 디스플레이를 내보내려고 하는데 여전히 작동하지 않는 경우.이게 나한테 효과가 있었어.Sudo 사용자에 대해 X11 포워딩을 시도합니다.
SSH와 함께 -X 옵션을 사용하여 원격 호스트를 연결합니다.
# ssh -X root@remote-host
현재 사용자의 cookie 세트를 나열합니다.
# 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/
첫 번째: XQuartz 시작
두 번째: ssh -X user@ip_address
...: 프로세스를 시작합니다.
ssh를 실행한 후 XQuartz를 시작하면 해당 오류가 발생합니다.
이것으로 문제가 해결되었다
xhost +
, ,, 의, 의, 십에 주의해 주세요.xhost +
인증을 완전히 비활성화하여 모든 사용자가 화면의 모든 응용 프로그램에 액세스할 수 있도록 합니다.
xhost +si:localuser:root
는, 적절한 인증에서도 동일하게 동작하고 있는 것 같습니다.
머리 없는 중절모 22의 라즈베리 파이 2에 글래스피쉬를 설치하는 며칠간의 노력이 헛된 후, 아래는 나를 위해 차질없이 일을 해 주었다.
unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar
여기서 내 도움을 받았다
Xming을 사용하다가 비슷한 오류가 발생하였습니다.문제를 해결하기 위해 다음 절차를 수행했습니다.
- Xming 실행 시 No Access Control(액세스 제어 없음) 상자에 체크 마크를 붙입니다.
- 퍼티로.
DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY
XXX.XXX.XXX.XX
IP 주소
먼저 Jenkins의 빌드 단계에서 이 작업을 수행합니다(사용하는 경우).또는 /etc/profile로 설정합니다.
unset DISPLAY
export DISPLAY=:0
그런 다음 이 속성을 Java 코드 또는 maven을 사용하여 설정합니다. -Djava.awt.headless=false
해결했습니다. 로그아웃하고 xorg로 로그인만 하면 됩니다!
Michael-O는 그 문제를 해결하기 위해 유용한 접근을 했다.이 문제를 해결하는 또 다른 방법은 Putty Console을 사용하여 서버를 시작하는 것입니다.
제 경우 기계에 공간이 남아 있지 않아서 같은 문제에 직면했습니다.때때로 그것은 공간 문제일 수 있다.Linux/Unix 환경의 공간을 확인하고 시스템에 충분한 공간이 있는지 확인합니다.
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
다음 명령을 사용하여 $DISPLAY 변수가 설정되어 있는지 확인합니다.
에코 $DISPLAY
표시 변수가 설정되지 않은 경우 다음 명령을 실행하여 설정합니다(설정되어 있더라도 세션에 대해 하위 변수를 설정할 수 있습니다).
내보내기 디스플레이=:0.0
putty에서는 x 표시 위치도 :0.0으로 되어 있습니다.
제가 작업하던 Linux 서버에서도 같은 문제가 발생했습니다.자바를 X11 디스플레이에 접속하는 것은 헤드노드에서는 동작하지만 다른 노드에서는 동작하지 않습니다.관리자에게 문의한 결과 현재 버전의 작업 스케줄링 시스템(SLURM)은 X11 전송을 지원하지 않는 것으로 나타났습니다.SLURM(SLURM의 새로운 버전 지원)을 업데이트해야 합니다.
sudo . / glassfish-3.1.2.2-unix.sh -s template 와 같은 템플릿을 사용하여 스크립트를 실행하는 방법밖에 없었습니다.
그러면 Glassfish가 사일런트 모드로 설치됩니다.http://docs.oracle.com/cd/E18930_01/html/821-2427/ghmva.html
리모트에서 jconsole 명령어를 실행할 때도 같은 오류가 발생합니다.원격 Linux 호스트에서 실행되는 jconsole의 매개 변수를 수정하고 secureCRT를 사용하여 호스트에 로그인할 수 있으며 터미널에서 이 오류 정보를 던집니다.다행히 퍼티를 사용할 때는 괜찮습니다.이상하네...
이 에러가 허드슨에 표시되는 경우는, 홈 디렉토리에서 .java 디렉토리를 삭제해 주세요.해당 디렉토리가 동작할 가능성이 있습니다.
ssh에 의한 로그인중에 리모트서버상에서 애플리케이션을 기동하는 경우는, 다른 방법으로 ssh 를 기동합니다.-x
파라미터 또는 추가ForwardX11 no
당신의 안에서/etc/ssh/ssh_config
이 경우 ssh는 환경변수 DISPLAY를 생성하지 않습니다.
Jenkins에서 코드를 트리거하는 경우 "빌드 전에 Xvfb 시작 후 종료" 옵션을 활성화하면 도움이 될 수 있습니다.도움이 됐어요.
root 이외의 다른 사용자로 변경해 보겠습니다.나한테는 효과가 있어
./studio를 실행하기 전에 root에서 로그아웃하지 않았을 뿐입니다.모두 준비되었습니다.
제 경우 이 에러는 DISPLAY 포트와 관련이 없습니다.XML을 Windchill(PLM-소프트웨어)에 로드하려고 했는데 단말기에서 위의 에러만 수신되었습니다.로그 파일에서 XML 파일이 손상되었다는 보고서를 발견했습니다.아마 누군가 비슷한 문제를 가지고 있고 이 답을 사용할 수 있을 것이다.
내 문제는 방화벽이었어일시적으로 무효로 했다.
[EDIT] 서버의 호스트명이 다른 IP를 가리키고 있었습니다.단순 로컬 서버로 설정합니다. strace xclock
이 문제의 디버깅에 도움이 되었습니다.
Xorg를 사용하여 로그인하여 이 문제를 해결했습니다.디폴트로는 Wayland를 사용하고 있습니다.Wayland는 자체 문제가 있는 Xorg의 디자인 결함을 대부분 없앤 것 같습니다.
위 중 어느 것도 통하지 않았지만, 오랜 검색 끝에 나는 이것이 통했다.
export DISPLAY=localhost:20.0
언급URL : https://stackoverflow.com/questions/10165761/java-cant-connect-to-x11-window-server-using-localhost10-0-as-the-value-of-t
'programing' 카테고리의 다른 글
Asp.net WEBAPI에서 JSON 문자열을 명시적으로 반환하시겠습니까? (0) | 2023.02.07 |
---|---|
SQL Server 스토어드 프로시저를 MySQL(MariaDB)로 다시 쓰기 (0) | 2023.01.30 |
소수점 2자리까지 부동을 표시하는 JavaScript (0) | 2023.01.30 |
Python에서 dict 객체의 결합 (0) | 2023.01.30 |
Jinja2에서 날짜 형식을 어떻게 써요? (0) | 2023.01.30 |