Używanie serwera Emacs i emacsclient na innych komputerach jako innych użytkowników

Wiem to po tym, jak dzwonię(start-server) wewnątrz istniejącej sesji Emacsa mogę wtedy użyćemacsclient -c (na tym samym komputerze), aby utworzyć nowe ramki łączące się z tym serwerem, tak aby każda nowa ramka utworzona przezemacsclient ma dostęp do tego samego zestawu stanów wspólnych (np. buforów).

Większość dokumentacji, którą znalazłem, skupia się na „daniu mi szybkiego dostępu do mojego lokalnego przypadku Emacsa”, więc są dwie rzeczy, których jeszcze nie widziałem:

Mogąemacsclient -c dostęp do serwerów Emacs uruchomionych przezinny użytkowników, czy jest to trudne do wykrycia tylko sesji rozpoczętych przez mojego użytkownika?

Czy serwer Emacs (bezpośrednio lub pośrednio) obsługuje połączenia zdalne? Oznacza to, że istnieje sposób na skonfigurowanie Emacsa (prawdopodobnie z SSH), który pozwala na wywołaniaemacsclient -c nazdalny maszyny do dostępu dolokalny stan mojego serwera Emacs?

(W przypadku, gdy jeszcze się nie domyśliłeś, to, co chciałbym zrobić, to połączyć dwie powyższe techniki, aby zapewnić podstawową obsługę edycji grupowej).

To jest prawdziwy problem, więc oto, z czym pracuję:

Niezbędna funkcjonalność powinna być już wbudowana w Emacsa (23.3.1, 64-bit). Mogę rozciągnąć się na rozszerzenia Emacsa ze standardowych repozytoriów Ubuntu, ale wolę tego nie robić. (Które, jak sądzę, wykluczaRudel, niestety.)Brak nowych użytkowników lub fałszowanie użytkowników. Rozwiązania powinny działać z istniejącym zestawem kont użytkowników, a użytkownicy nie mogą udawać innych użytkowników (np. Przezsu lubssh).

Jeśli ma to jakieś znaczenie, komputery są w prywatnej sieci LAN, mają zainstalowane klienty i serwery OpenSSH (i działają), a wszyscy użytkownicy mogą łączyć się (na swoim własnym koncie) ze wszystkimi komputerami, ale nie mają współdzielonego systemu plików.

Czy ktoś wie, czy serwer Emacs może

przyznać dostęp innym użytkownikom, lubzapewnić zdalny dostęp?

EDYTOWAĆ

Jak zaznaczono w odpowiedzi na rwb, jasne jest, że nowe okna są otwierane lokalnie przez uruchomienieemacsclient -c są w rzeczywistości tworzone przezzdalny Proces serwera Emacs. To jest,emacsclient po prostu uruchamia odpowiednie zachowanie na serwerze. Powoduje to pewne problemy z nieprawidłowymi ustawieniami wyświetlania, ponieważ serwer zwykle nie ma dostępu do lokalnego pulpitu (patrz poniżej). Jednak mogę teraz połączyć się ze zdalną sesją Emacsa, jeśli użyję następującej sekwencji poleceń:

W jednym terminalu, gdzie1.22.333.44 to adres IPremotehost:

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

Następnie w innym (na tej samej maszynie):

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

Theemacsclient polecenie powoduje, że zdalny serwer Emacs (który znajduje szczegóły w/tmp/server-file) aby otworzyć graficzne okno Emacsa (na lokalnym wyświetlaczu), które współdzieli stan z sesją Emacsa na zdalnym hoście.

Odkąd zdalny serwer Emacs został uruchomiony przezssh -X, SSH zapewnia dostęp do mojego lokalnego wyświetlacza za pomocą „fałszywego”:10 pokaz. TheDISPLAY=:10 przekazane do niego (przezemacsclient) powoduje więc otwarcie okna na moim lokalnym pulpicie.

Chociaż powyższe podejście zaznacza „Uruchom serwer Emacs na komputerze zdalnym, połącz się z nim za pomocąemacsclient lokalnie ”, jest bardzo ograniczone. W rzeczywistości niewiele różni się od uruchamiania serwera i klientów lokalnie jako pojedynczy użytkownik: jedyna różnica polega na tym, że serwer jest teraz zdalny, więc ma dostęp do różnych zasobów systemowych.

Niestety, uruchomienie za pośrednictwemssh -X to jedyny sposób, w jaki udało mi się pomyślnie otworzyć okno na serwerze X innej maszyny:

Określanie podstawowegoDISPLAY=remote:0 nigdzie nie ma (ponieważ serwery Ubuntu X są uruchamiane z-nolisten tcp opcja).

Łączenie przez SSH, a następnie używanieDISPLAY=:0 również nie działa, ale tym razem tylko z powodu braku odpowiednich danych uwierzytelniających. (Myślę, że tak jest w każdym razie: komunikat o błędzie kryptycznie mówiNo protocol specified / Can't open display.)

Myślę, że znalezienie sposobu na rozwiązanie drugiego problemu prawdopodobnie przybliżyłoby mnie do rozwiązania.

Po przeczytaniu postów pod adresemhttp://comments.gmane.org/gmane.emacs.devel/103350 (zaczynając od posta z 25 października 14:50, mniej więcej w połowie) zaczynam się zastanawiać, czy może to być jedna z rzadkich rzeczy, których Emacs nie może zrobić (tj. jest niemożliwa ;-)).

Jeśli jednak ktoś ma sposób na zapewnienie dostępu do zdalnych wyświetlaczy X bez powyższego błędu uprawnień, nadal jestem otwarty na perswazję ....

TL; DR

Jak zauważyła odpowiedź rwb, moje pytania dotyczące tego, czy Emacs może udzielić zdalnego dostępu, mają pewne zalety. Nie ma żadnego problemu z Emacsem zapewniającym dostęp innym użytkownikom (server-use-tcp i odpowiedniserver-file zajmij się tym): raczej problemjak zezwolić procesowi na jednej maszynie na otwieranie nowych okien X na ekranach X innych użytkowników (w szczególności działa Emacs(start-server) musi otwierać okna dla użytkowników, którzy proszą o to przezemacsclient -c). Ta odpowiedź wykracza poza zakres tego pytania.

Alternatywne rozwiązanie

Jako obejście używamy następujących:

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

z odpowiednimi uprawnieniami do plików/tmp/shared-tmux-socket.

Następnie uruchamiamy Emacsa w trybie tekstowym w udostępnionym terminalu. :-) To wywołuje pewne pytania podszywające się pod użytkowników, ale przynajmniej gospodarz może zobaczyć wszystko, co robią goście.

questionAnswers(4)

yourAnswerToTheQuestion