Использование бродяги с EmacsW32 и Cygwin, возможно? - PullRequest
8 голосов
/ 22 апреля 2010

У меня проблемы с настройкой Tramp с EmacsW32 и cygwin. Я настроил Emacs для использования Cygwin в качестве оболочки с помощью w32shell. Я также установил переменную окружения HOME c: / cygwin / home / myusername

Проблема в том, что бродяга, кажется, зависает и соединение не установлено:

«Бродяга, ожидающий запросов на новую оболочку».

Я попытался включить отладку, но все еще вижу только это сообщение. Будем рады получить несколько советов по этому вопросу. Спасибо.

Ответы [ 4 ]

7 голосов
/ 16 июня 2010

Как примечание, с тех пор я изменил способ использования TRAMP под Windows.

TRAMP под Windows был просто слишком медленным. Мне была нужна особенность Control Master в OpenSSH - она ​​поддерживает постоянное соединение SSH открытым, что исключает дорогостоящее соединение, которое в противном случае требуется для каждой операции TRAMP. К сожалению, в данный момент Cygwin не способен поддерживать Control Master: /

В этом случае мое текущее решение - вообще не запускать Emacs в Windows. Вместо этого я установил сервер Cygwin X.Org и начал запускать Emacs на виртуальной машине GNU / Linux (размещенной на моем компьютере с Windows) и использовать дисплей Cygwin X.

Это действительно очень хорошо работает.

Я запускаю emacs в режиме демона, что означает, что не имеет значения, возникнут ли какие-либо проблемы с X-сервером, и если мне нужно закрыть окно Windows, я могу просто сохранить состояние виртуальной машины , восстановите его потом, и не потеряйте мою сессию (*). (desktop.el обеспечивает довольно приличное управление сессиями в любом случае, или если вам нужно перезагрузить виртуальную машину; но если вы используете это, вы можете изменить переменную desktop-files-not-to-save, чтобы она не игнорировала все ваши Буферы TRAMP! Я просто установил его на "^$")

Обязательно запустите X-сервер Cygwin с startxwin вместо startx (первый позволяет окнам X-сервера отображаться как обычные окна Windows), а затем из xterm вы можете выполнить ssh -Y (me)@(linux) -f "emacs --daemon", чтобы запустить сервер изначально и ssh -Y (me)@(linux) -f "emacsclient -c" для запуска нового клиента.

Методы TRAMP 'scpc' и 'rsyncc' автоматически используют Control Master. Тем не менее, я все еще запускаю ssh-agent в Linux (чтобы избежать необходимости аутентификации при открытии удаленных оболочек из emacs и т. Д.). Команда 'emacs --daemon' затем становится чем-то вроде ssh -Y (me)@(linux) -f "source ~/.ssh/agent-environment && emacs --daemon", предполагая, что вы направили / скопировали вывод ssh-agent в этот файл при запуске (я не беспокоюсь об истечении времени ожидания для этого).

И, наконец, в этой последней заметке, если вы используете механизм, аналогичный тому, который я изначально упоминал, для управления вашим ssh-агентом cygwin в вашем bash_profile, внимательно следите за тем, что происходит при запуске X-сервера из Windows ярлык, когда у вас не загружена аутентифицированная личность - вообще ничего (пока вы не заглянете в диспетчер задач и не увидите там процесс ssh-add). Следовательно, я рекомендую всегда использовать startxwin из командной строки, чтобы избежать этого.

редактирование:
(*) Это было плохое предположение. С тех пор я понял, что перезапуск X-сервера на самом деле действительно не позволяет мне повторно подключиться к демону emacs впоследствии, что весьма печально. Следовательно, я полностью полагаюсь на настольную библиотеку, чтобы восстановить мою сессию. Я использую auto-save-hook, чтобы регулярно сохранять файл рабочего стола, чтобы поддерживать его в актуальном состоянии. Смотрите Emacs Wiki для этой и других опций для улучшения функции рабочего стола.

5 голосов
/ 23 апреля 2010

Обратите внимание на информацию о cygwin в вики emacs: http://www.emacswiki.org/emacs/TrampMode

