![usr/bin/xterm Xt 오류: 디스플레이를 열 수 없습니다: /usr/bin/xterm: 디스플레이가 설정되지 않았습니까?](https://linux55.com/image/37772/usr%2Fbin%2Fxterm%20Xt%20%EC%98%A4%EB%A5%98%3A%20%EB%94%94%EC%8A%A4%ED%94%8C%EB%A0%88%EC%9D%B4%EB%A5%BC%20%EC%97%B4%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%3A%20%2Fusr%2Fbin%2Fxterm%3A%20%EB%94%94%EC%8A%A4%ED%94%8C%EB%A0%88%EC%9D%B4%EA%B0%80%20%EC%84%A4%EC%A0%95%EB%90%98%EC%A7%80%20%EC%95%8A%EC%95%98%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
다음을 통해 학교 서버(HPC)에 작업을 제출하려고 합니다.
#!/bin/bash
#$ -S /bin/bash
#$ -cwd
#$ -o ./out_$JOB_ID.txt
#$ -e ./err_$JOB_ID.txt
#$ -notify
#$ -pe orte 1
date
pwd
##################################
RESULT_DIR=~/Results
SCRIPT_FILE=sample_job
##################################
. /etc/profile
. /etc/bashrc
module load packages/comsol/4.4
module load packages/matlab/r2012b
comsol server matlab "sample_job, exit" -nodesktop -mlnosplash
/bin/uname -a
mkdir $RESULT_DIR/$name
cp *.csv $RESULT_DIR/$name
작업 중단은 다음과 같이 말합니다.
Sun Jun 8 14:20:21 EDT 2014
COMSOL 4.4 (Build: 150) started listening on port 2036
Use the console command 'close' to exit the program
/usr/bin/xterm Xt error: Can't open display:
/usr/bin/xterm: DISPLAY is not set
Program_did_not_exit_normally
Exception:
com.comsol.util.exceptions.FlException: Program did not exit normally
Messages:
Program did not exit normally
Stack trace:
at com.comsol.mli.application.a.a(Unknown Source)
at com.comsol.mli.application.MatlabApplication.doStart(Unknown Source)
at com.comsol.util.application.ComsolApplication.doStart(Unknown Source)
at com.comsol.util.application.ComsolApplication.doRun(Unknown Source)
at com.comsol.bridge.Bridge$2.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
ERROR: Could not start COMSOL Application. See log file: /home/.comsol/v44/logs/server2.log
java.lang.IllegalStateException: Shutdown in progress
at java.lang.ApplicationShutdownHooks.add(Unknown Source)
at java.lang.Runtime.addShutdownHook(Unknown Source)
at org.apache.catalina.startup.Catalina.start(Catalina.java:699)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:451)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.a(Unknown Source)
at com.comsol.util.application.ServerApplication.main(Unknown Source)
원인은 무엇이고 어떻게 해결해야 합니까?
답변1
이 스크립트를 실행하기 위해 제출할 때 GridEngine을 클러스터 소프트웨어로 사용하고 있다고 가정합니다. 이 같은:
$ qsub myscript.sh
qsub
다음과 같이 HPC 클러스터 노드에서 생성하려는 결과 셸 에 환경 변수를 포함할 수 있습니다 .
$ qsub -v DISPLAY=$(hostname):0.0 myscript.sh
이렇게 하면 원격으로 GUI를 표시하려는 시스템의 호스트 이름을 "주입"해야 합니다.
로컬 시스템이 원격으로 표시된 창을 "수신"할 수 있도록 하려면 이 작업을 수행해야 할 수도 있습니다. 가장 간단하고 보안 수준이 낮은 방법은 다음과 같습니다.
$ xhost +
이것이 효과가 있고 이를 "더 안전하게" 만드는 데 관심이 있다면 좀 더 명시적으로 설명할 수 있지만 xhost +
이것이 꼭 필요한 것은 아닙니다. 귀하의 생각을 알려주시면 필요한 경우 추가로 조정할 수 있습니다.
위의 방법으로 작동하지 않으면 어떻게 되나요?
최신 버전에는 다음과 같이 환경 변수를 올바르게 전달하는 스위치 qsub
가 포함되어 있습니다 .-X
$DISPLAY
$ qsub -X myscript.sh
호스트 이름 대신 제출 호스트의 IP 주소를 사용해 볼 수도 있습니다. HPC 노드에 DNS가 올바르게 설정되지 않았을 수 있습니다.
$ qsub -v DISPLAY="$(hostname -i):0.0" myscript.sh