Использование сервера 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 specified
Can'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-session
machine1..machineN:ssh -t machine0 tmux -S /tmp/shared-tmux-socket attach
с подходящими правами доступа к файлам./tmp/shared-tmux-socket
Затем мы запускаем Emacs в текстовом режиме в общем терминале. :-) Это поднимает некоторые вопросы, связанные с подделкой пользователей, но, по крайней мере, хозяин может видеть все, что делают гости.