Emacs-клиент - какова минимальная установка?

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

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

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


person Thorsten    schedule 24.07.2011    source источник


Ответы (4)


Есть ли причина не запускать клиентов удаленно, а просто использовать локальный дисплей? Таким образом, практически все, что вам нужно на локальных машинах, — это клиент ssh и сервер X Window.

ssh -X (user)@(server) "emacsclient -c"


Правки для комментариев:

Эта команда запускает новый клиент для подключения к существующему серверу Emacs (который, как предполагается, уже запущен). Вы можете использовать "emacsclient -a '' -c" для автоматического запуска emacs --daemon, если существующего сервера нет, но я не знаю, хотите ли вы, чтобы подключающийся пользователь запускал сервер.

На самом деле, если честно, я довольно не уверен насчет многопользовательской стороны этого, поскольку я никогда не делал этого раньше. Аутентификация для вышеперечисленного обрабатывается ssh, но вполне могут возникнуть последующие проблемы с разрешениями или аналогичные проблемы, когда сервер и клиенты запускаются разными пользователями.

Этот подход должен быть возможен с Windows/Cygwin в качестве клиента и/или сервера, поскольку Cygwin предоставляет пакеты Emacs, OpenSSH и X.org. (Я регулярно использую Windows/Cygwin в качестве локального дисплея для Emacs, работающего в Linux.) Однако его может быть сложнее настроить, и любые проблемы с разрешениями, вероятно, будут другими, когда вы используете Cygwin.

Я менее уверен, как это будет работать без Cygwin. NTEmacs, конечно, не будет общаться с X.org, поэтому я полагаю, что в этом случае вы будете работать с терминалом. (Возможно, есть и другие варианты, но Cygwin кажется мне наиболее интегрированным подходом к использованию всех Emacs, SSH и X в Windows).

Наконец, я предполагаю, что вы, вероятно, получаете ошибку «Отказано в соединении», потому что на локальном хосте не запущен демон sshd? Я бы сказал, что настройка ssh выходит за рамки этого вопроса, но для этого есть много ресурсов в Интернете.

person phils    schedule 29.07.2011
comment
Большое спасибо. Что-то простое в этом роде, когда все обновления и все обслуживание происходят на сервере, и установка не требуется, было именно то, что я искал. В данный момент у меня нет удаленного сервера, чтобы попробовать его, будет ли он работать и на локальном хосте? Это ограничено Linux-машинами или возможно и в Windows (с/без cygwin)? - person Thorsten; 30.07.2011
comment
Еще несколько вопросов: это запускает новый emacsclient или подключается к существующему? Было бы удобно, если бы Emacs работал постоянно на сервере, а emacs-клиенты запускались бы только по запросу с клиентских машин. Как будет работать аутентификация в такой обстановке? - person Thorsten; 30.07.2011
comment
Когда я пытаюсь: sudo ssh -X tj1@localhost emacsclient -c я получаю ssh: подключиться к порту хоста localhost 22: соединение отклонено - person Thorsten; 30.07.2011
comment
Я обновил ответ. Проверка этого может на самом деле потребовать гораздо больше усилий, чем вы надеялись, поскольку я предполагал, что остальная часть инфраструктуры уже на месте. - person phils; 30.07.2011
comment
Большое спасибо, это то, что я искал, так что это не проблема, чтобы немного исследовать. Я уже нашел это об аутентификации: ключи SSH позволяют выполнять аутентификацию между двумя хостами без необходимости ввода пароля. Аутентификация по ключу SSH использует два ключа: закрытый ключ и открытый ключ. ssh-keygen -t dsa По умолчанию открытый ключ сохраняется в файле ~/.ssh/id_dsa.pub, а ~/.ssh/id_dsa является закрытым ключом. Теперь скопируйте файл id_dsa.pub на удаленный хост и добавьте его в ~/.ssh/authorized_keys, введя: ssh-copy-id username@remotehost еще раз проверьте права доступа к файлу authorized_keys. - person Thorsten; 30.07.2011

