Используя бродягу с EmacsW32 и cygwin, возможным?

Я испытываю некоторые затруднения при установке Бродяги с EmacsW32 и cygwin. Я настроил emacs для использования cygwin в качестве оболочки с помощью w32shell. Я также установил ДОМАШНЮЮ экологическую переменную на c:/cygwin/home/myusername

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

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

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

8
задан grm 22 April 2010 в 10:44
поделиться

2 ответа

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

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

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

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

Все эти моменты описаны в Wiki, но вы также можете кое-что автоматизировать:

На шаге 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-агентом. Это немного взломано, но у меня работает.

Обратите внимание, что срок действия моей личности истекает через 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
6
ответ дан 5 December 2019 в 10:40
поделиться

В качестве примечания, с тех пор я изменил способ использования 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, я могу просто сохранить состояние виртуальной машины. , восстановить его после этого и не потерять мой сеанс (*). (рабочий стол.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 в этот файл, когда вы его запустили (я не беспокоюсь о тайм-ауте идентификации для этого).

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

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

7
ответ дан 5 December 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: