emacsclient를 사용하여 원격 emacs 인스턴스에 연결하려면 어떻게합니까?


44

한 컴퓨터에서 emacs를 실행할 수 있기를 원합니다.

server $ emacs --daemon

그런 다음 다른 곳에서 연결하십시오.

local $ emacsclient -c server

이게 가능해? 그렇다면 어떻게?


1
힌트 : 원격 Emacs 세션을 계속 실행할 필요가없고 원격 호스트에서 Emacs를 사용하여 파일을 편집하려는 경우 TRAMP를 시도하여 네트워크를 통해 파일을 투명하게 편집 할 수 있습니다.
파프리카

@paprika OP가 로컬 원격 emacs 구성을 사용하고 싶다고 생각합니다. 따라서 TRAMP가 적합하지 않을 수 있습니다. 이것이 제가 답변에 고지 사항을 접두사로 사용한 이유입니다.
Vamsi

3
주제에 대해 StackOverflow에 대한 토론이있었습니다 : stackoverflow.com/questions/12546722/…
Crash Coredump

답변:


21

emacsclient를 사용하여 원격 컴퓨터에서 실행중인 Emacs 인스턴스에 연결할 수 없습니다. 이 클라이언트-서버 개념은 네트워크 노드가 아닌 (로컬) 프로세스와 관련이 있습니다. 그러나, 당신은 할 수 원격 컴퓨터에 로그인하기 위해 다양한 네트워크 기술을 사용하여,이 실행 이맥스 서버에 연결하고 로컬는 emacsclient의 화면을 표시합니다. 사용되는 운영 체제에 따라 SSH (터미널 / X- 전달), VNC, RDP 등을 통해 네트워킹을 수행 할 수 있습니다.

업데이트 :
일부 사람들이 지적했듯이 emacsclient에는 실제로 TCP를 통해 서버에 연결하는 옵션이 있습니다. 그러나 emacsclient는 원격으로 사용하기위한 것이 아니며 TCP 소켓 옵션은 비 UNIX 시스템 (예 : Windows와 같이 UNIX 도메인 소켓을 사용할 수없는 운영 체제)과의 호환성을 위해 필요합니다.


4
게시물 에 따르면 귀하의 진술이 정확하지 않습니다. 좀 더 구체적으로 말씀해 주시겠습니까?.
DJJ

5
@paprika : 아니요. TCP 연결에 사용 된 인증 메커니즘은 원격 액세스 사례를 위해 특별히 설계되었습니다. Windows 측에서 TCP 사용을 추진하여 코드가 POSIX에서도 원격 연결에 유용하므로 Windows 고유 코드를 줄이고 POSIX 측에 기능을 추가했습니다.
Stefan

9

아마도 당신이 요구 한 것이 아니라 X 전달을 사용하여 ssh 설정을 가정하면 서버에서 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가 찾은 첫 번째 서버에 자동으로 연결되므로 서버 파일을 명시 적으로 전달할 필요가 없습니다.
Vamsi

파일에 ID 파일이 올바르게 설정되어 있으면 명령 줄에서 개인 키 파일을 지정할 필요가 없습니다 .ssh/config. 을 지정하면 Host됩니다. 의심스러운 경우 명령의 출력을 사용 vagrant ssh-config하여 ~/.ssh/config파일 을 설정할 수 있습니다.
Alexandro de Oliveira

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.