大家好我需要你的帮助。我有一台运行Lubuntu 14.10而没有显示器的PC。用户已自动登录。我已创建了一个Sysvinit脚本并将其安装在/etc/init.d上。我的脚本包括其他内容,启动一个jar文件,打开一个侦听串口的GUI应用程序。
问题是我无法在启动时自动启动jar应用程序。 Java抱怨它无法连接到X11显示服务器。然而这是奇怪的事情。如果我ssh进入机器并使用sudo服务自己运行脚本,它会正常启动。此外,如果我在启动过程中连接了显示器,它也会自动正确启动。
我需要在没有连接监视器的情况下启动脚本。看起来好像没有连接显示器时,Xorg服务器也没有启动。有没有人有任何建议?
由于
答案 0 :(得分:1)
您可能需要像xvfb这样的Xorg模拟器。
我没有在Lubuntu上测试以下内容,但它应该可以工作:
sudo apt-get install xvfb
sudo Xvfb :10 -ac
export DISPLAY=:10
这应该允许您的应用程序通过xvfb运行,而无需任何类型的监视器或显示器。
答案 1 :(得分:0)
经过大量的故障排除后,我终于成功实现了我的目标。毕竟问题是X服务器没有足够的时间加载。 Xserver是从一个upstart服务的lightdm启动的,我的脚本是从init.d开始的。
似乎如果连接了监视器,X服务器会提前启动,而我在init.d中的脚本也不会崩溃。
一个简单的sleep 10命令,用于停止脚本执行,直到X服务器启动为止。然而,这是X服务器启动时的猜测。因此,更优雅的解决方案是检查桌面何时启动然后启动我的应用程序。为了实现这一点,我在启动脚本之前插入了以下行。
while [ -z $(pidof lxsession) ]; do
echo "LXSession not started yet, waiting for 2 secs"
sleep 2
done
with -z $(pidof lxsession)
我检查返回的pidof字符串是否为null。 (因此没有为过程lxsession找到PID)。一旦lxsession启动,循环就会被取消,脚本会继续执行我现在找到X服务器并正常运行的java应用程序。
谢谢大家的帮助。我希望其他人得到这个帖子的帮助,不要像我一样折磨!