Почему я не могу запустить приложения Gnome через удаленный сеанс SSH?

9

Вход на удаленный хост с помощью ssh -X me@hostя успешно запустил gnome-terminal -e "tail -F /var/log/file" &. Когда я выхожу из системы, а затем пытаюсь сделать то же самое на следующий день, я получаю следующее:

Не удалось получить сессионную шину: Не удалось подключиться к сокету / tmp / dbus-K99gT9yDjS: Соединение отклонено. Возврат в нестандартный режим. Не удалось вызвать демона GConf; выход. Не удалось связаться с сервером конфигурации; Некоторые возможные причины: вам нужно включить сеть TCP / IP для ORBit, или у вас есть устаревшие блокировки NFS из-за сбоя системы. См. Http://projects.gnome.org/gconf/ для получения информации. (Подробности - 1: Не удалось получить соединение с сеансом: Не удалось подключиться к сокету / tmp / dbus-K99gT9yDjS: Соединение отклонено)

Как мне запустить gnome-терминал в этой ситуации?

hourback
источник
Я не вижу вопроса, задаваемого здесь. Вы должны что-то с этим сделать, прежде чем ваше сообщение будет закрыто.
Agi Hammerthief
Вы можете вырезать часть «решения» из своего вопроса и представить ее в качестве ответа. Это приемлемое поведение.
Agi Hammerthief
Если вы входите на другой компьютер с SSH, вы получите доступ к оболочке / терминалу. Вам не нужно открывать окно терминала на этом компьютере. Вы можете выполнять команды непосредственно на этом компьютере, вводя их в терминал на своем компьютере.
Agi Hammerthief
2
Как говорит Найджел Нкванд, нажмите кнопку «Ответить на свой вопрос» и скопируйте и вставьте раздел « Решение » в ответ. Это не только приемлемо, но и поощряется.
Дероберт
2
Тем временем я удалил решение из вашего вопроса, так как это не вопрос. Этот вид вопросов с самостоятельным ответом более чем приветствуется, но, пожалуйста, оставляйте ответы как ответы . Загляните в наш справочный центр или возьмите 10-секундный тур для получения дополнительной информации. Вы можете увидеть исходный текст (чтобы вам не нужно было его снова записывать) в истории редактирования, к которой вы можете перейти, нажав на ссылку «Отредактировано X минут назад».
Тердон

Ответы:

7

Действительно, когда сеанс SSH открыт, он не запускает сеанс dbus. Некоторые программы могут запустить его, но тогда сессия не знает об этом (следовательно, не может закрыть его).

Незнание о сеансе dbus также означает, что программы, которые используют dbus, но не запускают его сами, будут иметь проблемы.

Секции dbus для каждой машины и для каждого дисплея X11. Их информация хранится в $ HOME / .dbus / session-bus / - однако упомянутый там процесс может быть закрыт, поэтому требуется дополнительная проверка, чтобы определить, нужен ли запуск dbus или нет. Затем переменные должны быть экспортированы в сеанс.

Тогда это работает как шарм :)

Я положил следующее в мой файл .bash_profile:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

примечания: hostnamectl является частью systemd и позволяет получить идентификатор машины, когда dbus-launch отображает нужные нам переменные; с помощью export $(dbus-launch)мы получаем вывод dbus-launch и экспортируем переменные

Пабло Саратчага
источник
5

Ни один из предыдущих ответов не работал в моем случае, но запуск приложения через dbus-launch сделал работу:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"
sabst
источник
3

Я нашел это:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639261

Что заставило меня попробовать это:

$ sudo rm /var/lib/dbus/machine-id
$ sudo service messagebus restart

Теперь я могу запустить gnome-терминал!

hourback
источник
2
Как ни странно, это сработало и в 16.04. Я просто должен был изменить команду перезагрузки на sudo service dbus restart. Спасибо!
Авио
⚠️ Предупреждение: перезапуск dbus, вероятно, перезапустит весь сеанс X
Адам Кац,
1

Просто беги:

> dbus-launch gnome-terminal
Ari
источник
1
Почему это поможет?
DarkHeart
1
Это также сработало для меня. Понятия не имею почему.
Роберт Лугг
0

Интересно ... просто перезапуск dbus у меня не сработал, мне пришлось также удалить файл идентификатора машины и перезапустить.

$ rcdbus stop
$ rm /var/lib/dbus/machine-id
$ rcdbus start

Это было на сервере SLES 11.4, который я недавно клонировал в VMWare. Моя проблема была в том, что я не мог запустить yast2 или gedit ...

Это были ошибки, которые я видел в командной строке:

yast2

** (y2controlcenter-gnome:9981): WARNING **: error accessing /desktop/gnome/lockdown/disable_command_line [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]


** (y2controlcenter-gnome:9981): WARNING **:
GError raised: [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]

user_message: [libslab_get_gconf_value: error getting /desktop/gnome/applications/main-menu/lock-down/user_modifiable_apps] 

Спасибо за совет!

Эрни
источник
-2

Попробуй это:

rm $HOME/.dbus/session-bus/*
Исаак
источник