Чому я не можу запускати програми Gnome через віддалений сеанс SSH?


9

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

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

Як запустити gnome-термінал у цій ситуації?


Я не бачу тут запитання. Ви повинні зробити щось з цим до того, як ваша посада закриється.
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-start відображає потрібні нам змінні; за допомогою export $(dbus-launch)ми отримуємо вихід dbus-start та експортуємо змінні


5

Жоден з попередніх відповідей не працював у моєму випадку, але запуск програми через dbus-start не виконав цю роботу:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"

3

Я знайшов це:

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

Що змусило мене спробувати це:

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

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


2
Неймовірно, що він працював також у 16.04. Мені просто довелося змінити команду перезавантаження на sudo service dbus restart. Дякую!
Авіо

⚠️ Попередження: перезапуск dbus, ймовірно, перезапустить весь ваш X сеанс
Адам Кац


0

Цікаво ... просто перезапуск dbus не працював для мене, мені довелося також видалити файл ідентифікатора машини, а також перезапустити.

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

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

Це були помилки, які я бачив у командному рядку:

яст2

** (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] 

Дякую за пораду!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.