我在一个带有中央控制站的分布式系统上工作。在这个中央控制上 我们有软件可以连接到任意数量的运行 Fedora 16 的远程计算机和一个专门的 SystemD 守护进程。连接后,控制站会向这些守护进程发送消息,以启动用于用户与中央控制站交互的各种 GUI 系统。
目前,这有一个巨大的缺点,因为这些远程计算机需要特定用户登录才能启动 GUI。该用户与运行 SystemD 守护程序的用户是同一用户。如果这些远程计算机未登录,我们会收到以下 java 错误:
无法使用“:0”作为 DISPLAY 变量的值连接到 X11 窗口服务器。
守护进程是用 Java 编写的(使用最新的 java 7),并使用以下代码来启动 图形用户界面:
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 变量。 守护进程本身并不知道有一个 Display,因为它启动的时候,所以我们当前在 ProcessBuilder 中设置 DISPLAY 变量
是否有某种方法可以通过 java 正确连接/登录到 X11 Window Server 或通过我的守护进程的其他方式,以便这些系统在运行之前不需要手动登录。
目前,所有这些系统都会在启动时以适当的用户身份自动登录 KDE,但这不是一个非常安全的解决方案,人们倾向于随机注销它们,从而阻止它们充当远程站
最佳答案
编辑/etc/inittab,使 X 以 OS 开头。 Instructions
在您的主目录中创建文件 .Xinitrc。从它启动你的守护进程,如果你需要窗口管理器也启动它。
关于java - 如何在 Fedora 16 上通过守护进程登录 X Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651438/