我在一个带有中央控制站的分布式系统上工作。在这个中央控制站上,我们有软件可以连接到任意数量的运行 Fedora 16 的远程计算机和一个专门的 SystemD 守护程序。连接后,控制站向这些守护程序发送消息,以启动用于用户与中央控制站交互的各种 GUI 系统。
目前这有一个巨大的缺点,因为这些远程计算机需要特定用户登录才能启动 GUI。此用户与运行 SystemD 守护程序的用户相同。如果这些远程计算机未登录,我们会收到以下 java 错误:
Can't connect to X11 window server using ':0' as the value of the DISPLAY variable.
该守护程序是用 Java 编写的(使用最新的 java 7)并使用以下代码来启动 GUI:
String command = "java -Xmx2000M -cp ...{java classes etc to run}"
ProcessBuilder pb = new ProcessBuilder(command.split("\\s+"));
pb.redirectErrorStream(true);
pb.environment().put("DISPLAY", ":0.0");
try
{
p = pb.start();
...
当用户正确登录时,这是正确的 DISPLAY 变量。daemon本身不知道有Display是因为什么时候启动的,所以我们目前在ProcessBuilder中设置DISPLAY变量
是否有某种方法可以通过 java 或通过我的守护程序以其他方式正确连接/登录到 X11 Window 服务器,以便这些系统在运行之前不需要手动登录。
目前,所有这些系统在启动 KDE 时都会以适当的用户身份自动登录,但这不是一个非常安全的解决方案,人们倾向于随意注销它们,从而阻止它们充当远程站点