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?
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?
Antworten:
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.
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
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.d
Verzeichnis zwischen meiner Maschine (lokal) und der virtuellen Maschine (remote) synchronisiert und Folgendes in die Vagrantfile
Datei 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/server
Datei nicht vorhanden ist (wenn ich sie nur entferne), da sie sonst nicht funktioniert.
.ssh/config
Datei festgelegt ist. Sie müssen nur die Host
. Im Zweifelsfall können Sie die Ausgabe des Befehls: verwenden vagrant ssh-config
, um Ihre ~/.ssh/config
Datei festzulegen.
Öffnen Sie automatisch entfernte Dateien in lokalen Emacs
Ich habe Erfolg mit der ersten Lösung gehabt. Das zweite scheint einfacher zu sein, ich muss es erst noch ausprobieren.