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"
Это сработало для меня.