Сообщение emacsclient отказано

Я запускаю emacs в режиме демона, и я отключился от сервера, на котором он был запущен. После повторного подключения, когда я запускаю

emacsclient -nc 

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

connect localhost port 6012: соединение отклонено

ОШИБКА : Показать localhost: 12.0 невозможно открыть

Демон по-прежнему работает, но я не могу понять, как подключиться к нему, какие-либо предложения?

Другие интересные факты, которые могут быть или не быть релевантными:

Я подключен через сеанс экрана к головному узлу, а затем к другому боковому узлу сервера.

Я запускаю эту настройку в течение нескольких дней, и обычно я могу повторно подключиться без проблем.

Я уверен, что я мог бы просто перезапустить демон, но я бы хотел восстановить рабочий сеанс, поскольку он связан с выполняемой работой matlab, с которой я взаимодействую с помощью matlab-emacs.

Редактировать: я попробовал Gilles предложение, и я все еще сталкиваюсь с проблемами

 echo $DISPLAY 

возвращается

локальный: 18,0

Я пошел в сеанс экрана и побежал

 export DISPLAY=localhost:18.0 

и даже снова запустил echo $ DISPLAY внутри сеанса экрана

локальный: 18,0

Теперь emacsclient -nc возвращается

ОШИБКА : отображение localhost: 18.0 невозможно открыть

который теперь является тем же самым дисплеем, который используется на компьютере, на котором выполняется сеанс экрана, но при этом отсутствует соединение.

Обратите внимание, что я также

  export display=localhost:18 

edit2: Заметка о моей системной архитектуре. Мой ноутбук, в моем офисе, подключен через ssh к серверу «host1». host1 имеет несколько компьютеров узлов. Сначала я создаю или запишусь на сеанс экрана

  screen -S ohnoplus-five 

и затем подключитесь к node005 с помощью

 ssh node005 

Затем я отсоединяюсь от экрана без выхода из узла005 и снова присоединяюсь к

screen -r ohnoplus-five

от host1

В ответ на предложения Gills я выполнил экспорт DISPLAY = localhost18.0, который является отображением, возвращаемым echo $ DISPLAY на host1, а не моим локальным ноутбуком.

One Solution collect form web for “Сообщение emacsclient отказано”

Соединения удаленного GUI (X11) проходят через порт TCP 6000+ n, где n – номер дисплея¹. Таким образом, два сообщения относятся к одной и той же проблеме: некоторые программы пытались подключиться к отображению 12 и не удалось.

Emacsclient не делает соединений X11, Emacs делает. Поэтому, если вы видите это сообщение, это означает, что Emacsclient удалось связаться с Emacs и сообщить ему, чтобы открыть новый фрейм. Emacsclient запрашивает кадр графического интерфейса, если он считает, что имеется дисплей X11, и кадр терминала в противном случае. Когда задана переменная среды DISPLAY , Emacsclient считает, что дисплей X11 доступен.

Переменная среды DISPLAY устанавливается автоматически SSH, когда она пересылает соединение X11 обратно на ваш локальный компьютер. Но когда вы присоединяетесь к существующей сессии экрана, вы получаете среду, которая была установлена ​​в сеансе экрана, включая переменную DISPLAY . Если вы отключите и снова подключитесь, нет гарантии, что номер дисплея одинаковый2.

Чтобы обновить переменную DISPLAY , отделитесь от сеанса экрана, запустите echo $DISPLAY чтобы увидеть значение, заданное SSH (например, localhost:13 ), затем повторно подключайтесь к сеансу экрана и запускайте export DISPLAY=localhost:13 (или независимо от того, является). Если в сеансе экрана есть несколько окон, вам нужно сделать это в каждом из них. Если вы создаете новые окна, наберите Ctrl + A : setenv DISPLAY localhost: 13` Enter, чтобы установить переменную среды в самом экране, для новых окон.

Если вы предпочитаете, вы можете открыть рамку терминала, отключив DISPLAY или выполнив emacsclient -nw .

¹ SSH использует номера дисплеев, начиная с 10, оставляя только номера 0-9 для локальных дисплеев. В типичной ситуации дисплей 12 означает, что это третье GUI-соединение, которое было открыто через SSH.
² На самом деле, если вы отключились из-за проблемы с сетью, но вскоре после этого подключились, вполне возможно, что удаленная машина еще не заметила проблему с сетью – все, что она знает, это то, что прошло какое-то время, поскольку клиент отправил что-нибудь, но это просто нормальная бездеятельность, и в этом случае дисплей 12 все еще используется для удаленной машины.


Если у вас несколько переходов SSH, а соединение с локальной машиной на промежуточную машину прерывается и возобновляется, то при возобновлении номер дисплея на промежуточной машине изменился, но соединение SSH от промежуточной машины до конечной машины все еще сохраняется пересылает исходный номер дисплея.

В этом случае было бы проще, если бы вы запускали Screen только на последней машине и использовали промежуточную машину в качестве прокси . Добавить

 Host node[0-9]* ProxyCommand ssh -W %h:%p host1 

к вашему ~/.ssh/config и запустите ssh node005 . Тогда вам не нужно беспокоиться о промежуточной машине.

Если вам нужно запустить Screen на промежуточной машине, вам придется перезапустить SSH-соединение с host1 на node005 после обновления переменной DISPLAY . (Вы также можете перенаправить TCP-соединение со старого номера дисплея на новый, но это будет работать, только если старый номер дисплея не был повторно использован.)

  • Настройка 3-х мониторов?
  • Кто хранит буферы копирования / вставки в X11?
  • Перенос WASD + R_Shift на стрелки
  • Аутентификация X11 не работает в `sudo sux / sudo su`, но работает в` sux / su.` Почему?
  • Отсутствует событие KeyPress
  • Можете ли вы назначить произвольные привязки клавиш в xmonad?
  • Переадресация X11 прерывается при переключении пользователей
  • Настройка сенсорного экрана в Linux
  • Как я могу выйти из графической среды из командной строки?
  • Как использовать SSH-ключи для SSH без пароля через приложения X11 (например, nautilus)?
  • Как сообщить xrandr, чтобы моя мышь перемещалась между мониторами?
  • Interesting Posts

    Преимущества загрузки файлов в / tmp перед переходом на постоянное хранилище?

    Как реплицировать установленный пакет из одного экземпляра Fedora в другой?

    tee stdout to stderr?

    Ошибка с зависимостями выше ожидаемой

    Почему командный игрок снова начинается после того, как его убили

    Почему SSH добавляет запись known_host для IP-адреса?

    Создайте раздел NTFS (в Linux) для двойной загрузки в Linux / Windows 7

    Как создать среду для библиотек и двоичных файлов?

    Сбор данных EXIF ​​каталога

    dpkg или apt-get, который из двух дает более полный результат?

    Ошибка монтирования файловой системы NTFS в Linux?

    Как выделить текст в Caliber?

    Пробовал установку Mint 17.1 64bit, удаленный загрузочный раздел Windows 8.1, когда я перезаписал его при загрузке Linux

    Копирование файла, который записывается одновременно

    Почему мой Cygwin Bash всегда читается с терминала, когда я пытаюсь выполнить внешнюю команду?

    Linux и Unix - лучшая ОС в мире.