我已经写了一个Java服务器,允许连接到它的客户端控制计算机的鼠标和键盘。要做到这一点,它使用java.awt.Robot
类。我可以在守护进程中使用java.awt.Robot吗?
我需要这台服务器在后台运行并自动启动。我正在解决这个问题的第一个操作系统是基于Debian的(Ubuntu 11.04),而守护进程似乎是一个明显的选择。问题是,当启动期间或安装我的Debian软件包(它的postinst脚本开始使用/etc/init.d/pc-remote-server start
它)我得到这个错误时启动守护程序:
java.awt.AWTException: headless environment
at java.awt.Robot.<init>(Robot.java:97)
at com.se.pcremote.server.CommandExecuter.<init>(CommandExecuter.java:72)
at com.se.pcremote.server.PCRemoteServer.<init>(PCRemoteServer.java:215)
at com.se.pcremote.server.PCRemoteServer.main(PCRemoteServer.java:122)
有什么办法,我可以使用java.awt.Robot
类从守护进程内?我可以从不是“无头环境”的守护进程产生一个辅助进程吗?或者,有没有更好的方式让我获得像这样没有这种限制的结果的“服务”?
测试设置/未设置DISPLAY =:0.0和设置java.awt.headless = true或java.awt.headless = false的组合后,我认为我已经确定:1)当不是'DISPLAY'环境变量,Java进入无头模式。 2)如果你手动设置一个,它会使Java陷入**而不是**进入无头模式。 3)您可以设置'java.awt.headless'来覆盖开始时决定的任何Java。 4)如果你试图欺骗Java,它只会崩溃而不是优雅地抛出一个异常。 – 2011-05-23 08:16:22
我现在要去查看这个VNC业务。 – 2011-05-23 08:17:44
我已经想出了如何使用x11vnc启动一个VNC服务器,并使用tightvnc启动一个客户端,但是打开一个窗口显示您想要控制的屏幕(如您所期望的那样)。有没有办法打开窗口连接,然后在该环境中运行shell命令? – 2011-05-23 09:48:08