简短故事
我需要一种系统级的方法来将java.awt.headless
属性设置为true
,并且适用于所有Java调用。也就是说,使用-Djava.awt.headless=true
不是一个选项,因为Java是从我无法访问的地方调用的(例如从另一个使用Java/C等编写的工具内部)。
长故事
我正在使用一堆使用AWT类的Java工具(具体来说是Adobe的Air ADT)。当我在控制台上运行这些工具时,它们可以正常工作。但是,当我从SSH会话中运行它们时,它们会失败,并出现java.lang.InternalError: Can't connect to window server - not enough permissions
错误。在Google上搜索后,我发现将java.awt.headless设置为true可以解决问题。但实际上并没有,因为ADT本身会生成子Java进程,而这些进程没有使用-Djava.awt.headless=true
参数。
是否有任何系统级方法可以确保每次调用Java时都设置了此属性?也许有某个系统awt属性文件或等效文件吗?
最坏的情况是,我可以尝试用一个shell脚本替换/usr/bin/java
,并将此参数添加到"$@"
中,但我希望避免这样做。(更新:为了确保我的理论是正确的,我尝试了这个shell脚本黑客并且它确实解决了问题。只是希望有一个更干净的解决方案)