2010-04-22 27 views
8

Tengo algunos problemas para configurar Tramp con EmacsW32 y cygwin. He configurado emacs para usar cygwin como shell usando w32shell. Asimismo, establecer la variable HOME ambiental en c:/cygwin/home/miusuario¿Es posible utilizar vagabundeo con EmacsW32 y cygwin?

El problema es que parece colgar vagabundo y que no se hace ninguna conexión:

"vagabundo espera de instrucciones para la nueva cáscara".

He intentado activar la depuración, pero solo veo este mensaje. Esperando obtener algunos consejos sobre esto. Gracias.

+0

han intentado 'c: \ cygwin' con la barra inclinada hacia otro lado? – Mica

Respuesta

5

Tomar nota de la información relacionada con cygwin-emacs en el wiki: http://www.emacswiki.org/emacs/TrampMode

No consumo EmacsW32, pero yo no utilizar con éxito TRAMP a través de ssh con Cygwin y NT Emacs.

Nunca conseguí que TRAMP funcionara sin un agente ssh (es decir, solicitando credenciales), como has notado, simplemente se cuelga, pero funciona bien con uno, así que no perdí tiempo tratando de resolverlo. Asumiendo que también está feliz de utilizar un agente (y ya ha generado las llaves y los archivos según sea necesario authorized_keys añadido), el método que funciona para mí es:

  1. Ejecutar ssh-agente de cygwin.
  2. Ejecute NT Emacs a través de cygwin (para que herede las variables de entorno ssh-agent).
  3. Use 'sshx' como el método TRAMP (puede especificarlo manualmente en cada ruta de archivo, pero le recomiendo que sea el predeterminado, con (setq tramp-default-method "sshx")).

Esos puntos están todos cubiertos en el Wiki, pero también se pueden automatizar las cosas un poco:

Para el paso 1, perfil fiesta se inicia automáticamente un agente ssh si uno no se está ejecutando, o me lleva para mi contraseña si mi identidad ha expirado. (. Ver código de abajo)

Para el paso 2, el objetivo de mi acceso directo de Windows para emacs lanzamiento se ve así:

C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"

El argumento --login significa que se ejecuta perfil fiesta, que asegura que el paso 1 siempre se ha tenido en cuenta antes de que se inicie emacs.

(Configuración HOME no es necesario para vagabundo, pero %APPDATA% es el valor predeterminado en NT Emacs, y esto impide que el directorio inicial de Cygwin que pueda prevalecer, por lo tanto, mantener sus emacs config coherente, independientemente de si utiliza este método abreviado para ejecutarlo .)

Finalmente, aquí está el código de mi cygwin .bash_profile que administra mi ssh-agent. Es un poco hacky, pero funciona para mí.

Tenga en cuenta que caduco mi identidad después de 4 horas (14400 segundos). TRAMP puede colgarse después de que eso suceda (como se mencionó anteriormente, nunca lo obtuve para solicitar credenciales), así que tenga en cuenta este problema. Escriba C-g para evitar que intente conectarse. Para reanudar la conectividad, generalmente puede iniciar otro shell cygwin, volver a ingresar su frase de contraseña, y luego TRAMP estará contento de nuevo. Ocasionalmente no ha respondido, pero matar el * buffer * vagabundo lo resolverá.No caducar su identidad debe eludir este problema, por supuesto, debería ser aceptable.

SSH_ENV="${HOME}/.ssh/environment" 

# Run ssh-agent, if one is not already running 
function start_agent { 
    echo "Initialising new SSH agent..." 
    /usr/bin/ssh-agent -t 14400 | sed 's/^echo/#echo/' > "${SSH_ENV}" 
    echo succeeded 
    chmod 600 "${SSH_ENV}" 
    . "${SSH_ENV}" >/dev/null 
    /usr/bin/ssh-add; 
} 

# Source SSH settings, if applicable 
if [ -f "${SSH_ENV}" ]; then 
    . "${SSH_ENV}" >/dev/null 
    #ps ${SSH_AGENT_PID} doesn't work under cywgin 
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || { 
     start_agent; 
    } 
    #if our ssh-added identity has expired (see -t option to ssh-agent) 
    #then we need to re-add it 
    if ! /usr/bin/ssh-add -l >/dev/null; then 
     /usr/bin/ssh-add; 
    fi 
else 
    #no ssh-agent running at the moment 
    start_agent; 
fi 
+0

para trabajar con w32 emacs, puede usar masilla y es agente de gestión de claves pagent. Para conectarse, use 'pscp' como el método de vagabundeo. una vez que tienes esa configuración, vagabundo funciona sin problemas. – vedang

+0

Gracias por sus respuestas. Me arregló el problema para usar un agente de administración de claves. Fui con la solución ssh-agent ya que la administración de claves es un poco engorrosa con masilla. – grm

