总结
运行xserver-xorg x11-xserver-utils xinit openbox
已安装的 ubuntu server 20.04。我可以在 openbox 的自动运行文件中放置一个命令,它运行良好。现在我希望启动 openbox,然后从守护进程启动一个应用程序,在当前打开的 openbox 窗口中运行。如何获取当前 openbox 窗口的句柄?
细节
我遵循了这一点非常有帮助关于如何设置自助服务终端的教程,它是用于树莓派的,我对其进行了调整以使其在 ubuntu 服务器上运行。
一切运行良好;来宾用户在启动时自动登录,然后来宾用户的 .profile 文件运行startx -- -nocursor
,并且 openbox 自动启动文件中有一个启动 chromium 的命令。快乐的日子。
现在我希望将启动 chromium 的命令移出 openbox 自动启动文件,并将其置于 Supervisor 的控制之下(因此,如果 chromium 崩溃,supervisor 将自动重新启动 chromium)。
不幸的是,当 Supervisor 尝试启动 chromium 并以来宾用户身份运行时,它无法获取 openbox 窗口显示。我已验证在 openbox 窗口中,$DISPLAY 设置为“:0”。
我猜测还有其他一些因素在起作用,不仅仅是我需要设置的显示,还可能是窗口管理器或 GUI 客户端,或类似的东西。
主管配置文件:
[program:chromium]
environment = DISPLAY=":0"
command = chromium-browser --kiosk
startsecs=6
user=guest
stderr_logfile=/var/log/supervisor/chromium_stderr.log
stdout_logfile=/var/log/supervisor/chromium_stdout.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=3
由于它是以用户来宾身份运行的,因此它几乎没有任何权限。我检查了 Chromium 应用程序的主管错误日志,它无法打开/var/log/Xorg.1.log
,所以我对其进行了 chmod 777(它保持在 0 字节,因为不会增长),现在得到:
xauth: timeout in locking authority file /.Xauthority
答案1
在 Ubuntu 20.04 中,您不需要 Supervisord 来确保程序重新启动。您可以使用 Systemd 重新启动失败的守护程序。也许您应该尝试这种方法。
[Service]
Restart=on-failure
RestartSec=10s
据我了解,当您收到如下错误时:
timeout in locking authority file /.Xauthority
这意味着该文件已被其他应用程序锁定。要解除锁定,我认为您可以使用 -b 选项,但我不确定。另一个解决方案是直接将其删除...
还可以尝试将日志配置为/tmp为了/var/log/Xorg.1.log也许你的应用没有权限/var/日志但我有疑问……
仅我的一点意见...