Я не использую EmacsW32, но успешно использую TRAMP поверх ssh с Cygwin и NT Emacs.

У меня никогда не было TRAMP, работающего без ssh-агента (т.е. запрашивающего учетные данные) - как вы заметили, он просто зависает - но с ним он работает нормально, поэтому я не тратил время на попытки решить эту проблему.Предполагая, что вы также счастливы использовать агент (и вы уже сгенерировали свои ключи и добавили, если необходимо, файлы author_keys), подход, который мне подходит:

  1. Запустите ssh-agent из cygwin.
  2. Запустите NT Emacs через cygwin (чтобы он наследовал переменные среды ssh-agent).
  3. Используйте 'sshx' в качестве метода TRAMP (вы можете указать его вручную в каждом пути к файлу, ноЯ рекомендую установить его по умолчанию, используя (setq tramp-default-method "sshx")).

Все эти моменты рассматриваются в вики, но вы также можете несколько автоматизировать некоторые вещи:

Для шага 1 мойПрофиль bash автоматически запускает агент ssh, если он еще не запущен, или запрашивает у меня пароль, если срок действия моей личности истек.(См. Код ниже.)

На шаге 2 цель моего ярлыка Windows для запуска emacs выглядит следующим образом:

C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"

Аргумент --login означаетМой bash профиль выполнен, что гарантирует, что шаг 1 всегда выполнялся до запуска emacs.

(Настройка HOME не требуется для TRAMP, но %APPDATA% является значением по умолчанию в NT Emacs, и это препятствует тому, чтобы домашний каталог Cygwin имел приоритет, следовательно, сохраняя вашу конфигурацию emacs непротиворечивой, независимо от того, используете ли вы этот ярлык для его запуска.)

Наконец, вот код из моего cygwin .bash_profile, который управляет моим ssh-agent.Это немного глупо, но это работает для меня.

Обратите внимание, что я теряю свою личность через 4 часа (14400 секунд).TRAMP может зависнуть после того, как это произойдет (как упоминалось ранее, я никогда не получал запрос на ввод учетных данных), поэтому следует помнить об этой проблеме.Введите C-g, чтобы остановить его от попытки подключения.Чтобы возобновить соединение, вы можете просто запустить другую оболочку cygwin, повторно ввести вашу парольную фразу, и тогда TRAMP снова будет счастлив.Время от времени он оставался без ответа, но уничтожение буфера * tramp * все уладит.Если срок действия вашей личности не истек, это, конечно, должно обойти эту проблему.

SSH_ENV="${HOME}/.ssh/environment"

# Run ssh-agent, if one is not already running
function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent -t 14400 | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" >/dev/null
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" >/dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ >/dev/null || {
        start_agent;
    }
    #if our ssh-added identity has expired (see -t option to ssh-agent)
    #then we need to re-add it
    if ! /usr/bin/ssh-add -l >/dev/null; then
        /usr/bin/ssh-add;
    fi
else
    #no ssh-agent running at the moment
    start_agent;
fi
3 голосов
/ 07 декабря 2010

Раньше я использовал EmacsW32, но у меня было множество подобных проблем. Все они ушли, когда я переключился на Emacs Cygwin. Это, вероятно, уже установлено. Просто введите в командной строке следующее:

XWin -multiwindow &
export DISPLAY=:0.0
emacs

Это будет немного легче, чем виртуальная машина Linux.

0 голосов
/ 23 января 2017

В настоящее время Cygwin поставляется с emacs-w32, поэтому вам не нужно запускать X-сервер.

Рекомендую начать с:

run emacs-w32
run emacsclient-w32 -a "" %FILE_OR_DIR%

Поскольку это Cygwin Emacs с собственным родным графическим интерфейсом Windows, он хорошо работает с TRAMP для подключения к хостам Linux.

Вы можете проверить мой скрипт http://hg.defun.work/utils/file/tip/emacs/e.bat как средство быстрого открытия файлов.

ОБНОВЛЕНИЕ С современными Windows и UAC может быть лучше запустить Cygwin Emacs как:

cygstart --action=runas run emacs-w32
...