尝试从 SSH 会话运行 adt 会导致:
Exception in thread "main" java.lang.InternalError: Can't connect to window server - not enough permissions.
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1724)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.loadLibraries(Toolkit.java:1605)
at java.awt.Toolkit.<clinit>(Toolkit.java:1627)
at java.awt.Dimension.<clinit>(Dimension.java:70)
...
通常这可以通过传递-Djava.awt.headless=true
给java来解决。但是,adt 会在没有此参数的情况下生成其他 java 进程,因此此解决方案不起作用。
我能够通过将 /usr/bin/java 替换为包含以下内容的 shell 脚本来破解我的方法:
java.old -Djava.awt.headless=true "$@"
但是,这会影响在此框上运行的所有 java 进程,从而导致许多其他问题。一定有更好的方法...