![在系统启动 Lubuntu 时运行 GUI Java jar](https://linux22.com/image/61305/%E5%9C%A8%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%20Lubuntu%20%E6%97%B6%E8%BF%90%E8%A1%8C%20GUI%20Java%20jar.png)
我有一台运行 Lubuntu 14.10 且没有显示器的电脑。用户自动登录。我创建了一个 Sysvinit 脚本并将其安装在 /etc/init.d 上。我的脚本除其他外,启动一个 jar 文件,该文件打开一个侦听串行端口的 GUI 应用程序。
问题是我无法使 jar 应用程序在启动时自动启动。 Java 抱怨它无法连接到 X11 显示服务器。然而,这就是奇怪的事情。如果我 ssh 进入机器并使用 sudo 服务自己运行脚本,它会正常启动。此外,如果我在启动过程中连接了显示器,它也会自行正确启动。
在没有连接显示器的情况下如何启动脚本?似乎当监视器未连接时,Xorg 服务器不会启动。
答案1
答案2
经过大量的故障排除和 @Anthon Anthon 的帮助,我终于实现了我想要的。问题归根结底是 X 服务器没有足够的时间来加载。 Xserver 是从 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
我-z $(pidof lxsession)
检查返回的 pidof 字符串是否为空。 (所以没有找到进程 lxsession 的 PID)。一旦 lxsession 启动,循环就会取消,脚本就会继续执行我的 java 应用程序,该应用程序现在找到 X 服务器并正常运行。
感谢大家的帮助。我希望其他人能受到这个帖子的帮助,而不是像我一样受到折磨!