Verwenden von Emacs-Server und Emacsclient auf anderen Computern als andere Benutzer

Ich weiß das, nachdem ich angerufen habe(start-server) innerhalb einer bestehenden Emacs Session kann ich dann nutzenemacsclient -c (auf demselben Computer), um neue Frames zu erstellen, die eine Verbindung zu diesem Server herstellen, sodass jeder neue Frame von erstellt wirdemacsclient hat Zugriff auf denselben Satz von gemeinsam genutzten Zuständen (z. B. Puffer).

Die meiste Dokumentation, die ich gefunden habe, konzentriert sich auf den Anwendungsfall "Schnellzugriff auf meinen lokalen Emacs", und daher gibt es zwei Dinge, für die ich noch keine Details gesehen habe:

Könnenemacsclient -c Zugriff auf Emacs-Server, die von gestartet wurdenandere Benutzer oder ist es fest verdrahtet, nur Sitzungen zu erkennen, die von meinem eigenen Benutzer gestartet wurden?

Unterstützt der Emacs-Server (direkt oder indirekt) Remoteverbindungen? Das heißt, gibt es eine Möglichkeit, Emacs (möglicherweise mit SSH) einzurichten, die Anrufe an zulässtemacsclient -c aufFernbedienung Maschinen den Zugang zu habenlokal Zustand meines Emacs-Servers?

(Falls Sie es noch nicht erraten haben, möchte ich die beiden oben genannten Techniken letztendlich kombinieren, um eine rudimentäre Unterstützung für die gemeinsame Bearbeitung bereitzustellen.)

Dies ist ein Problem der realen Welt. Ich arbeite also mit folgenden Problemen:

Die erforderliche Funktionalität sollte bereits in Emacs integriert sein (23.3.1, 64-Bit). Ich kann Emacs-Erweiterungen aus den Standard-Ubuntu-Repositorys verwenden, aber ich würde es vorziehen, dies nicht zu tun. (Was ich glaube, schließt ausRudelleider)Keine neuen Benutzer oder Benutzer-Spoofing. Die Lösungen sollten mit den vorhandenen Benutzerkonten funktionieren, und Benutzer dürfen nicht so tun, als ob sie andere Benutzer wären (z. B. übersu oderssh).

Wenn es einen Unterschied macht, befinden sich die Computer in einem privaten LAN, auf denen OpenSSH-Clients und -Server installiert sind (und ausgeführt werden), und alle Benutzer können auf allen Computern eine Verbindung herstellen (ihr eigenes Konto auf allen Computern), haben jedoch kein gemeinsames Dateisystem.

Weiß also jemand, ob Emacs Server das kann

anderen Benutzern Zugriff gewähren oderFernzugriff bereitstellen?

BEARBEITEN

Wie in der Antwort von rwb kommentiert, ist es klar, dass die neuen Fenster durch Ausführen lokal geöffnet werdenemacsclient -c werden tatsächlich von der erstelltFernbedienung Emacs-Serverprozess. Das ist,emacsclient löst einfach das entsprechende Verhalten im Server aus. Dies führt zu Problemen mit falschen Anzeigeeinstellungen, da der Server normalerweise keinen Zugriff auf den lokalen Desktop hat (siehe unten). Jetzt kann ich mich jedoch mit einer Remote-Emacs-Sitzung verbinden, wenn ich die folgende Befehlsfolge verwende:

In einem Terminal, wo1.22.333.44 ist die IP-Adresse vonremotehost:

ssh -t -X remotehost \
  "emacs -nw --eval
   '(progn (setq server-host \"1.22.333.44\" server-use-tcp t) (server-start))'"

Dann in einem anderen (auf derselben Maschine):

scp remotehost:.emacs.d/server/server /tmp/server-file
DISPLAY=localhost:10 emacsclient -c -f /tmp/server-file

Dasemacsclient Befehl bewirkt, dass der ferne Emacs-Server (von dem er Details findet) in/tmp/server-file), um ein grafisches Emacs-Fenster (auf der lokalen Anzeige) zu öffnen, das den Status mit der Emacs-Sitzung auf dem Remote-Host teilt.

Da der entfernte Emacs-Server über gestartet wurdessh -X, SSH verschafft ihm über eine "Fälschung" Zugriff auf mein lokales Display:10 Anzeige. DasDISPLAY=:10 an ihn weitergegebenemacsclientDadurch öffnet sich ein Fenster auf meinem lokalen Desktop.

Obwohl der oben beschriebene Ansatz den Haken bei "Emacs-Server auf einem Remote-Computer ausführen" setzt, stellen Sie eine Verbindung mit diesem Computer heremacsclient Tatsächlich ist es nicht viel anders, als wenn Server und Clients alle lokal als ein Benutzer ausgeführt werden: Der einzige Unterschied besteht darin, dass der Server jetzt remote ist und Zugriff auf verschiedene Systemressourcen hat.

Start leider überssh -X Nur so konnte ich ein Fenster auf dem X-Server eines anderen Computers erfolgreich öffnen:

Grundlegendes angebenDISPLAY=remote:0 kommt nirgendwo hin (da Ubuntu X Server mit dem gestartet werden-nolisten tcp Möglichkeit).

Verbindung über SSH und dann mitDISPLAY=:0 schlägt ebenfalls fehl, diesmal jedoch nur, weil keine geeigneten Anmeldeinformationen für die Authentifizierung vorhanden sind. (Ich glaube das ist jedenfalls der Fall: Die Fehlermeldung sagt kryptischNo protocol specified / Can't open display.)

Ich denke, ein Weg um das zweite Problem zu finden würde mich wahrscheinlich einer Lösung ein gutes Stück näher bringen.

Nachdem ich die Beiträge bei gelesen habehttp://comments.gmane.org/gmane.emacs.devel/103350 (Ab dem 25. Oktober, 14:50 Uhr, ungefähr auf halber Strecke) Ich frage mich, ob dies eine der seltenen Sachen ist, die Emacs nicht machen kann (d. h. unmöglich ist ;-)).

Wenn jedoch jemand die Möglichkeit hat, Zugriff auf Remote-X-Anzeigen ohne den oben genannten Berechtigungsfehler zu gewähren, bin ich immer noch für Überredungen offen.

TL; DR

Wie die Antwort von rwb zeigt, haben meine oben gestellten Fragen, ob Emacs Remotezugriff gewähren kann, Probleme. Es ist kein wirkliches Problem, wenn Emacs anderen Benutzern Zugriff gewährt (server-use-tcp und eine geeigneteserver-file kümmere dich darum): eher ist das problemSo können Sie einem Prozess auf einem Computer erlauben, neue X-Fenster auf den X-Displays anderer Benutzer zu öffnen (Genauer gesagt, der Emacs läuft(start-server) muss Fenster für Benutzer öffnen, die es über fragenemacsclient -c). Diese Antwort würde den Rahmen dieser Frage sprengen.

Alternative Lösung

Als Problemumgehung verwenden wir Folgendes:

machine0:tmux -S /tmp/shared-tmux-socket new-sessionmachine1..machineN:ssh -t machine0 tmux -S /tmp/shared-tmux-socket attach

mit entsprechenden Dateiberechtigungen auf/tmp/shared-tmux-socket.

Dann führen wir einen Textmodus-Emacs im gemeinsam genutzten Terminal aus. :-) Dies wirft zwar einige User-Spoofing-Fragen auf, aber der Host kann zumindest alles sehen, was die Gäste tun.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage