如何设置 DISPLAY 以从 Init.d 运行 Java JAR Swing 可执行文件

如何设置 DISPLAY 以从 Init.d 运行 Java JAR Swing 可执行文件

我需要在启动时在 ARM 设备内的 Raspbian Wheezy Debian 发行版中运行 Java JAR Swing GUI 可执行文件。

我正在关注作为参考myapp,myapp-start.shmyapp-stop.sh, 和以及可能的解决方案(以及其他更相似的解决方案)。但这里没有引用 DISPLAY 变量。

我已经检查了很多替代方案,

尝试过但不适用的选项:

  • /usr/bin/java -jar -Djava.awt.headless=true $myapp.jar
  • unset DISPLAY(在句子里面myapp-start.sh,上面java -jar

错误:

  • java.awt.HeadlessException: No X11 DISPLAY variable was set, but this program performed an operation which requires it.

尝试过的选项(在句子里面myapp-start.sh,上面java -jar):

  • export DISPLAY=:0
  • export DISPLAY=:0.0
  • export DISPLAY=localhost:0.0

错误:

  • Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable...
  • Client is not authorized to connect to ServerException in thread stack...

未尝试过的选项

  • ssh - X localhostssh: 我应该如何对服务器进行操作X11?我应该在流程下哪里执行它init.d?这是使用 GUI 运行 Java 程序的标准解决方案吗?
  • USER=rootinside myapp-start.shinit.d停止,并请求密码。如此聪明,该过程不会启动。
  • 上面的任何选项是否应该包含在myapp-start.sh代码之外的其他位置?在哪里?

不应该是更简单在启动时运行一段代码?

任何其他选择,将不胜感激。

编辑2015-04-12

新选项

在以下选项中,我在此位置添加一段代码,/etc/xdg/lxsession/LXDE-pi/autostart以便在默认用户pi登录和 X11 启动后执行(请参阅伊利亚格雷建议):

  • usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar(没有&符号)
  • export DISPLAY=:0.0 usr/bin/java -jar /home/pi/Embedded/bin/PowerBar.jar(没有&符号)
  • /bin/bash /home/pi/Embedded/bin/powerbarstart.sh(没有&符号)

它们都在后台启动应用程序,即播放背景音乐,并且只能通过 VNC 访问图形:0(使用TightVNC)。作为副作用,屏幕保护程序会激活,应用程序会冻结,大约每 60 秒一次。请注意,同一位置也可用于禁用屏幕保护程序。

是否有缺少的选项或符号,我没有包括在内?

解决方案 该设备被配置为:1.0而不是:0.0。改变这个就myapp-start.sh解决了问题。

答案1

如果您的应用程序不是交互式的,您可以启动虚拟 X11 服务器并设置 DISPLAY 变量供您的应用程序使用它。

可以通过这种方式使用的可能的 X11 服务器有:

后者允许您稍后连接以使用 VNC 客户端 (vncviewer) 查看屏幕并与之交互。

如果您的 Raspberry pi(或类似设备)配置为pi在图形环境下自动登录用户,则可以以用户身份启动应用程序pi并使用:0显示屏。请注意,在执行此操作之前,您必须确保 X11 已完成启动。

编辑:看起来您的配置首先作为pi用户启动 Xvnc 服务器,然后作为用户启动帧缓冲区主 X 服务器root。在这种情况下,正如您所发现的,您的应用程序必须作为其显示启动root并使用。:1

或者,如果您真正想要的不是在引导时启动应用程序一次,而是每当用户(通常pi)在图形环境下登录时,请将其添加到适用于该图形环境的 rc 文件中。例如/etc/xdg/lxsession/LXDE-pi/autostart

相关内容