如何将显示传递给qsub命令?

时间:2018-10-24 13:21:06

标签: java bash shell x11 display

我正在运行一个bash脚本,除其他外,该脚本运行可以通过GUI或命令行(取决于参数)使用的Java程序。

p {
 overflow-wrap: break-word;
}

编辑:

当我通过普通命令行或GUI运行它时,它运行良好。如果我将此命令splitstree --commandLineMode --commandFile comm.txt --version --verbose 放入文件,并且echo也有效,并且在将其集成到bash脚本并运行bash脚本时,它也可以正常工作。

如果我将$(cat file)放到我正在工作的集群中,则会收到有关显示器丢失的错误:

qsub

我尝试在bash脚本中进行java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it. ,但是错误没有改变。

编辑2:

如果我将DISPLAY变量传递给export DISPLAY=:0.0命令,则错误消失了,但是程序以退出状态1终止。例如:

qsub

它也说qsub -v DISPLAY <job_file> ,但是对此变量执行Picked up _JAVA_OPTIONS: -Xmx4096M并不会改变退出状态(因此很可能不会损害进程)。

unset外部重新运行同一命令(即:只需将cmd复制粘贴到shell中)即可再次正常工作。

关于如何使qsub命令正确地将显示信息传递到群集节点的任何建议?

2 个答案:

答案 0 :(得分:3)

如果不需要显示,请使用-Djava.awt.headless=true属性运行Java,如Using Headless Mode in the Java SE Platform中所述。

或者,如果您的程序无法无头运行,则可以尝试使用Xvfb (X virtual framebuffer)。它带有xvfb-run命令,请看Running without a Display Wiki:

xvfb-run java MainClass

或通过配置DISPLAY环境变量:

sudo Xvfb :1 -screen 0 1024x768x24 </dev/null &
export DISPLAY=":1"
java MainClass

答案 1 :(得分:0)

在无头环境中时,您需要在代码中使用GraphicsEnvironment.isHeadless()以避免执行任何需要AWT组件的操作。当然,这意味着您无法进行任何输入/输出。