Wie verwende ich emacsclient, um eine Verbindung zu einer Remote-Emacs-Instanz herzustellen?


44

Ich möchte Emacs auf einem Computer ausführen können:

server $ emacs --daemon

Und dann verbinden Sie sich von einem anderen:

local $ emacsclient -c server

Ist das möglich? Wenn das so ist, wie?


1
Nur ein Tipp: Wenn Sie die Remote-Emacs-Sitzung nicht weiter ausführen müssen und nur Dateien auf dem Remote-Host mit Emacs bearbeiten möchten, sollten Sie TRAMP ausprobieren, mit dem Sie Dateien transparent über das Netzwerk bearbeiten können.
Paprika

@ Paprika Ich denke, OP möchte eine Remote-Emacs-Konfiguration lokal verwenden. Daher ist TRAMP möglicherweise nicht geeignet. Aus diesem Grund habe ich meiner Antwort den Haftungsausschluss vorangestellt.
Vamsi

3
Es gab eine Diskussion zu StackOverflow zum Thema: stackoverflow.com/questions/12546722/…
Crash Coredump

Antworten:


21

Sie können mit emacsclient keine Verbindung zu einer Emacs-Instanz herstellen, die auf einem Remotecomputer ausgeführt wird. Dieses Client-Server-Konzept bezieht sich auf (lokale) Prozesse, nicht auf Netzwerkknoten. Sie können sich jedoch mit verschiedenen Netzwerktechnologien beim Remotecomputer anmelden, eine Verbindung zu einem dort ausgeführten Emacs-Server herstellen und den Bildschirm des Emacsclients lokal anzeigen. Abhängig vom verwendeten Betriebssystem kann die Vernetzung über SSH (Terminal / X-Forwarding), VNC, RDP usw. erfolgen.

UPDATE :
Wie einige wiesen darauf hin, hat emacsclient tatsächlich die Möglichkeit, über TCP eine Verbindung zum Server herzustellen. Emacsclient sollte jedoch niemals remote verwendet werden. Die TCP-Socket-Option ist aus Gründen der Kompatibilität mit Nicht-UNIX-Systemen (dh Betriebssystemen, auf denen keine UNIX-Domain-Sockets verfügbar sind, wie Windows) erforderlich.


4
Laut diesem Beitrag ist Ihre Aussage nicht genau richtig. Könnten Sie genauer sein ?.
DJJ

5
@paprika: Nein, der für die TCP-Verbindung verwendete Authentifizierungsmechanismus wurde speziell für den RAS-Fall entwickelt. Ich habe auf der Windows-Seite auf die Verwendung von TCP gedrängt, damit der Code auch auf POSIX für Remoteverbindungen nützlich ist, wodurch Windows-spezifischer Code reduziert und der POSIX-Seite Funktionen hinzugefügt werden.
Stefan

9

Wahrscheinlich nicht das, wonach Sie gefragt haben, aber vorausgesetzt, Sie haben ssh-Setup mit X-Forwarding, könnten Sie emacsclient auf dem Server starten und an Remote-DISPLAY weiterleiten. (Haftungsausschluss: Code direkt in das Webformular eingegeben)

 local> ssh server -f emacsclient -c --display=$DISPLAY

Nein, das ist für die Frage irrelevant.
Heroxbd

4

Dies ist möglicherweise nicht das, was Sie wollen, aber nur für den Fall, ob es Ihnen irgendwie helfen kann.

Normalerweise arbeite ich in einer virtuellen Maschine, die mit Vagrant gebootet wurde. Ich habe mein ~/.emacs.dVerzeichnis zwischen meiner Maschine (lokal) und der virtuellen Maschine (remote) synchronisiert und Folgendes in die VagrantfileDatei eingefügt:

config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"

Außerdem startet meine Emacs-Konfiguration beim Start automatisch einen Server:

(require 'server)
(setq server-use-tcp t
      server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
    (server-start))

Wenn ich also einen Emacs-Server in der virtuellen Maschine starte, kann ich folgendermaßen eine Verbindung dazu herstellen:

ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'

Hostname der virtuellen Maschine ist der Hostname der virtuellen Maschine, die ich in meiner ~ / .ssh / config konfiguriert habe:

Host <virtual machine hostname>
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/anler/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

Hinweis: Vor dem Starten des Emacs-Servers in der virtuellen Maschine überprüfe ich, ob die ~/.emacs.d/server/serverDatei nicht vorhanden ist (wenn ich sie nur entferne), da sie sonst nicht funktioniert.


Ich habe gerade festgestellt, dass Sie emacsclient auf dem Remote-Server aufrufen. In diesem Fall müssen Sie die Serverdatei nicht explizit übergeben, da emacsclient automatisch eine Verbindung zum ersten gefundenen Server herstellt.
Vamsi

Sie müssen die private Schlüsseldatei nicht in der Befehlszeile angeben, wenn Ihre Identitätsdatei korrekt in Ihrer .ssh/configDatei festgelegt ist. Sie müssen nur die Host. Im Zweifelsfall können Sie die Ausgabe des Befehls: verwenden vagrant ssh-config, um Ihre ~/.ssh/configDatei festzulegen.
Alexandro de Oliveira

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.