web-dev-qa-db-fra.com

Emacs: Tramp ne fonctionne pas

J'ai essayé d'ouvrir un fichier distant via Emacs via Tramp.

(require 'tramp)
(setq tramp-default-method "ssh")

Je reçois un message d'Emacs

Tramp: En attente d'invites de Shell distant

Emacs a été suspendu et n'a réagi à aucune action par la suite.

Emacs a été installé sur Windows; le fichier distant était sur une machine Linux.

38
jerboa

Si le compte auquel vous vous connectez utilise une invite de commande très sophistiquée, il y a de fortes chances pour que ce soit ce qui fait tramp trip.

Connectez-vous en tant que root, puis entrez 

PS1="> "

(Il s’agit d’une invite Shell classique (ZSH, BASH, younameit) normale, que tramp comprendra) puis basculez vers le compte d’utilisateur et lancez emacs -q (pour vous assurer que votre .emacs ne cause pas ce désordre). et essayez de C-x C-f /Sudo:root@localhost:/etc/hosts et voyez quoi.

Vous pouvez (non recommandé) également personnaliser l’expression rationnelle qui définit les attentes de tramp:

M-x customize-variable RET tramp-terminal-Prompt-regexp

Mon approche : 

  1. Assurez-vous que la variable tramp-terminal-type est définie sur "dumb" 

M-x customize-variable RET tramp-terminal-type

  1. Testez cela dans votre. * Shrc et servez la bonne invite:
case "$TERM" in
"dumb")
    PS1="> "
    ;;
xterm*|rxvt*|eterm*|screen*)
    PS1="my fancy multi-line \n Prompt > "
    ;;
*)
    PS1="> "
    ;;
esac
62
yPhil

Votre client Windows ssh est la clé ici, et la méthode Tramp 'ssh' est presque certainement fausse.

Si vous utilisez Cygwin, vous devez utiliser la méthode 'sshx' et probablement utiliser ssh-agent pour gérer l'authentification. Les détails sont ici: Utilisation de tramp avec EmacsW32 et cygwin, possible?

J'imagine qu'il en va de même pour tout client ssh autonome qui ne nécessite pas une installation complète de Cygwin, mais est utilise les DLL Cygwin. (J'en parle, parce que je suis sûr de me rappeler avoir vu une telle chose.)

Si vous utilisez PuTTY, vous souhaitez utiliser la méthode «plink», comme l'a souligné Alex Ott. Si le Wiki ne suffit pas, une recherche search here apportera probablement des solutions pour configurer cette approche.

Les autres alternatives que je peux suggérer sont:

  1. Utilisez le Cygwin natif Emacs. Ce sera plus lent que NTEmacs, mais Tramp semble bien fonctionner avec la méthode 'ssh', et l'invite de mot de passe fonctionne également.

  2. Hébergez une machine Linux VM sur votre machine Windows et lancez Emacs dessus. C'est un cercle assez volumineux, mais c'est ma méthode préférée d'utiliser Tramp lorsque vous travaillez sous Windows.

17
phils

Aviez-vous vérifié Emacs wiki pour trouver une solution? ssh est en PATH? Il est également recommandé d'utiliser plink sous MS Windows - voir la section "Méthodes en ligne" de la documentation de Tramp

3
Alex Ott

En passant - si vous avez besoin de tramp à Sudo - Vous pouvez réellement Sudo sans tramp en utilisant sudoedit.

J'utilise actuellement cette fonction bash:

erf () { Sudo_EDITOR="emacsclient -a emacs" sudoedit $@; }
0
Adobe

C'est un défaut de vagabond. 

La vraie solution consiste à empêcher le chargement de .bashrc lorsque tramp est utilisé. (Parce que maintenant, il s’agit de PS1, mais il peut s’agir de PATH, ou de toute autre chose que votre .bashrc fera qui déplaira à tramp...).

Cela peut être fait en demandant à ssh de définir une variable d’environnement et en la testant dans .bashrc:

Ajoutez ceci à ~/.emacs:

(require 'tramp-sh nil t) (setf tramp-ssh-controlmaster-options (concat "-o SendEnv TRAMP=yes " tramp-ssh-controlmaster-options))

et cela au début de ~/.bashrc:

if [ ! -z ${TRAMP-x} ] ; then return fi

Un autre défaut de tramp est qu’il n’a pas de variable permettant de passer des arguments aléatoires à la commande ssh; nous devons donc utiliser le tramp-ssh-controlmaster-options.

0
informatimago