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

Я настроил и запустил сервер emacs в режиме TCP:

  1. добавленной (setq server-host "10.16.184.33") а также (setq server-use-tcp t) в.emacs
  2. побежал emacs --daemon

На том же хосте работает emacsclient -t вызывает кадр emacs в текущем терминале и работает emacsclient -c выводит новый графический клиентский фрейм, как и ожидалось.

На другом хосте работает emacsclient -t -f ~/.emacs.d/server/server появляется для успешного подключения к удаленному серверу emacs, но в терминале не создается кадр:

$ emacsclient -t -f ~/.emacs.d/server/server
emacsclient: connected to remote socket at 10.16.184.33

В этот момент emacsclient работает на переднем плане, и Ctrl-c останавливает его с помощью SIGTERM.

значение server-client переменная показывает, что удаленный клиент Emacs подключен:

server-clients's value is
(#<process server <10.16.184.33:52710>> #<process server <10.16.177.8:59460>>)

Вещи, которые я проверил:

  • версии Emacs и emacsclient: все 24,3
  • при обмене, какие машины являются сервером и удаленным клиентом, возникает та же проблема, кроме...
  • emacsclient печатает дополнительное сообщение об ошибке

    emacsclient: connected to remote socket at 10.16.177.8
    *ERROR*: Could not open file: /dev/pts/26
    

Есть идеи что еще проверить или настроить?

1 ответ

Решение

Там нет ничего, что вы могли бы "проверить или настроить". Вы просто не можете использовать emacsclient удаленно, потому что оба процесса совместно используют фрейм, который не работает удаленно по понятным причинам.

Если клиент подключается к серверу Emacs, он фактически не создает сам фрейм. Скорее, он просто сообщает серверу, какой тип фрейма создать, т. Е. Является ли фрейм GUI или терминальным фреймом. Затем сервер создает фрейм на основе запроса и параметров клиента.

В частности, в случае клиента TTY (т.е. emacsclient -t) сервер пытается создать фрейм на клиентском TTY. Очевидно, что это не будет работать, если сервер работает в другой системе. TTY локальные и не доступны удаленно.

К вашему сведению, "режим TCP" сервера Emacs никогда не был предназначен для удаленного доступа. Это просто обходной путь для систем, которые не поддерживают локальные сокеты Unix, то есть Windows.

Вы даже не хотите пытаться заставить это работать, потому что это ужасно небезопасно. Будучи задуман как локальный протокол, сервер Emacs не поддерживает ни шифрование трафика, ни аутентификацию. Запустив удаленно доступный сервер Emacs, вы позволяете любой другой системе запускать произвольный Emacs Lisp на вашем компьютере.

Правильный способ удаленного использования Emacs - это SSH. Установите SSH-сервер в удаленной системе, затем подключитесь к системе через SSH и запустите emacsclient -t в удаленной оболочке.

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