我在 Raspberry Pi 上运行无头图形应用程序(信息亭)。到目前为止一切顺利:Raspbian 使用用户pi
和触发器自动登录,只要我没有通过 SSH 登录,.bash_profile
它就会依次调用,并负责启动 Java 图形应用程序。startx
.xinitrc
当应用程序自动更新时会出现问题。为了修改它自己的(打开的)文件,它会创建一个单独的无头更新过程(使用nohup bash update_script.sh
),然后退出。更新本身进行得很顺利,因为更新后文件是正确的。但是,我无法在脚本结束时成功重新启动应用程序,我得到:
X11:无法打开显示:0
据我了解,当 JVM 进程结束时,X 服务器就关闭了。
我怎样才能防止 X 服务器关闭并从我的更新程序脚本中搭载会话?
请记住我需要在调用更新程序脚本之前采取的措施nohup
,否则更新将在原始 JVM 的子进程中运行,并且当应用程序停止以释放锁时会随之消失。
答案1
据我了解,当 JVM 进程结束时,X 服务器就关闭了。
当您的 .xinitrc 脚本进程结束时,startx/xinit 工具将关闭 X 服务器。
如何防止 X 服务器关闭
从 .xinitrc 启动其他程序 – 传统上,人们会将窗口管理器作为最后一个进程启动,因为窗口管理器预计会持续整个 X 会话的生命周期。
(即使全屏应用程序也可能偶尔显示弹出窗口,因此 WM 仍然很方便。我可能会为此使用 Openbox。)
或者,启动任何你想要的、永不退出的程序,例如sleep infinity
或sleep 9999d
。重点是你的 .xinitrc 脚本永远不应该结束。
我正在运行一个无头图形应用程序(信息亭)
如果它是一个信息亭并且附有显示器来显示图形应用程序,那么它就不是无头的。