В зависимости от того, чего вы пытаетесь достичь, вы можете использовать комбинацию Emacs и Screen. Запустив Emacs из Screen на удаленной машине и отсоединившись от нее, вы сможете впоследствии повторно подключиться с другой машины, на которой нет Emacs. Опять же, сработает ли это для вас или нет, зависит от того, что вы пытаетесь сделать; однако во многих случаях использования Emacs это может быть очень эффективно. Если вы не знакомы с использованием Screen таким образом, вот некоторые материалы для чтения:

экран — мультиплексор терминала

person zev    schedule 25.07.2011
comment
Это совершенно новая концепция для меня, но довольно интересная. Я хотел бы использовать очень ограниченную версию Emacs-клиента, как замену веб-браузеру в типичном клиент-серверном приложении, подходящую для неспециалистов без сложных процедур установки. Мне нужно посмотреть, достаточно ли прост в использовании экран, но звучит многообещающе. Спасибо. - person Thorsten; 27.07.2011
comment
Если (изучив немного больше) вы решите, что комбинация Emacs и Screen может сделать то, что вам нужно, вы можете задать новый вопрос, в котором подробно описывается, чего вы хотели бы достичь с помощью Emacs и Screen. Так у вас больше шансов получить хорошие ответы. - person zev; 27.07.2011

Я не уверен, что это возможно. emacsclient использует бродягу для подключения к удаленному серверу, и просто глядя на количество require в elisp-файлах бродяг (41), это кажется очень маловероятным. Вы можете попробовать сами со следующим:

zgrep -oE "\(require '[a-z-]+\)" *el.gz | sed -e 's%[a-z0-9-]\+\.el\.gz:%%g' | sort | uniq -cu | wc -l

person suvayu    schedule 24.07.2011
comment
Спасибо, это не то, на что я надеялся. Возможно, с Emacs 24 будет проще просто установить минимальную базовую версию Emacs (клиент) локально и иметь все библиотеки на удаленном сервере, доступном для всех клиентов. Кстати, удивительное волшебство командной строки Linux. - person Thorsten; 26.07.2011

Я не эксперт в emacsclient, но я не думаю, что он был разработан для того, чтобы делать то, что вы ищете. Я думаю, что общий вариант использования заключается в том, что emacsclient позволяет вам перенаправлять новые запросы на открытие файла с помощью emacs в постоянный процесс emacs, чтобы избежать того, что может быть чем-то вроде накладных расходов во время запуска. Вы, кажется, ищете больше настоящих отношений клиент/сервер.

Я думаю, что для достижения цели, к которой вы стремитесь, вам, вероятно, потребуется взглянуть немного за пределы emacs, возможно, на отдельный проект — «emacsRemoteClient. Это сводится к одной или двум моделям; путь к файлу, который вы хотите отредактировать, должен быть отправлен на серверную машину, чтобы emacs мог выполнять какой-то удаленный доступ к бродяге, а затем локально создавать xwindow (используя локальную среду X или требуя x-сервер на окнах). .. или два, перенос файла в какое-то временное место на сервере и снова локальное создание удаленного окна x (с последующей синхронизацией изменений между tmp и локальным файлом).

Было бы здорово иметь что-то подобное... но подозреваю, что это потребует немного работы. Может быть, нам просто нужна версия emacs, написанная на javascript, и она может жить в облаке или в вашем браузере... о, если бы в браузере были привязки клавиш emacs ;-)

-Стив

person sbaker    schedule 29.07.2011
comment
Привет, Стив, звучит интересно, и я думаю, что Зев и Филс показали в своих ответах, как мало вне Emacs это может работать. Кстати, ты знаешь конкерора? Это веб-браузер, написанный на javascript по образцу Emacs, с буферами и сочетаниями клавиш Emacs. - person Thorsten; 30.07.2011