7

Como nota a pie, desde entonces he cambiado la forma en que uso TRAMP en Windows.

TRAMP en Windows simplemente era demasiado lento. La característica Control Master de OpenSSH era lo que necesitaba, esto mantiene una conexión SSH persistente abierta, por lo tanto, elimina la costosa conexión que de otro modo se requiere para cada operación de TRAMP. Desafortunadamente, Cygwin es fundamentalmente incapaz de soportar Control Master en este momento:/

Siendo este el caso, mi solución actual no es ejecutar Emacs en Windows. En su lugar, instalé el servidor X.Org de Cygwin y comencé a ejecutar Emacs en una máquina virtual GNU/Linux (alojada en mi caja de Windows) y utilizando la pantalla Cygwin X.

Esto funciona realmente bien.

Estoy ejecutando emacs en modo daemon, lo que significa que no importa si hay algún problema con el servidor X, y si necesito cerrar el cuadro de Windows, simplemente puedo guardar el estado de la VM, restaurarlo luego, y no perder realmente mi sesión (*). (desktop.el proporciona una gestión de sesión bastante decente en cualquier caso, o si necesita reiniciar la máquina virtual, pero si está utilizando eso, puede modificar la variable desktop-files-not-to-save para que no pase por alto todas sus memorias tampón TRAMP ! yo sólo puse a "^$")

Asegúrese de iniciar el servidor X del Cygwin con startxwin en lugar de startx (el primero permite a windows del servidor X para que aparezca como una ventana normal de windows), y luego de una xterm se puede ejecutar ssh -Y (me)@(linux) -f "emacs --daemon" para iniciar el servidor inicialmente y ssh -Y (me)@(linux) -f "emacsclient -c" para iniciar un nuevo cliente.

Los métodos 'scpc' y 'rsyncc' TRAMP usan Control Master automáticamente. Aún así, ejecuto un ssh-agent en la caja de Linux (para evitar la necesidad de autenticar cuando abro shells remotos desde emacs, etc.). El comando 'emacs --daemon' se convierte en algo así como ssh -Y (me)@(linux) -f "source ~/.ssh/agent-environment && emacs --daemon", suponiendo que dirigió/copió la salida de ssh-agent a ese archivo cuando lo ejecutó (no me molesto con un tiempo de espera de identidad para este).

Y, por último, en la última nota, si está utilizando un mecanismo similar al que mencioné originalmente para administrar su cygwin ssh-agent en su perfil bash, tome nota de lo que sucede cuando inicia el servidor X desde el Acceso directo de Windows cuando no tiene una identidad autenticada cargada: nada en absoluto (hasta que mire en el administrador de tareas, y vea el proceso de ssh-add ahí). En consecuencia, recomiendo usar siempre startxwin desde la línea de comandos, para evitar esto.

editar:
(*) Esa fue una mala suposición. Desde entonces, me he dado cuenta de que reiniciar el servidor X en realidad me impide volver a conectarme al daemon de emacs después, lo que es bastante desafortunado. En consecuencia, confío plenamente en la biblioteca de escritorio para restaurar mi sesión. Uso auto-save-hook para guardar regularmente mi archivo de escritorio para mantenerlo actualizado. Consulte la Wiki de Emacs para esta y otras opciones para mejorar la función de escritorio.

+0

Además, suponiendo que desea compartir sus .emacs entre los cuadros de Windows y Linux, asegúrese de ajustar su integración Win32/Cygwin en algo como esto: (cuando (eq tipo de sistema 'windows-nt) (requiera' my-win32) – phils

3

Solía ​​usar el EmacsW32, pero tenía un montón de problemas como este. Todos se fueron cuando cambié a Cygwin's Emacs. Probablemente ya esté instalado. Simplemente escriba lo siguiente en el indicador bash:

 
XWin -multiwindow & 
export DISPLAY=:0.0 
emacs 

Será un poco más ligero que una máquina virtual Linux.

0

Hoy en día Cygwin viene con emacs-w32 por lo que no necesita iniciar el servidor X.

me recomiendan para iniciarlo por:

run emacs-w32 
run emacsclient-w32 -a "" %FILE_OR_DIR% 

Debido a que es Cygwin Emacs con interfaz gráfica de usuario de Windows simplemente nativa funciona bien con TRAMP para sshing a los hosts de Linux.

Puede verificar mi secuencia de comandos http://hg.defun.work/utils/file/tip/emacs/e.bat como un abridor de archivos rápido.

ACTUALIZACIÓN Con Windows moderna y UAC puede ser mejor para funcionar como Cygwin Emacs:

cygstart --action=runas run emacs-w32 
Cuestiones relacionadas