1

我在一个带有中央控制站的分布式系统上工作。在这个中央控制站上,我们有软件可以连接到任意数量的运行 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 时都会以适当的用户身份自动登录,但这不是一个非常安全的解决方案,人们倾向于随意注销它们,从而阻止它们充当远程站点

4

1 回答 1

0

编辑 /etc/inittab 使 X 以 OS 开头。指示

在您的主目录中创建文件 .Xinitrc。从它启动你的守护进程,如果你需要窗口管理器也启动它。

于 2012-11-30T19:12:55.207 回答