У меня есть собственный серверный процесс 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 не устанавливает всю информацию о контексте пользователя. По этой причине у меня есть сценарий оболочки, который устанавливает эту информацию. Вот как выглядит скрипт оболочки.
#!/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. Это должно быть решаемой проблемой конфигурации, но я много чего перепробовал и все еще застрял.
Если у кого-нибудь есть советы, как не допустить появления этих предупреждений или сообщений об ошибках в выходном потоке моего сервера, я был бы признателен.
Это решено. Исходный сценарий был источником сценария оболочки, в котором есть оператор gsettings
, который не предназначен для запуска в контексте сервера. Простое удаление этого утверждения решило проблему.