8
votes

Utiliser un tramp avec EmacSW32 et Cygwin, possible?

J'ai des difficultés à mettre en place un tramp avec EmacSW32 et Cygwin. J'ai configuré Emacs pour utiliser Cygwin comme Shell à l'aide de W32Shell. J'ai également défini la variable d'environnement domestique à C: / Cygwin / Home / MyUSNername

problème est que le tramp semble suspendre et qu'aucune connexion n'est faite:

"Tramp d'attente pour les invites pour la nouvelle coquille".

J'ai essayé d'activer le débogage, mais je ne vois toujours que ce message. Hâte d'obtenir des conseils à ce sujet. Merci.


1 commentaires

Avez-vous essayé c: \ cygwin avec la barre oblique l'autre sens?


4 Réponses :


7
votes

Prenez note des informations liées à Cygwin sur le Wiki EMACS: http://www.emacswiki.org/emacs/trampmode

Je ne sais pas Utilisez EmacSw32, mais j'utilise avec succès le tramp sur SSH avec Cygwin et NT Emacs. P>

Je n'ai jamais eu de tramp sans agir sans agent SSH (vous invitant à des références) - Comme vous l'avez remarqué - Mais cela fonctionne bien avec un, donc je n'ai pas passé du temps à essayer de résoudre cela. En supposant que vous êtes également heureux d'utiliser un agent (et vous avez déjà généré vos clés et ajouté des fichiers autorisés si nécessaire), l'approche qui fonctionne pour moi est la suivante: p>

  1. Exécutez SSH-Agent de Cygwin. Li>
  2. Lancez NT Emacs via Cygwin (afin qu'il hérite des variables d'environnement SSH-Agent). LI>
  3. Utilisez 'sshx' comme méthode du tramp (vous pouvez le spécifier manuellement dans chaque chemin de fichier, mais je vous recommande de le faire par défaut, avec (méthode SSTQ TRAMP-défaut "SSHX") CODE>) . li> ol>

    Ces points sont tous couverts au wiki, mais vous pouvez également automatiser les choses quelque peu: p>

    pour l'étape 1, mon profil Bash commence automatiquement un agent SSH si l'on ne marche pas déjà , ou m'emprime ma passhrasphrase si mon identité a expiré. (Voir le code ci-dessous.) P>

    Pour l'étape 2, la cible de mon raccourci Windows pour le lancement de EMACS ressemble à ceci: p>

    C: \ cygwin \ bin \ bash.exe --Login -c "env Accation = \" `cygpath '% Appdata%'` \ "/cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"

    le - Connexion CODE> Argument signifie que mon profil Bash est exécuté, ce qui garantit que l'étape 1 a toujours été prise en charge avant le démarrage d'EMACS. P>

    (paramètre Accueil Code > n'est pas nécessaire pour le tramp, mais % appdata% code> est la valeur par défaut sous EMACS NT, ce qui empêche le répertoire de base Cygwin de la priorité, en gardant donc votre configuration EMACS cohérente, que vous utilisiez ce raccourci. Pour l'exécuter.) P>

    Enfin, voici le code de mon cygwin .bash_profile qui gère mon agent SSH. C'est un peu hacky, mais ça marche pour moi. P>

    Notez que j'expire mon identité après 4 heures (14400 secondes). Le tramp peut accrocher après cela se produit (comme mentionné précédemment, je ne l'ai jamais pu me demander des informations d'identification), alors soyez au courant de cette question. Tapez C-G code> pour l'arrêter de tenter de vous connecter. Pour reprendre la connectivité, vous pouvez généralement commencer à démarrer une autre coque Cygwin, à ressaisir votre phrase secrète, puis le tramp sera de nouveau heureux. De temps en temps, il est resté insensible, mais tuant le tampon * TRAMP * TRY SOIT. Ne pas expirer votre identité devrait contourner cette question, bien sûr, devrait être acceptable. P>

    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
    


2 commentaires

Pour travailler avec W32 Emacs, vous pouvez utiliser PUTTY et son agent de gestion clé PAGENT. Pour vous connecter, utilisez 'PSCP' comme méthode du tramp. Une fois que vous avez cette configuration, Tramp fonctionne bien.


Merci pour vos réponses. Il a résolu le problème pour que je puisse utiliser un agent de gestion clé. Je suis allé avec la solution SSH-Agent depuis que je trouve une gestion clé un peu encombrante avec mastic.



7
votes

comme une note de pied, j'ai depuis modifié la façon dont j'utilise le tramp sous Windows.

