Использование сервера Emacs и emacsclient на других машинах в качестве других пользователей

Я знаю что после звонка(start-server) внутри существующей сессии Emacs я могу использоватьemacsclient -c (на том же компьютере), чтобы создать новые кадры, которые подключаются к этому серверу, так что каждый новый кадр создаетсяemacsclient имеет доступ к одному и тому же набору общего состояния (например, буферам).

Большая часть документации, которую я обнаружил, фокусируется на "дать мне быстрый доступ к моим локальным Emacs". вариант использования, и поэтому есть две вещи, о которых я еще не видел никаких подробностей:

Can emacsclient -c access Emacs servers started by other users, or is it hard-wired to detect only sessions started by my own user?

Does Emacs server (directly or indirectly) support remote connections? That is, is there some way to set up Emacs (possibly involving SSH) that allows calls to emacsclient -c on remote machines to have access to the local state of my Emacs server?

(Если вы еще не догадались, то, что я в конечном итоге хотел бы сделать, - это объединить два метода выше, чтобы обеспечить элементарную поддержку совместного редактирования.)

Это реальная проблема, поэтому вот с чем я работаю:

The necessary functionality should be built into Emacs already (23.3.1, 64-bit). I can stretch to Emacs extensions from the standard Ubuntu repositories, but I'd prefer not to. (Which I believe rules out Rudel, sadly.) No new users or user spoofing. Solutions should work with the existing set of user accounts, and users must not pretend to be other users (e.g. via su or ssh).

Если это имеет какое-либо значение, машины находятся в частной локальной сети, на них установлены (и работают) клиенты и серверы OpenSSH, и все пользователи могут подключаться (со своей учетной записью) ко всем машинам, но у них нет общей файловой системы.

Итак, кто-нибудь знает, может ли сервер Emacs

grant access to other users, or provide remote access?

РЕДАКТИРОВАТЬ

Как отмечено в ответе rwb, ясно, что новые окна открываются локально при запускеemacsclient -c на самом деле создаютсяremote Emacs серверный процесс. То есть,emacsclient просто вызывает соответствующее поведение на сервере. Это вызывает некоторые проблемы с неправильными настройками дисплея, поскольку сервер обычно не имеет доступа к локальному рабочему столу (см. Ниже). Однако теперь я могу подключиться к удаленному сеансу Emacs, если я использую следующую последовательность команд:

В одном терминале, где1.22.333.44 это IP-адресremotehost:

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

Затем в другой (на той же машине):

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

emacsclient команда вызывает удаленный сервер Emacs (подробности которого он находит в/tmp/server-file), чтобы открыть графическое окно Emacs (на локальном дисплее), которое разделяет состояние с сеансом Emacs на удаленном хосте.

Поскольку удаленный сервер Emacs был запущен черезssh -XSSH предоставляет ему доступ к моему локальному дисплею через «поддельный» файл.:10 дисплей.DISPLAY=:10 перешел к нему (черезemacsclient) вызывает открытие окна на моем локальном рабочем столе.

Хотя в приведенном выше подходе установлен флажок «Запустить сервер Emacs на удаленной машине», подключитесь к нему с помощьюemacsclient локально & Quot; коробка, это очень ограничено. Фактически, это не сильно отличается от запуска сервера и клиентов локально как одного пользователя: единственное отличие состоит в том, что сервер теперь удален, и поэтому имеет доступ к различным системным ресурсам.

К сожалению, запуск черезssh -X это единственный способ, которым я смог успешно открыть окно на X-сервере другого компьютера:

Specifying a basic DISPLAY=remote:0 gets nowhere (since Ubuntu X servers are started with the -nolisten tcp option).

Connecting via SSH and then using DISPLAY=:0 also fails, but this time only due to lack of suitable authentication credentials. (I believe that's the case, anyway: the error message cryptically says No protocol specified / Can't open display.)

Я думаю, что решение второй проблемы, вероятно, приблизило бы меня к решению.

Прочитав посты наhttp://comments.gmane.org/gmane.emacs.devel/103350 (начиная с поста '25 октября 14: 50', примерно на полпути вниз) Я начинаю задумываться, не может ли это быть одной из редких вещей, которые Emacs не может сделать (то есть невозможно ;-)).

Однако, если у кого-то есть способ предоставить доступ к удаленным дисплеям X без вышеуказанной ошибки разрешений, я все еще открыт для убеждения ...

TL;DR

Как указано в ответе rwb, мои вопросы выше о том, может ли Emacs предоставлять удаленный доступ, обернулись. Нет никаких реальных проблем с тем, что Emacs предоставляет доступ другим пользователям (server-use-tcp и подходящийserver-file позаботься об этом): скорее проблема в том,how to allow a process on one machine to open new X windows on other users' X displays (в частности, Emacs работает(start-server) необходимо открыть окна для пользователей, которые просят это черезemacsclient -c). Этот ответ выходит за рамки этого вопроса.

Alternative solution

В качестве обходного пути мы используем следующее:

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

с подходящими правами доступа к файлам на/tmp/shared-tmux-socket.

Затем мы запускаем Emacs в текстовом режиме в общем терминале. :-) Это поднимает некоторые вопросы, связанные с подделкой пользователей, но, по крайней мере, хозяин может видеть все, что делают гости.

Ответы на вопрос(4)

Ваш ответ на вопрос