2010-04-22 3 views
8

У меня есть проблемы с настройкой Tramp с EmacsW32 и cygwin. Я настроил emacs для использования cygwin в качестве оболочки с помощью w32shell. Я также установить переменную HOME ЭКОЛОГИЧЕСКИЙ в C:/Cygwin/дома/MyUserNameВозможно использование бродяг с EmacsW32 и cygwin?

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

«Бродяга ждет приглашения для новой оболочки».

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

+0

вы пробовали 'C: \ cygwin' с косой черты в другую сторону? – Mica

ответ

5

Принять к сведению информацию о Cygwin связанных на вики EMACS: http://www.emacswiki.org/emacs/TrampMode

Я не использую EmacsW32, но я успешно использовать бродяга через SSH с Cygwin и NT Emacs.

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

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

Эти моменты все покрыты в вики, но вы также можете автоматизировать вещи несколько:

На шаге 1, мой Баш профиль автоматически запускает 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 аргумент означает, что мой профиль Баш выполнен, который гарантирует, что шаг 1 всегда заботятся, прежде чем запускается emacs.

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

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

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

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 
+0

для работы с w32 emacs, вы можете использовать putty и его агент управления ключами pagent. Чтобы подключиться, используйте «pscp» в качестве метода tramp. после того, как у вас есть эта настройка, бродяга работает плавно. – vedang

+0

Спасибо за ваши ответы. Это исправило проблему для использования агента управления ключами. Пошел с решением ssh-agent, так как я считаю, что управление ключами немного громоздко с шпатлевкой. – grm

7

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

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

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

Это работает очень хорошо.

Я запускаю emacs в режиме демона, что означает, что не имеет значения, есть ли какие-либо проблемы с X-сервером, и если мне нужно закрыть окно Windows, я могу просто сохранить состояние VM, восстановить его потом, а не потерять сессию (*). (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». Тем не менее я все еще запускаю 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 для этого и других вариантов улучшения функции Desktop.

+0

Кроме того, предполагая, что вы хотите поделиться своими .emacs между окнами Windows и Linux, убедитесь, что вы интегрируете интеграцию Win32/Cygwin в нечто вроде этого: (когда (eq system-type 'windows-nt) (требуется «my-win32»)) – phils

3

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

 
XWin -multiwindow & 
export DISPLAY=:0.0 
emacs 

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

0

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

Я рекомендую начать его:

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

Потому что Cygwin Emacs только с родной GUI Windows, он хорошо работает с TRAMP для sshing хостам Linux.

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

UPDATE С современной ОС Windows и UAC может быть лучше, чтобы запустить Cygwin Emacs как:

cygstart --action=runas run emacs-w32 
Смежные вопросы