Как мне использовать emacsclient для подключения к удаленному экземпляру emacs?


44

Я хотел бы иметь возможность запускать emacs на одном компьютере:

server $ emacs --daemon

А потом подключитесь к нему из другого:

local $ emacsclient -c server

Это возможно? Если так, то как?


1
Просто подсказка: если вам не нужно поддерживать удаленный сеанс Emacs и вы просто хотите редактировать файлы на удаленном хосте с помощью Emacs, то вы можете попробовать TRAMP, который позволяет прозрачно редактировать файлы по сети.
паприка

@paprika Я думаю, что OP хочет использовать удаленную конфигурацию emacs локально. Следовательно, TRAMP может не подойти. По этой причине я поставил перед ответом отказ от ответственности.
Вамси

3
Был предмет обсуждения StackOverflow на эту тему: stackoverflow.com/questions/12546722/…
Crash Coredump

Ответы:


21

Вы не можете использовать emacsclient для подключения к экземпляру Emacs, запущенному на удаленном компьютере. Эта концепция клиент-сервер связана с (локальными) процессами, а не с сетевыми узлами. Однако вы можете использовать различные сетевые технологии для входа на удаленный компьютер, подключения к работающему на нем серверу emacs и локального отображения экрана emacsclient. В зависимости от используемой операционной системы работа в сети может осуществляться через SSH (терминал / X-Forwarding), VNC, RDP и т. Д.

ОБНОВЛЕНИЕ :
Как отмечали некоторые люди, emacsclient действительно имеет возможность подключиться к серверу через TCP. Тем не менее, emacsclient никогда не предназначался для удаленного использования, опция сокета TCP необходима для совместимости с не-UNIX системами (то есть операционными системами, где сокеты домена UNIX недоступны, как Windows).


4
Согласно этому посту ваше утверждение не совсем верно. Не могли бы Вы уточнить?.
DJJ

5
@paprika: Нет, механизм аутентификации, используемый для соединения TCP, был разработан специально для случая удаленного доступа. Я настаивал на использовании TCP на стороне Windows, чтобы этот код также был полезен на POSIX для удаленных подключений, тем самым уменьшая специфичный для Windows код и добавляя функциональность на стороне POSIX.
Стефан

9

Возможно, это не то, о чем вы просили, но при условии, что вы настроили ssh с X-forwarding, вы можете запустить emacsclient на сервере и переслать его на удаленный DISPLAY. (Отказ от ответственности: код, введенный непосредственно в веб-форму)

 local> ssh server -f emacsclient -c --display=$DISPLAY

Нет, это не имеет отношения к вопросу.
heroxbd

4

Это может быть не то, что вы хотите, но на всякий случай посмотрите, может ли это как-то вам помочь.

Я обычно работаю в виртуальной машине, загруженной с помощью Vagrant, мой ~/.emacs.dкаталог синхронизируется между моей машиной (локальной) и виртуальной машиной (удаленной), помещая в Vagrantfileфайл следующее:

config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"

Кроме того, моя конфигурация Emacs автоматически запускает сервер при запуске:

(require 'server)
(setq server-use-tcp t
      server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
    (server-start))

Поэтому, когда я запускаю сервер Emacs внутри виртуальной машины, я могу подключиться к нему следующим образом:

ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'

имя хоста виртуальной машины - это имя хоста виртуальной машины, которую я настроил в моей ~ / .ssh / config:

Host <virtual machine hostname>
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/anler/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

Примечание: перед запуском сервера Emacs внутри виртуальной машины я проверяю, что ~/.emacs.d/server/serverфайл отсутствует (если я просто удаляю его), потому что иначе он не будет работать.


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

Вам не нужно указывать файл закрытого ключа в командной строке, если ваш файл идентификации правильно установлен в вашем .ssh/configфайле. Вам просто нужно указать Host. В случае сомнений вы можете использовать вывод команды: vagrant ssh-configустановить свой ~/.ssh/configфайл.
Александро де Оливейра

3

истощение и TRAMP

Автоматически открывать удаленные файлы в локальном Emacs

У меня был успех с первым решением. Второй, кажется, проще, я еще не попробовал.


7
Ответ выглядит интересно, но, пожалуйста, не размещайте ссылки. Включите некоторые выдержки и фрагменты, чтобы ответ встал на ноги.
Малабарба
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.