Tramp mit EmacsW32 und Cygwin möglich, möglich?

8

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

gesetzt

Problem 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.

    
grm 22.04.2010, 10:44
quelle

4 Antworten

5

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:

  1. Führen Sie ssh-agent von cygwin aus.
  2. Starten Sie NT Emacs über cygwin (so dass es die ssh-agent-Umgebungsvariablen erbt).
  3. Verwende 'sshx' als TRAMP-Methode (du kannst es manuell in jedem Dateipfad angeben, aber ich empfehle, es als Standard zu definieren, mit (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.

%Vor%     
phils 23.04.2010, 11:50
quelle
7

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.

    
phils 15.06.2010 21:59
quelle
3

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.

    
User1 07.12.2010 15:39
quelle
0

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%     
gavenkoa 23.01.2017 00:47
quelle

Tags und Links