gnome-open вызывает эту ошибку при запуске изнутри tmux

Я получаю ошибку:

GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. 
See http://projects.gnome.org/gconf/ for information. 
(Details -  1: Failed to get connection to session: Error connecting: Connection refused)
Failed to open bus: Failed to connect to socket /tmp/dbus-BYC0LHrEHk: Connection refused

Какие-либо предложения?

4 ответа

Решение

Вместо того, чтобы позволить Gnome бежать dbus-launch чтобы создать случайный адрес D-Bus, запустите dbus-daemon в самом начале вашего запуска X сессии и дать ему фиксированный адрес, такой как unix:path=~/.dbus-$HOSTNAME-$DISPLAY,

Учитывая информацию в сообщении об ошибке, вы даже можете сойти с рук unset DBUS_SESSION_BUS_ADDRESS и пусть приложения узнают адрес шины из свойств корневого окна.

Начиная с 15.10, экземпляр dbus для каждого сеанса создается с помощью задания сеанса Upstart. Файл задания, о котором идет речь, /usr/share/upstart/sessions/dbus.conf, Вы можете заменить случайный адрес по умолчанию, переопределив pre-start script строфа, которая указывает адрес для использования. Создайте ~/.config/upstart/dbus.override со следующим:

pre-start script
    DBUS_SESSION_BUS_ADDRESS=unix:path=$HOME/.dbus-$(hostname)-$(echo $DISPLAY | sed -e s/:/%3A/)
    initctl set-env DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS
end script

Фиксированный адрес будет использоваться после вашего следующего входа.

Или если в качестве меня вы не используете гном:

unset DBUS_SESSION_BUS_ADDRESS

Это, очевидно, ошибка в gconf, в которой уже есть исправление (если я правильно понял из этого сообщения об ошибке). В то же время, следующие проблемы должны обойти проблему:

export DBUS_SESSION_BUS_ADDRESS=$(tr '\0' '\n' < /proc/$(pgrep -U $(whoami) gnome-session)/environ|grep ^DBUS_SESSION_BUS_ADDRESS=|cut -d= -f2-)

tmux можно сказать всегда сбрасывать определенные переменные env:

update-environment variables

Set a space-separated string containing a list of environment variables to
be copied into the session environment when a new session is created or an
existing session is attached. Any variables that do not exist in the source
environment are set to be removed from the session environment (as if -r was
given to the set-environment command). The default is "DISPLAY SSH_ASKPASS
SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY".

Исходя из этого, может быть целесообразно добавить DBUS_SESSION_BUS_ADDRES к этой опции в ~/tmux.conf:

set-option -g update-environment "DBUS_SESSION_BUS_ADDRESS DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"

Это сработало для меня.

Другие вопросы по тегам