我有一个自定义的 xinetd 服务器进程,以前可以正常工作,但现在当 dconf 警告消息打印到输出流中时,它会生成错误。我认为这是一个配置问题,但我不知道如何解决它。我在多台机器上都遇到了同样的问题(所有机器都运行 Ubuntu 17.04 版本)。它一直正常工作,直到今年早些时候升级。
输出流中出现以下消息文本:
(process:13179): dconf-WARNING **: failed to commit changes to dconf: Cannot
autolaunch D-Bus without X11 $DISPLAY
一些背景信息:
xinetd 服务器进程只是将数据写入 stdout 并从 stdin 读取,然后 xinetd 将其重定向到端口。这很棒,因为 xinetd 负责较低级别的通信。但是 xinetd 不会设置所有用户上下文信息。因此,我有一个设置此信息的 shell 脚本。以下是该 shell 脚本的样子。
#!/bin/sh
export USER=erik
export HOME=/home/$USER
#export DISPLAY=':0'
. $HOME/.bashrc
. $HOME/.postm/bin/additions.txt
cd $HOME
runserver
最后一个命令runserver
是自定义 HTTP 服务器进程,它读取 stdin 并写入 stdout。我可以从终端运行它,手动输入请求并获取响应,而不会生成错误或警告消息。
请注意,其中一行已被注释掉。当我取消注释该行时:
export DISPLAY=':0'
该过程需要更长时间才能响应,然后我收到以下错误:
(process:14160): dconf-WARNING **: failed to commit changes to dconf: Could
not connect: Connection refused
这些错误和警告前面有一个空行,导致它们被写入用户网页的文本中,这会让 Firefox 感到困惑。
由于该进程在终端中运行正常,但在 xinetd 上下文中失败,我认为这是因为 dconf 混淆了该进程现在在 xinetd 中运行。这应该是一个可解决的配置问题,但我尝试了很多方法,但仍然卡住了。
如果有人能提供关于如何防止这些警告或错误消息出现在我的服务器输出流中的建议,我将不胜感激。
答案1
问题已解决。原始脚本正在获取一个包含gsettings
语句的 shell 脚本,该语句并非旨在在服务器上下文中运行。只需删除该语句即可解决问题。