Le tramp sous Windows était tout simplement trop lent. La caractéristique maître de contrôle de OpenSSH était ce dont j'avais besoin - cela conserve une connexion SSH persistante ouverte, éliminant ainsi la connexion coûteuse qui est autrement requise pour chaque opération de tramp. Malheureusement, Cygwin est fondamentalement incapable de soutenir le maître de contrôle à ce stade à l'heure: /

Ceci étant le cas, ma solution actuelle ne doit pas exécuter Emacs dans Windows du tout. Au lieu de cela, j'ai installé le serveur X.org de Cygwin et a commencé à exécuter Emacs sur une machine virtuelle GNU / Linux (hébergée sur ma boîte Windows) et à l'aide de l'affichage Cygwin X.

Cela fonctionne vraiment très bien.

Je couronne des emacs en mode Daemon, ce qui signifie que cela n'a pas d'importance s'il y a toujours des problèmes avec le serveur X, et si je dois éteindre la boîte Windows, je peux simplement enregistrer l'état du VM , la restauez ensuite et ne perdez pas ma séance (*). (Desktop.el fournit une simple gestion de session décente dans tous les cas ou si vous devez redémarrer la machine virtuelle; mais si vous utilisez cela, vous souhaiterez peut-être modifier le Desktop-Files-Not-to-Sauvegarder Variable de sorte qu'il n'ignore pas tous vos tampons de tramp! Je viens de le mettre à " ^ $ ")

Assurez-vous de démarrer le serveur X de Cygwin avec startxwin plutôt que startx (l'ancien active que les fenêtres du serveur X apparaissent sous forme de fenêtres Windows régulières), puis à partir d'un xterm Vous pouvez exécuter ssh -y (moi) @ (linux) -f "emacs -daemon" pour démarrer le serveur initialement et ssh -y (moi) @ (Linux) -F "emacsclient -c" pour démarrer un nouveau client.

Les méthodes "SCPC" et "RSYNCC" utilisent automatiquement le maître de contrôle. J'exécute toujours un agent SSH sur la boîte Linux, cependant (pour éviter le besoin d'authentifier lors de l'ouverture des coquilles distantes d'Emacs, etc.). La commande 'emacs - daemon' devient alors quelque chose comme ssh -y (moi) @ (linux) -f "source ~ / .ssh / agent-environnement && emacs - daemon" , présumant que Vous avez dirigé / copié SSH-Agent Sortie dans ce fichier lorsque vous l'avez couru (je ne me préoccupe pas d'une heure d'identité pour celui-ci).

Et enfin, sur cette dernière note, si vous utilisez un mécanisme similaire à celui que j'ai initialement mentionné pour la gestion de votre agent SSH Cygwin dans votre Bash_Profile, prenez note prudente de ce qui se passe lorsque vous démarrez le serveur X à partir des fenêtres. Raccourci Lorsque vous n'avez pas d'identité authentifiée chargée - rien du tout (jusqu'à ce que vous regardiez dans le gestionnaire de tâches et que vous voyez le processus SSH-Ajoutez-vous). Par conséquent, je recommande toujours d'utiliser startxwin de la ligne de commande afin d'éviter cela.

EDIT:
(*) C'était une mauvaise hypothèse. Depuis, j'ai réalisé que le redémarrage du serveur X réellement les m'empêche de reconnecter après le démon Emacs, qui est plutôt malheureux. Par conséquent, je compte tout à fait sur la bibliothèque de bureau pour restaurer ma session. J'utilise sauvegarde automatique pour enregistrer régulièrement mon fichier de bureau pour le maintenir à jour. Voir le Wiki EMACS pour cette option et d'autres options d'amélioration de la fonction de bureau.


1 commentaires

En outre, en présumant que vous souhaitez partager votre fichier .emacs entre les boîtes Windows et Linux, assurez-vous d'envelopper votre intégration Win32 / Cygwin à l'intérieur de quelque chose comme ceci: (lorsque (Type de système EQ »Windows-NT) (exiger 'My-Win32) )



4
votes

J'utilisais l'emacSW32, mais j'ai eu des tonnes de problèmes comme celui-ci. Ils sont tous partis quand je suis passé à Emacs de Cygwin. Il est probablement déjà installé. Tapez simplement les éléments suivants à une invite BASH:

XWin -multiwindow &
export DISPLAY=:0.0
emacs


0 commentaires

0
votes

aujourd'hui Cygwin est livré avec emacs-w32 code> de sorte que vous n'avez pas besoin de démarrer X Server.

Je recommande de commencer par: p>

cygstart --action=runas run emacs-w32


0 commentaires