Estou tentando abrir uma sessão emacsclient de um host remoto. Eu andei pelas etapas a seguir no site do tramp. Como posso usar o TRAMP para conectar-se a uma sessão remota do Emacs?
Eu vou levá-lo através do passo
no host remoto colocado no arquivo .emacs
(require 'server) (setq server-host "<IP ADDRESS of remoteHost>" server-use-tcp t) (server-start)
iniciar sessão do emacs no host remoto
copie o ~ / emacs.d / server / server de remoteHost para localHost e mantenha o mesmo caminho. (localHost: ~ / emacs.d / server / server)
no host emacs do host local
emacsclient /ssh:test@remoteHost:/tmp/test.py
Mas recebi o seguinte erro no meu localHost
;; emacsclient: can't find socket; have you started the server?
;; To start the server in Emacs, type "M-x server-start".
;; emacsclient: connected to remote socket at `Remotehost`
;; emacsclient: connect: No route to host
;; emacsclient: No socket or alternate editor. Please use:
;; --socket-name
;; --server-file (or environment variable EMACS_SERVER_FILE)
;; --alternate-editor (or environment variable ALTERNATE_EDITOR)
Portanto, parece conectar-se ao remoteHost, mas não consegue encontrar uma rota. Perguntas semelhantes foram feitas no SO. Aqui e aqui . Também há um código legal sobre como copiar diretamente o ~ / .emacs.d / server / server do remoteHost para o localHost aqui .
Qualquer ajuda será muito apreciada.
Atualização Reuni mais algumas informações sobre o assunto. Parece que várias pessoas tentaram essa tarefa e algumas parecem ter sido bem-sucedidas, mas eu encontrei qualquer solução para o meu problema específico. Usando o servidor Emacs e o emacsclient em outras máquinas como outros usuários
Perguntas semelhantes também foram feitas no emacs.stack.exchange, como como usar o emacsclient para conectar-se a uma instância do emacs remota
Update1
Há um post interessante aqui encaminhando gráficos com ssh. É fácil de implementar e funciona muito bem se sua conexão é boa o suficiente, mas não utiliza tramp.
fonte
Respostas:
Acho que uma das coisas que não estão claras nas perguntas frequentes é a necessidade de que o servidor e o cliente sejam resolvidos um do outro. Você pode ver esta discussão de 2009. Eventualmente, naquela época, consegui que funcionasse, mas agora vejo o mesmo que o OP. Isto é o que eu tentei:
setup.el:
Eu iniciei o servidor assim:
Isso dará a você uma janela do Emacs. Se você não quiser, comente a
(server-start)
linha e inicie o Emacs assim:Agora, na máquina remota, copiei o cookie conforme as instruções nas Perguntas frequentes e tentei iniciar o cliente assim:
192.168.2.200 é o ip do cliente remoto. É por isso que a resolução de nomes nos dois sentidos é necessária. Essencialmente,
/ssh:[email protected]:/path/to/foo
é o caminho que você daria ao servidor para editar remotamente.Eu vejo uma falha como o OP. Corri
emacsclient
sob o gdb e rastreei o problema até uma falha na conexão ao soquete.de emacsclient.c :
Em seguida, executei-o
strace
e veja o seguinte:Neste ponto, não tenho certeza do que está acontecendo de errado, pois posso executar ping e ssh no servidor.
fonte
Essa não é exatamente a resposta para minha pergunta, mas consegui contornar o problema usando esta solução em uma postagem no SO . Só quero compartilhar a solução com quem ainda está lutando com isso.
A chave está usando o dtach with tramp para manter vivo o processo no host remoto, mesmo que você se desconecte do servidor.
Aqui está o comando para iniciar o R no servidor. É o mesmo código no SO, exceto que eu habilito o encaminhamento de porta para visualizar os gráficos criados no servidor remoto
Contanto que você não interrompa o processo de propósito ou o servidor não reinicie, você pode desconectar o que quiser e voltar ao processo quando se conectar novamente.
Também é fácil estender para outros processos remotos. Aqui está o que eu uso para python, por exemplo
Eu ainda preciso usar para reunir as duas funções para ser mais conciso. Mas isso pode fazer você ir.
fonte