Estoy tratando de abrir una sesión de emacsclient desde un host remoto. Seguí los siguientes pasos en el sitio web de vagabundo ¿Cómo puedo usar TRAMP para conectarme a una sesión remota de Emacs?
Te guiaré por el paso
en el host remoto puesto en el archivo .emacs
(require 'server) (setq server-host "<IP ADDRESS of remoteHost>" server-use-tcp t) (server-start)
iniciar sesión de emacs en host remoto
copie el ~ / emacs.d / server / server de remoteHost a localHost mantenga la misma ruta. (localHost: ~ / emacs.d / server / server)
en el host local emacs shell
emacsclient /ssh:test@remoteHost:/tmp/test.py
Pero obtuve el siguiente error en mi 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)
Por lo tanto, parece conectarse a host remoto pero no puede encontrar una ruta. Se han hecho preguntas similares sobre SO. Aquí y aquí . También hay un buen código para copiar directamente el ~ / .emacs.d / server / server desde remoteHost a localHost aquí .
Cualquier ayuda será apreciada.
Actualización He reunido más información sobre el asunto. Parece que varias personas han intentado esta tarea y algunas parecen haber tenido éxito, pero pude encontrar alguna solución a mi problema específico. Usando el servidor Emacs y emacsclient en otras máquinas como otros usuarios
También se han hecho preguntas similares en emacs.stack.exchange como how-do-i-use-emacsclient-to-connect-to-a-remote-emacs-instance
Actualización1
Hay un interesante post aquí reenvío de gráficos con ssh. Es fácil de implementar y funciona bastante bien si su conexión es lo suficientemente buena, pero no utiliza vagabundo.
fuente
Respuestas:
Creo que una de las cosas que no están claras en las preguntas frecuentes es la necesidad de que tanto el servidor como el cliente puedan resolverse entre sí. Puedes ver este hilo de 2009. Finalmente, en aquel entonces lo puse a funcionar, pero ahora veo lo mismo que el OP. Esto es lo que probé:
setup.el:
Comencé el servidor así:
Sin embargo, esto le dará una ventana de Emacs. Si no quiere eso, comente la
(server-start)
línea e inicie Emacs así:Ahora en la máquina remota, copié la cookie como se indica en las preguntas frecuentes e intenté iniciar el cliente de esta manera:
192.168.2.200 es la ip del cliente remoto. Por eso es necesaria la resolución de nombres en ambos sentidos. Esencialmente,
/ssh:[email protected]:/path/to/foo
es la ruta de vagabundo que le daría al servidor para editar de forma remota.Veo una falla al igual que el OP. Me encontré
emacsclient
bajo gdb, y remonta el problema a un fallo en la conexión a la toma de corriente.de emacsclient.c :
Luego lo ejecuté
strace
y veo lo siguiente:En este punto, no estoy seguro de qué va mal, ya que puedo hacer ping y ssh en el servidor.
fuente
Esa no es exactamente la respuesta a mi pregunta, pero me las arreglé para eludir el problema utilizando esta solución desde una publicación en SO . Solo queriendo compartir la solución con quien todavía está luchando con esto.
La clave es usar dtach con vagabundo para mantener vivo el proceso en el host remoto, incluso si se desconecta del servidor.
Aquí está el comando para iniciar R en el servidor. Es el mismo código en SO, excepto que habilito el reenvío de puertos para ver gráficos creados en el servidor remoto
Mientras no elimine el proceso a propósito o el servidor no se reinicie, puede desconectarse como desee y recuperar el proceso cuando vuelva a conectarse.
También es fácil de extender a otros procesos remotos. Aquí está el que uso para python, por ejemplo
Todavía necesito usar para juntar ambas funciones para ser más conciso. Pero podría ponerte en marcha.
fuente