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

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

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

Можноemacsclient -c доступ к серверам Emacs, запущеннымДругой пользователи, или это запрограммировано, чтобы обнаружить только сеансы, запущенные моим собственным пользователем?

Поддерживает ли сервер Emacs (прямо или косвенно) удаленные соединения? То есть есть какой-то способ настроить Emacs (возможно, с использованием SSH), который позволяет вызовамemacsclient -c надистанционный пульт машины, чтобы иметь доступ кместный состояние моего сервера Emacs?

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

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

Необходимая функциональность уже должна быть встроена в Emacs (23.3.1, 64-битная версия). Я могу перейти к расширениям Emacs из стандартных репозиториев Ubuntu, но яЯ предпочитаю не делать этого. (Что я считаю исключаетRudelК сожалению.)Нет новых пользователей или подмена пользователей. Решения должны работать с существующим набором учетных записей пользователей, и пользователи не должны притворяться другими пользователями (например, черезsu или жеssh).

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

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

предоставить доступ другим пользователям, илиобеспечить удаленный доступ?

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

Как прокомментировал в rwb 'ответ, этоПонятно, что новые окна открываются локально, запустивemacsclient -c на самом деле создаютсядистанционный пульт 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 -X, SSH предоставляет ему доступ к моему локальному дисплею через "не настоящие" :10 дисплей.DISPLAY=:10 перешел к нему (черезemacsclient) вызывает открытие окна на моем локальном рабочем столе.

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

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

Указание базовогоDISPLAY=remote:0 никуда не денется (поскольку серверы Ubuntu X запускаются с-nolisten tcp опция).

Подключение через SSH с последующим использованиемDISPLAY=:0 также не удается, но на этот раз только из-за отсутствия подходящих учетных данных аутентификации. (Я полагаю, что'В любом случае, это так: сообщение об ошибке загадочно говорит /No protocol specifiedCan't open display.)

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

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

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

TL; DR

Как указывает rwb 's ответ, мои вопросы выше о том, может ли Emacs предоставить удаленный доступ, обернулись. Там'Нет никаких проблем с тем, что Emacs предоставляет доступ другим пользователям (server-use-tcp и подходящийserver-file позаботься об этом): скорее проблема в том,как разрешить процессу на одной машине открывать новые окна X для других пользователей X отображает (в частности, Emacs работает(start-server) необходимо открыть окна для пользователей, которые просят это черезemacsclient -c). Этот ответвыходит за рамки этого вопроса.

Альтернативное решение

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

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

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

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

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

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