Ich habe Probleme beim Einrichten von Tramp mit EmacsW32 und Cygwin. Ich habe Emacs so konfiguriert, dass sie cygwin als Shell mit w32shell verwenden. Ich habe auch die HOME-Umgebungsvariable auf c: / cygwin / home / myusername
gesetztProblem ist, dass Landstreicher zu hängen scheint und keine Verbindung hergestellt wird:
"Tramp wartet auf Eingabeaufforderungen für die neue Shell".
Ich habe versucht, das Debugging zu aktivieren, sehe aber immer noch nur diese Nachricht. Ich freue mich darauf, ein paar Tipps dazu zu bekommen. Vielen Dank.
Beachten Sie die cygwin-bezogenen Informationen im Emacs-Wiki: Ссылка
Ich benutze nicht EmacsW32, aber ich benutze erfolgreich TRAMP über ssh mit Cygwin und NT Emacs.
Ich habe TRAMP nie ohne einen ssh-Agenten arbeiten lassen (d. h. nach Anmeldeinformationen fragen) - wie Sie bemerkt haben, hängt es einfach - aber es funktioniert gut mit einem, also habe ich keine Zeit damit verbracht, das zu lösen. Vorausgesetzt, Sie sind auch glücklich, einen Agenten zu verwenden (und Sie haben bereits Ihre Schlüssel generiert und authorized_keys-Dateien nach Bedarf hinzugefügt), die für mich funktionierende Vorgehensweise ist:
(setq tramp-default-method "sshx")
). Diese Punkte werden alle im Wiki behandelt, aber Sie können die Dinge auch etwas automatisieren:
Für Schritt 1 startet mein bash-Profil automatisch einen ssh-Agenten, wenn dieser noch nicht ausgeführt wird, oder fordert mich zur Eingabe meiner Passphrase auf, wenn meine Identität abgelaufen ist. (Siehe Code unten.)
Für Schritt 2 sieht das Ziel meiner Windows-Verknüpfung zum Starten von Emacs wie folgt aus:
C:\cygwin\bin\bash.exe --login -c "env HOME=\"'cygpath '%APPDATA%''\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"
Das Argument --login
bedeutet, dass mein bash-Profil ausgeführt wird, was sicherstellt, dass Schritt 1 immer erledigt ist, bevor Emacs gestartet wird.
(Einstellung von HOME
ist nicht notwendig für TRAMP, aber %APPDATA%
ist die Standardeinstellung unter NT Emacs, und dies verhindert, dass das Cygwin-Home-Verzeichnis Vorrang hat. Daher bleibt Ihre Emacs-Konfiguration konsistent, egal ob Sie diese Verknüpfung verwenden um es auszuführen.)
Schließlich ist hier der Code von meinem cygwin .bash_profile, der meinen ssh-agent verwaltet. Es ist ein bisschen hacky, aber es funktioniert für mich.
Beachten Sie, dass meine Identität nach 4 Stunden (14400 Sekunden) abgelaufen ist. TRAMP kann hängen bleiben, nachdem das passiert ist (wie zuvor erwähnt, habe ich es nie bekommen, um mich nach Anmeldeinformationen zu fragen), also sei dir dieses Problems bewusst. Geben Sie C-g
ein, um zu verhindern, dass eine Verbindung hergestellt werden kann. Um die Konnektivität wieder aufzunehmen, können Sie in der Regel einfach eine andere Cygwin-Shell starten, Ihre Passphrase erneut eingeben, und dann wird TRAMP wieder glücklich. Gelegentlich hat es nicht reagiert, aber das Töten des * tramp * -Puffers wird das beheben. Wenn du deine Identität nicht auslebst, solltest du dieses Problem natürlich umgehen, wenn das akzeptabel ist.
Als Fußnote habe ich seitdem die Art geändert, wie ich TRAMP unter Windows verwende.
TRAMP unter Windows war einfach zu langsam. Die Control Master-Funktion von OpenSSH war das, was ich brauchte - dies hält eine persistente SSH-Verbindung offen und eliminiert so die kostspielige Verbindung, die sonst für jede TRAMP-Operation erforderlich ist. Leider ist Cygwin zu diesem Zeitpunkt grundsätzlich nicht in der Lage, Control Master zu unterstützen: /
In diesem Fall ist meine derzeitige Lösung, Emacs nicht in Windows auszuführen. Stattdessen habe ich Cygwins X.Org-Server installiert und Emacs auf einer GNU / Linux-VM (gehostet in meiner Windows-Box) gestartet und die Cygwin X-Anzeige verwendet.
Das funktioniert wirklich sehr gut.
Ich betreibe Emacs im Daemon-Modus, was bedeutet, dass es keine Probleme mit dem X-Server gibt, und wenn ich die Windows-Box herunterfahren muss, kann ich einfach den Zustand der VM speichern , stelle es danach wieder her und verliere meine Sitzung nicht wirklich (*). (desktop.el bietet in jedem Fall eine recht anständige Sitzungsverwaltung, oder wenn Sie die VM neu starten müssen; wenn Sie dies jedoch verwenden, möchten Sie möglicherweise die Variable desktop-files-not-to-save
so ändern, dass sie nicht alle Ihre ignoriert TRAMP-Puffer! Ich habe es nur auf " ^$
" gesetzt)
Stellen Sie sicher, dass Cygwins X-Server mit startxwin
und nicht mit startx
gestartet wird (die Windows-Fenster des X-Servers erscheinen als normale Windows-Fenster), und von einem xterm können Sie ssh -Y (me)@(linux) -f "emacs --daemon"
ausführen, um den Server zu starten zunächst und ssh -Y (me)@(linux) -f "emacsclient -c"
, um einen neuen Client zu starten.
Die TRAMP-Methoden 'scpc' und 'rsyncc' verwenden Control Master automatisch. Ich betreibe jedoch immer noch einen ssh-Agenten auf der Linux-Box (um die Authentifizierung beim Öffnen von Remote-Shells aus Emacs usw. zu vermeiden). Der Befehl 'emacs --daemon' wird dann zu etwas wie ssh -Y (me)@(linux) -f "source ~/.ssh/agent-environment && emacs --daemon"
, vorausgesetzt, Sie haben die ssh-agent-Ausgabe in diese Datei gelenkt / kopiert, als Sie sie ausgeführt haben (ich mache mir keine Zeitüberschreitung für diese Zeit).
Und schließlich, auf dieser letzten Anmerkung, wenn Sie einen ähnlichen Mechanismus zu dem verwenden, den ich ursprünglich erwähnt habe, um Ihren cygwin ssh-agent in Ihrem bash_profile zu verwalten, beachten Sie bitte, was passiert, wenn Sie den X-Server von Windows aus starten Verknüpfung, wenn Sie keine authentifizierte Identität geladen haben - überhaupt nichts (bis Sie im Aufgabenmanager nachsehen und den dort sitzenden ssh-add-Prozess sehen). Daher empfehle ich, immer startxwin
von der Kommandozeile zu verwenden, um dies zu vermeiden.
bearbeiten:
(*) Das war eine schlechte Annahme. Ich habe inzwischen erkannt, dass der Neustart des X-Servers tatsächlich verhindert, dass ich mich später wieder mit dem Emacs-Daemon verbinden kann, was ziemlich bedauerlich ist. Folglich bin ich voll und ganz auf die Desktop-Bibliothek angewiesen, um meine Sitzung wiederherzustellen. Ich verwende auto-save-hook
, um meine Desktop-Datei regelmäßig zu speichern, um sie auf dem neuesten Stand zu halten. Weitere Informationen zur Verbesserung der Desktop-Funktion finden Sie im Emacs-Wiki.
Früher habe ich den EmacsW32 benutzt, aber ich hatte so viele Probleme. Sie gingen alle weg, als ich zu Cygwins Emacs wechselte. Es ist wahrscheinlich schon installiert. Geben Sie Folgendes an einer Bash-Eingabeaufforderung ein:
%Vor%Es wird etwas leichter als eine Linux-VM sein.
Heutzutage kommt Cygwin mit emacs-w32
daher müssen Sie den X-Server nicht starten.
Ich empfehle es mit:
%Vor%Da Cygwin Emacs nur mit der nativen Windows-GUI arbeitet, funktioniert es gut mit TRAMP für das Sshing auf Linux-Hosts.
Sie können mein Skript Ссылка als schnellen Dateiöffner überprüfen.
>UPDATE Mit modernen Windows und UAC kann es besser sein, Cygwin Emacs wie folgt zu betreiben:
%Vor%