Як я можу використовувати 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 / ...
Краш 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-переадресації, ви можете запустити 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

emacsclient і TRAMP

Автоматично відкривати віддалені файли в локальних програмах emacs

Я мав успіх з першим рішенням. Друга, здається, простіша, я ще спробую це випробувати.


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