Hãy lưu ý các thông tin liên quan đến Cygwin trên emacs wiki: http://www.emacswiki.org/emacs/TrampMode
tôi không sử dụng EmacsW32, nhưng tôi sử dụng thành công TRAMP qua ssh với Cygwin và NT Emacs.
Tôi chưa bao giờ nhận được TRAMP làm việc mà không có tác nhân ssh (tức là yêu cầu thông tin xác thực) - như bạn thấy, nó chỉ bị treo - nhưng nó hoạt động tốt với một, vì vậy tôi không dành thời gian để giải quyết điều đó. Giả sử bạn cũng vui khi sử dụng tác nhân (và bạn đã tạo khóa và thêm tệp authorized_keys nếu cần), cách tiếp cận phù hợp với tôi là:
- Chạy ssh-agent from cygwin.
- Khởi chạy NT Emacs qua cygwin (để nó kế thừa các biến môi trường ssh-agent).
- Sử dụng 'sshx' làm phương pháp TRAMP (bạn có thể chỉ định nó theo cách thủ công trong mỗi đường dẫn tệp, nhưng tôi khuyên bạn nên đặt nó theo mặc định, với
(setq tramp-default-method "sshx")
).
Những điểm đều bao phủ tại Wiki, nhưng bạn cũng có thể tự động điều hơi:
Đối với bước 1, hồ sơ bash của tôi tự động khởi động một đại lý ssh nếu ai chưa chạy, hoặc nhắc nhở tôi cho cụm mật khẩu của tôi nếu danh tính của tôi đã hết hạn. (. Xem mã bên dưới)
Đối với bước 2, mục tiêu của shortcut Windows của tôi cho emacs tung ra trông như thế này:
C:\cygwin\bin\bash.exe --login -c "env HOME=\"`cygpath '%APPDATA%'`\" /cygdrive/c/emacs/emacs-23.1/bin/runemacs.exe"
Đối số --login
nghĩa hồ sơ bash của tôi được thực hiện, đảm bảo bước 1 đã luôn luôn được chăm sóc trước khi emacs được bắt đầu.
(Thiết HOME
là không cần thiết cho TRAMP, nhưng %APPDATA%
là mặc định dưới NT Emacs, và điều này ngăn ngừa sự thư mục home Cygwin từ việc ưu tiên, do đó giữ emacs của bạn cấu hình phù hợp cho dù bạn sử dụng phím tắt này để chạy nó .)
Cuối cùng, đây là mã từ cygwin của tôi .bash_profile quản lý tác nhân ssh của tôi. Đó là một chút hacky, nhưng nó làm việc cho tôi.
Lưu ý rằng tôi hết hạn nhận dạng sau 4 giờ (14400 giây). TRAMP có thể treo sau đó xảy ra (như đã đề cập trước đó, tôi không bao giờ có nó để nhắc tôi cho các thông tin), vì vậy hãy nhận thức được vấn đề này. Nhập C-g
để ngăn không cho kết nối. Để tiếp tục kết nối, bạn thường có thể khởi động một trình bao Cygwin khác, nhập lại cụm mật khẩu của bạn, và sau đó TRAMP sẽ vui vẻ trở lại. Thỉnh thoảng nó vẫn không phản hồi, nhưng giết chết bộ đệm * tramp * sẽ phân loại nó.Không hết hạn danh tính của bạn nên phá vỡ vấn đề này, tất nhiên, nên có thể chấp nhận được.
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
Bạn đã thử 'c: \ cygwin' với dấu gạch chéo theo cách khác? – Mica