java - 如何在 Fedora 16 上通过守护进程登录 X Window

标签 java authentication x11 kde-plasma fedora16

我在一个带有中央控制站的分布式系统上工作。在这个中央控制上 我们有软件可以连接到任意数量的运行 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/

相关文章:

java - Struts 1.x 将 Action 表单属性显示为简单文本(标签)

java - log4j 和 DOMConfigurator.configureAndWatch() 函数

java - HttpURLConnection.getInputStream() 挂起并且永远不会完成

javascript - Angularjs 发布登录请求无法请求登录

linux - 如何将附加信息附加到像素图?

linux - 无法使用 Qt 应用程序连接到 X 服务器 :0. 0

java - 跟踪多个数组列表

javascript - 编辑路径身份验证页面时出现问题

javascript - 如何在同一域上托管的 JS 应用程序和 OAuth2.0 服务器之间安全通信?

c - 通过它的 API(或扩展)识别一个分辨率在 X11 屏幕上是虚拟的