84319
|
1 \input texinfo @c -*-texinfo-*-
|
|
2 @setfilename ../info/tramp
|
|
3 @c %**start of header
|
|
4 @settitle TRAMP User Manual
|
|
5 @setchapternewpage odd
|
|
6 @c %**end of header
|
|
7
|
|
8 @c This is *so* much nicer :)
|
|
9 @footnotestyle end
|
|
10
|
|
11 @c In the Tramp CVS, the version number is auto-frobbed from
|
|
12 @c configure.ac, so you should edit that file and run
|
|
13 @c "autoconf && ./configure" to change the version number.
|
|
14
|
|
15 @c Additionally, flags are set with respect to the Emacs flavor; and
|
|
16 @c depending whether Tramp is packaged into (X)Emacs, or standalone.
|
|
17
|
|
18 @include trampver.texi
|
|
19
|
|
20 @c Macro for formatting a filename according to the repective syntax.
|
|
21 @c xxx and yyy are auxiliary macros in order to omit leading and
|
|
22 @c trailing whitespace. Not very elegant, but I don't know it better.
|
|
23
|
|
24 @macro xxx {one}@c
|
|
25 @set \one\@c
|
|
26 @end macro
|
|
27
|
|
28 @macro yyy {one, two}@c
|
|
29 @xxx{x\one\}@c
|
|
30 @ifclear x@c
|
|
31 \one\@w{}\two\@c
|
|
32 @end ifclear
|
|
33 @clear x\one\@c
|
|
34 @end macro
|
|
35
|
|
36 @macro trampfn {method, user, host, localname}@c
|
|
37 @value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c
|
|
38 @end macro
|
|
39
|
|
40 @copying
|
|
41 Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
|
42 2007 Free Software Foundation, Inc.
|
|
43
|
|
44 @quotation
|
|
45 Permission is granted to copy, distribute and/or modify this document
|
|
46 under the terms of the GNU Free Documentation License, Version 1.2 or
|
|
47 any later version published by the Free Software Foundation; with no
|
|
48 Invariant Sections, with the Front-Cover texts being ``A GNU
|
|
49 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
|
|
50 license is included in the section entitled ``GNU Free Documentation
|
|
51 License'' in the Emacs manual.
|
|
52
|
|
53 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
|
|
54 this GNU Manual, like GNU software. Copies published by the Free
|
|
55 Software Foundation raise funds for GNU development.''
|
|
56
|
|
57 This document is part of a collection distributed under the GNU Free
|
|
58 Documentation License. If you want to distribute this document
|
|
59 separately from the collection, you can do so by adding a copy of the
|
|
60 license to the document, as described in section 6 of the license.
|
|
61 @end quotation
|
|
62 @end copying
|
|
63
|
|
64 @c Entries for @command{install-info} to use
|
|
65 @dircategory @value{emacsname}
|
|
66 @direntry
|
|
67 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
|
|
68 @value{emacsname} remote file access via rsh and rcp.
|
|
69 @end direntry
|
|
70
|
|
71 @tex
|
|
72
|
|
73 @titlepage
|
|
74 @title @value{tramp} version @value{trampver} User Manual
|
|
75
|
|
76 @author by Daniel Pittman
|
|
77 @author based on documentation by Kai Gro@ss{}johann
|
|
78
|
|
79 @page
|
|
80 @insertcopying
|
|
81
|
|
82 @end titlepage
|
|
83 @page
|
|
84
|
|
85 @end tex
|
|
86
|
|
87 @ifnottex
|
|
88 @node Top, Overview, (dir), (dir)
|
|
89 @top @value{tramp} version @value{trampver} User Manual
|
|
90
|
|
91 This file documents @value{tramp} version @value{trampver}, a remote file
|
|
92 editing package for @value{emacsname}.
|
|
93
|
|
94 @value{tramp} stands for `Transparent Remote (file) Access, Multiple
|
|
95 Protocol'. This package provides remote file editing, similar to
|
|
96 @value{ftppackagename}.
|
|
97
|
|
98 The difference is that @value{ftppackagename} uses FTP to transfer
|
|
99 files between the local and the remote host, whereas @value{tramp} uses a
|
|
100 combination of @command{rsh} and @command{rcp} or other work-alike
|
|
101 programs, such as @command{ssh}/@command{scp}.
|
|
102
|
|
103 You can find the latest version of this document on the web at
|
|
104 @uref{http://www.gnu.org/software/tramp/}.
|
|
105
|
|
106 @c Pointer to the other Emacs flavor is necessary only in case of
|
|
107 @c standalone installation.
|
|
108 @ifset installchapter
|
|
109 The manual has been generated for @value{emacsname}.
|
|
110 @ifinfo
|
|
111 If you want to read the info pages for @value{emacsothername}, you
|
|
112 should read in @ref{Installation} how to create them.
|
|
113 @end ifinfo
|
|
114 @ifhtml
|
|
115 If you're using the other Emacs flavor, you should read the
|
|
116 @uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
|
|
117 @end ifhtml
|
|
118 @end ifset
|
|
119
|
|
120 @ifhtml
|
|
121 @ifset jamanual
|
|
122 This manual is also available as a @uref{@value{japanesemanual},
|
|
123 Japanese translation}.
|
|
124 @end ifset
|
|
125
|
|
126 The latest release of @value{tramp} is available for
|
|
127 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
|
|
128 @ref{Obtaining Tramp} for more details, including the CVS server
|
|
129 details.
|
|
130
|
|
131 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
|
|
132 Savannah Project Page}.
|
|
133 @end ifhtml
|
|
134
|
|
135 There is a mailing list for @value{tramp}, available at
|
|
136 @email{tramp-devel@@gnu.org}, and archived at
|
|
137 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
|
|
138 @value{tramp} Mail Archive}.
|
|
139 @ifhtml
|
|
140 Older archives are located at
|
|
141 @uref{http://sourceforge.net/mailarchive/forum.php?forum=tramp-devel,
|
|
142 SourceForge Mail Archive} and
|
|
143 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/,
|
|
144 The Mail Archive}.
|
|
145 @c in HTML output, there's no new paragraph.
|
|
146 @*@*
|
|
147 @end ifhtml
|
|
148
|
|
149 @insertcopying
|
|
150
|
|
151 @end ifnottex
|
|
152
|
|
153 @menu
|
|
154 * Overview:: What @value{tramp} can and cannot do.
|
|
155
|
|
156 For the end user:
|
|
157
|
|
158 * Obtaining Tramp:: How to obtain @value{tramp}.
|
|
159 * History:: History of @value{tramp}.
|
|
160 @ifset installchapter
|
|
161 * Installation:: Installing @value{tramp} with your @value{emacsname}.
|
|
162 @end ifset
|
|
163 * Configuration:: Configuring @value{tramp} for use.
|
|
164 * Usage:: An overview of the operation of @value{tramp}.
|
|
165 * Bug Reports:: Reporting Bugs and Problems.
|
|
166 * Frequently Asked Questions:: Questions and answers from the mailing list.
|
|
167 * Concept Index:: An item for each concept.
|
|
168
|
|
169 For the developer:
|
|
170
|
|
171 * Version Control:: The inner workings of remote version control.
|
|
172 * Files directories and localnames:: How file names, directories and localnames are mangled and managed.
|
|
173 * Traces and Profiles:: How to Customize Traces.
|
|
174 * Issues:: Debatable Issues and What Was Decided.
|
|
175
|
|
176 * GNU Free Documentation License:: The license for this documentation.
|
|
177
|
|
178 @detailmenu
|
|
179 --- The Detailed Node Listing ---
|
|
180 @c
|
|
181 @ifset installchapter
|
|
182 Installing @value{tramp} with your @value{emacsname}
|
|
183
|
|
184 * Installation parameters:: Parameters in order to control installation.
|
|
185 * Load paths:: How to plug-in @value{tramp} into your environment.
|
|
186 * Japanese manual:: Japanese manual.
|
|
187
|
|
188 @end ifset
|
|
189
|
|
190 Configuring @value{tramp} for use
|
|
191
|
|
192 * Connection types:: Types of connections made to remote machines.
|
|
193 * Inline methods:: Inline methods.
|
|
194 * External transfer methods:: External transfer methods.
|
|
195 @ifset emacsgw
|
|
196 * Gateway methods:: Gateway methods.
|
|
197 @end ifset
|
|
198 * Default Method:: Selecting a default method.
|
|
199 * Default User:: Selecting a default user.
|
|
200 * Default Host:: Selecting a default host.
|
|
201 * Multi-hops:: Connecting to a remote host using multiple hops.
|
|
202 * Customizing Methods:: Using Non-Standard Methods.
|
|
203 * Customizing Completion:: Selecting config files for user/host name completion.
|
|
204 * Password caching:: Reusing passwords for several connections.
|
|
205 * Connection caching:: Reusing connection related information.
|
|
206 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
|
|
207 * Remote shell setup:: Remote shell setup hints.
|
|
208 * Windows setup hints:: Issues with Cygwin ssh.
|
|
209 * Auto-save and Backup:: Auto-save and Backup.
|
|
210
|
|
211 Using @value{tramp}
|
|
212
|
|
213 * Filename Syntax:: @value{tramp} filename conventions.
|
|
214 * Alternative Syntax:: URL-like filename syntax.
|
|
215 * Filename completion:: Filename completion.
|
|
216 * Remote processes:: Integration with other @value{emacsname} packages.
|
|
217
|
|
218 The inner workings of remote version control
|
|
219
|
|
220 * Version Controlled Files:: Determining if a file is under version control.
|
|
221 * Remote Commands:: Executing the version control commands on the remote machine.
|
|
222 * Changed workfiles:: Detecting if the working file has changed.
|
|
223 * Checking out files:: Bringing the workfile out of the repository.
|
|
224 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
|
|
225
|
|
226 Things related to Version Control that don't fit elsewhere
|
|
227
|
|
228 * Remote File Ownership:: How VC determines who owns a workfile.
|
|
229 * Back-end Versions:: How VC determines what release your RCS is.
|
|
230
|
|
231 How file names, directories and localnames are mangled and managed
|
|
232
|
|
233 * Localname deconstruction:: Breaking a localname into its components.
|
|
234
|
|
235 @end detailmenu
|
|
236 @end menu
|
|
237
|
|
238 @node Overview
|
|
239 @chapter An overview of @value{tramp}
|
|
240 @cindex overview
|
|
241
|
|
242 After the installation of @value{tramp} into your @value{emacsname}, you
|
|
243 will be able to access files on remote machines as though they were
|
|
244 local. Access to the remote file system for editing files, version
|
|
245 control, and @code{dired} are transparently enabled.
|
|
246
|
|
247 Your access to the remote machine can be with the @command{rsh},
|
|
248 @command{rlogin}, @command{telnet} programs or with any similar
|
|
249 connection method. This connection must pass @acronym{ASCII}
|
|
250 successfully to be usable but need not be 8-bit clean.
|
|
251
|
|
252 The package provides support for @command{ssh} connections out of the
|
|
253 box, one of the more common uses of the package. This allows
|
|
254 relatively secure access to machines, especially if @command{ftp}
|
|
255 access is disabled.
|
|
256
|
|
257 The majority of activity carried out by @value{tramp} requires only that
|
|
258 the remote login is possible and is carried out at the terminal. In
|
|
259 order to access remote files @value{tramp} needs to transfer their content
|
|
260 to the local machine temporarily.
|
|
261
|
|
262 @value{tramp} can transfer files between the machines in a variety of ways.
|
|
263 The details are easy to select, depending on your needs and the
|
|
264 machines in question.
|
|
265
|
|
266 The fastest transfer methods (for large files) rely on a remote file
|
|
267 transfer package such as @command{rcp}, @command{scp} or
|
|
268 @command{rsync}.
|
|
269
|
|
270 If the remote copy methods are not suitable for you, @value{tramp} also
|
|
271 supports the use of encoded transfers directly through the shell.
|
|
272 This requires that the @command{mimencode} or @command{uuencode} tools
|
|
273 are available on the remote machine. These methods are generally
|
|
274 faster for small files.
|
|
275
|
|
276 Within these limitations, @value{tramp} is quite powerful. It is worth
|
|
277 noting that, as of the time of writing, it is far from a polished
|
|
278 end-user product. For a while yet you should expect to run into rough
|
|
279 edges and problems with the code now and then.
|
|
280
|
|
281 It is finished enough that the developers use it for day to day work but
|
|
282 the installation and setup can be a little difficult to master, as can
|
|
283 the terminology.
|
|
284
|
|
285 @value{tramp} is still under active development and any problems you encounter,
|
|
286 trivial or major, should be reported to the @value{tramp} developers.
|
|
287 @xref{Bug Reports}.
|
|
288
|
|
289
|
|
290 @subsubheading Behind the scenes
|
|
291 @cindex behind the scenes
|
|
292 @cindex details of operation
|
|
293 @cindex how it works
|
|
294
|
|
295 This section tries to explain what goes on behind the scenes when you
|
|
296 access a remote file through @value{tramp}.
|
|
297
|
|
298 Suppose you type @kbd{C-x C-f} and enter part of an @value{tramp} file name,
|
|
299 then hit @kbd{@key{TAB}} for completion. Suppose further that this is
|
|
300 the first time that @value{tramp} is invoked for the host in question. Here's
|
|
301 what happens:
|
|
302
|
|
303 @itemize
|
|
304 @item
|
|
305 @value{tramp} discovers that it needs a connection to the host. So it
|
|
306 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
|
|
307 @var{user}} or a similar tool to connect to the remote host.
|
|
308 Communication with this process happens through an
|
|
309 @value{emacsname} buffer, that is, the output from the remote end
|
|
310 goes into a buffer.
|
|
311
|
|
312 @item
|
|
313 The remote host may prompt for a login name (for @command{telnet}).
|
|
314 The login name is given in the file name, so @value{tramp} sends the
|
|
315 login name and a newline.
|
|
316
|
|
317 @item
|
|
318 The remote host may prompt for a password or pass phrase (for
|
|
319 @command{rsh} or for @command{telnet} after sending the login name).
|
|
320 @value{tramp} displays the prompt in the minibuffer, asking you for the
|
|
321 password or pass phrase.
|
|
322
|
|
323 You enter the password or pass phrase. @value{tramp} sends it to the remote
|
|
324 host, followed by a newline.
|
|
325
|
|
326 @item
|
|
327 @value{tramp} now waits for the shell prompt or for a message that the login
|
|
328 failed.
|
|
329
|
|
330 If @value{tramp} sees neither of them after a certain period of time (a minute,
|
|
331 say), then it issues an error message saying that it couldn't find the
|
|
332 remote shell prompt and shows you what the remote host has sent.
|
|
333
|
|
334 If @value{tramp} sees a @samp{login failed} message, it tells you so,
|
|
335 aborts the login attempt and allows you to try again.
|
|
336
|
|
337 @item
|
|
338 Suppose that the login was successful and @value{tramp} sees the shell prompt
|
|
339 from the remote host. Now @value{tramp} invokes @command{/bin/sh} because
|
|
340 Bourne shells and C shells have different command
|
|
341 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
|
|
342 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
|
|
343 Maybe you use the Scheme shell @command{scsh}@dots{}}
|
|
344
|
|
345 After the Bourne shell has come up, @value{tramp} sends a few commands to
|
|
346 ensure a good working environment. It turns off echoing, it sets the
|
|
347 shell prompt, and a few other things.
|
|
348
|
|
349 @item
|
|
350 Now the remote shell is up and it good working order. Remember, what
|
|
351 was supposed to happen is that @value{tramp} tries to find out what files exist
|
|
352 on the remote host so that it can do filename completion.
|
|
353
|
|
354 So, @value{tramp} basically issues @command{cd} and @command{ls} commands and
|
|
355 also sometimes @command{echo} with globbing. Another command that is
|
|
356 often used is @command{test} to find out whether a file is writable or a
|
|
357 directory or the like. The output of each command is parsed for the
|
|
358 necessary operation.
|
|
359
|
|
360 @item
|
|
361 Suppose you are finished with filename completion, have entered @kbd{C-x
|
|
362 C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to
|
|
363 transfer the file contents from the remote host to the local host so
|
|
364 that you can edit them.
|
|
365
|
|
366 See above for an explanation of how @value{tramp} transfers the file contents.
|
|
367
|
|
368 For inline transfers, @value{tramp} issues a command like @samp{mimencode -b
|
|
369 /path/to/remote/file}, waits until the output has accumulated in the
|
|
370 buffer that's used for communication, then decodes that output to
|
|
371 produce the file contents.
|
|
372
|
|
373 For out-of-band transfers, @value{tramp} issues a command like the following:
|
|
374 @example
|
|
375 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
|
|
376 @end example
|
|
377 It then reads the local temporary file @file{/tmp/tramp.4711} into a
|
|
378 buffer and deletes the temporary file.
|
|
379
|
|
380 @item
|
|
381 You now edit the buffer contents, blithely unaware of what has happened
|
|
382 behind the scenes. (Unless you have read this section, that is.) When
|
|
383 you are finished, you type @kbd{C-x C-s} to save the buffer.
|
|
384
|
|
385 @item
|
|
386 Again, @value{tramp} transfers the file contents to the remote host either
|
|
387 inline or out-of-band. This is the reverse of what happens when reading
|
|
388 the file.
|
|
389 @end itemize
|
|
390
|
|
391 I hope this has provided you with a basic overview of what happens
|
|
392 behind the scenes when you open a file with @value{tramp}.
|
|
393
|
|
394
|
|
395 @c For the end user
|
|
396 @node Obtaining Tramp
|
|
397 @chapter Obtaining Tramp.
|
|
398 @cindex obtaining Tramp
|
|
399
|
|
400 @value{tramp} is freely available on the Internet and the latest
|
|
401 release may be downloaded from
|
|
402 @uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
|
|
403 documentation and code for @value{tramp}, suitable for installation.
|
|
404 But GNU Emacs (22 or later) includes @value{tramp} already, and there
|
|
405 is a @value{tramp} package for XEmacs, as well. So maybe it is easier
|
|
406 to just use those. But if you want the bleeding edge, read
|
|
407 on@dots{...}
|
|
408
|
|
409 For the especially brave, @value{tramp} is available from CVS. The CVS
|
|
410 version is the latest version of the code and may contain incomplete
|
|
411 features or new issues. Use these versions at your own risk.
|
|
412
|
|
413 Instructions for obtaining the latest development version of @value{tramp}
|
|
414 from CVS can be found by going to the Savannah project page at the
|
|
415 following URL and then clicking on the CVS link in the navigation bar
|
|
416 at the top.
|
|
417
|
|
418 @noindent
|
|
419 @uref{http://savannah.gnu.org/projects/tramp/}
|
|
420
|
|
421 @noindent
|
|
422 Or follow the example session below:
|
|
423
|
|
424 @example
|
|
425 ] @strong{cd ~/@value{emacsdir}}
|
|
426 ] @strong{export CVS_RSH="ssh"}
|
|
427 ] @strong{cvs -z3 -d:ext:anoncvs@@savannah.gnu.org:/cvsroot/tramp co tramp}
|
|
428 @end example
|
|
429
|
|
430 @noindent
|
|
431 You should now have a directory @file{~/@value{emacsdir}/tramp}
|
|
432 containing the latest version of @value{tramp}. You can fetch the latest
|
|
433 updates from the repository by issuing the command:
|
|
434
|
|
435 @example
|
|
436 ] @strong{cd ~/@value{emacsdir}/tramp}
|
|
437 ] @strong{export CVS_RSH="ssh"}
|
|
438 ] @strong{cvs update -d}
|
|
439 @end example
|
|
440
|
|
441 @noindent
|
|
442 Once you've got updated files from the CVS repository, you need to run
|
|
443 @command{autoconf} in order to get an up-to-date @file{configure}
|
|
444 script:
|
|
445
|
|
446 @example
|
|
447 ] @strong{cd ~/@value{emacsdir}/tramp}
|
|
448 ] @strong{autoconf}
|
|
449 @end example
|
|
450
|
|
451 People who have no direct CVS access (maybe because sitting behind a
|
|
452 blocking firewall), can try the
|
|
453 @uref{http://savannah.gnu.org/cvs-backup/tramp-sources.tar.gz, Nightly
|
|
454 CVS Tree Tarball} instead of.
|
|
455
|
|
456
|
|
457 @node History
|
|
458 @chapter History of @value{tramp}
|
|
459 @cindex history
|
|
460 @cindex development history
|
|
461
|
|
462 Development was started end of November 1998. The package was called
|
|
463 @file{rssh.el}, back then. It only provided one method to access a
|
|
464 file, using @command{ssh} to log in to a remote host and using
|
|
465 @command{scp} to transfer the file contents. After a while, the name
|
|
466 was changed to @file{rcp.el}, and now it's @value{tramp}. Along the way,
|
|
467 many more methods for getting a remote shell and for transferring the
|
|
468 file contents were added. Support for VC was added.
|
|
469
|
|
470 The most recent addition of major features were the multi-hop methods
|
|
471 added in April 2000 and the unification of @value{tramp} and Ange-FTP
|
|
472 filenames in July 2002. In July 2004, multi-hop methods have been
|
|
473 replaced by proxy hosts. Running commands on remote hosts was
|
|
474 introduced in December 2005.
|
|
475 @ifset emacsgw
|
|
476 Support of gateways exists since April 2007.
|
|
477 @end ifset
|
|
478
|
|
479 In December 2001, @value{tramp} has been added to the XEmacs package
|
|
480 repository. Being part of the GNU Emacs repository happened in June
|
|
481 2002, the first release including @value{tramp} was GNU Emacs 22.1.
|
|
482
|
|
483 @value{tramp} is also a GNU/Linux Debian package since February 2001.
|
|
484
|
|
485
|
|
486 @c Installation chapter is necessary only in case of standalone
|
|
487 @c installation. Text taken from trampinst.texi.
|
|
488 @ifset installchapter
|
|
489 @include trampinst.texi
|
|
490 @end ifset
|
|
491
|
|
492 @node Configuration
|
|
493 @chapter Configuring @value{tramp} for use
|
|
494 @cindex configuration
|
|
495
|
|
496 @cindex default configuration
|
|
497 @value{tramp} is (normally) fully functional when it is initially
|
|
498 installed. It is initially configured to use the @command{scp}
|
|
499 program to connect to the remote host. So in the easiest case, you
|
|
500 just type @kbd{C-x C-f} and then enter the filename
|
|
501 @file{@trampfn{, user, machine, /path/to.file}}.
|
|
502
|
|
503 On some hosts, there are problems with opening a connection. These are
|
|
504 related to the behavior of the remote shell. See @xref{Remote shell
|
|
505 setup}, for details on this.
|
|
506
|
|
507 If you do not wish to use these commands to connect to the remote
|
|
508 host, you should change the default connection and transfer method
|
|
509 that @value{tramp} uses. There are several different methods that @value{tramp}
|
|
510 can use to connect to remote machines and transfer files
|
|
511 (@pxref{Connection types}).
|
|
512
|
|
513 If you don't know which method is right for you, see @xref{Default
|
|
514 Method}.
|
|
515
|
|
516
|
|
517 @menu
|
|
518 * Connection types:: Types of connections made to remote machines.
|
|
519 * Inline methods:: Inline methods.
|
|
520 * External transfer methods:: External transfer methods.
|
|
521 @ifset emacsgw
|
|
522 * Gateway methods:: Gateway methods.
|
|
523 @end ifset
|
|
524 * Default Method:: Selecting a default method.
|
|
525 Here we also try to help those who
|
|
526 don't have the foggiest which method
|
|
527 is right for them.
|
|
528 * Default User:: Selecting a default user.
|
|
529 * Default Host:: Selecting a default host.
|
|
530 * Multi-hops:: Connecting to a remote host using multiple hops.
|
|
531 * Customizing Methods:: Using Non-Standard Methods.
|
|
532 * Customizing Completion:: Selecting config files for user/host name completion.
|
|
533 * Password caching:: Reusing passwords for several connections.
|
|
534 * Connection caching:: Reusing connection related information.
|
|
535 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
|
|
536 * Remote shell setup:: Remote shell setup hints.
|
|
537 * Windows setup hints:: Issues with Cygwin ssh.
|
|
538 * Auto-save and Backup:: Auto-save and Backup.
|
|
539 @end menu
|
|
540
|
|
541
|
|
542 @node Connection types
|
|
543 @section Types of connections made to remote machines.
|
|
544 @cindex connection types, overview
|
|
545
|
|
546 There are two basic types of transfer methods, each with its own
|
|
547 advantages and limitations. Both types of connection make use of a
|
|
548 remote shell access program such as @command{rsh}, @command{ssh} or
|
|
549 @command{telnet} to connect to the remote machine.
|
|
550
|
|
551 This connection is used to perform many of the operations that @value{tramp}
|
|
552 requires to make the remote file system transparently accessible from
|
|
553 the local machine. It is only when visiting files that the methods
|
|
554 differ.
|
|
555
|
|
556 @cindex inline methods
|
|
557 @cindex external transfer methods
|
|
558 @cindex external methods
|
|
559 @cindex out-of-band methods
|
|
560 @cindex methods, inline
|
|
561 @cindex methods, external transfer
|
|
562 @cindex methods, out-of-band
|
|
563 Loading or saving a remote file requires that the content of the file
|
|
564 be transfered between the two machines. The content of the file can be
|
|
565 transfered over the same connection used to log in to the remote
|
|
566 machine or the file can be transfered through another connection using
|
|
567 a remote copy program such as @command{rcp}, @command{scp} or
|
|
568 @command{rsync}. The former are called @dfn{inline methods}, the
|
|
569 latter are called @dfn{out-of-band methods} or @dfn{external transfer
|
|
570 methods} (@dfn{external methods} for short).
|
|
571
|
|
572 The performance of the external transfer methods is generally better
|
|
573 than that of the inline methods, at least for large files. This is
|
|
574 caused by the need to encode and decode the data when transferring
|
|
575 inline.
|
|
576
|
|
577 The one exception to this rule are the @command{scp} based transfer
|
|
578 methods. While these methods do see better performance when actually
|
|
579 transferring files, the overhead of the cryptographic negotiation at
|
|
580 startup may drown out the improvement in file transfer times.
|
|
581
|
|
582 External transfer methods should be configured such a way that they
|
|
583 don't require a password (with @command{ssh-agent}, or such alike).
|
|
584 Modern @command{scp} implementations offer options to reuse existing
|
|
585 @command{ssh} connections, see method @command{scpc}. If it isn't
|
|
586 possible, you should consider @ref{Password caching}, otherwise you
|
|
587 will be prompted for a password every copy action.
|
|
588
|
|
589
|
|
590 @node Inline methods
|
|
591 @section Inline methods
|
|
592 @cindex inline methods
|
|
593 @cindex methods, inline
|
|
594
|
|
595 The inline methods in @value{tramp} are quite powerful and can work in
|
|
596 situations where you cannot use an external transfer program to connect.
|
|
597 Inline methods are the only methods that work when connecting to the
|
|
598 remote machine via telnet. (There are also strange inline methods which
|
|
599 allow you to transfer files between @emph{user identities} rather than
|
|
600 hosts, see below.)
|
|
601
|
|
602 These methods depend on the existence of a suitable encoding and
|
|
603 decoding command on remote machine. Locally, @value{tramp} may be able to
|
|
604 use features of @value{emacsname} to decode and encode the files or
|
|
605 it may require access to external commands to perform that task.
|
|
606
|
|
607 @cindex uuencode
|
|
608 @cindex mimencode
|
|
609 @cindex base-64 encoding
|
|
610 @value{tramp} checks the availability and usability of commands like
|
|
611 @command{mimencode} (part of the @command{metamail} package) or
|
|
612 @command{uuencode} on the remote host. The first reliable command
|
|
613 will be used. The search path can be customized, see @ref{Remote
|
|
614 Programs}.
|
|
615
|
|
616 If both commands aren't available on the remote host, @value{tramp}
|
|
617 transfers a small piece of Perl code to the remote host, and tries to
|
|
618 apply it for encoding and decoding.
|
|
619
|
|
620
|
|
621 @table @asis
|
|
622 @item @option{rsh}
|
|
623 @cindex method rsh
|
|
624 @cindex rsh method
|
|
625
|
|
626 Connect to the remote host with @command{rsh}. Due to the unsecure
|
|
627 connection it is recommended for very local host topology only.
|
|
628
|
|
629 On operating systems which provide the command @command{remsh} instead
|
|
630 of @command{rsh}, you can use the method @option{remsh}. This is true
|
|
631 for HP-UX or Cray UNICOS, for example.
|
|
632
|
|
633
|
|
634 @item @option{ssh}
|
|
635 @cindex method ssh
|
|
636 @cindex ssh method
|
|
637
|
|
638 Connect to the remote host with @command{ssh}. This is identical to
|
|
639 the previous option except that the @command{ssh} package is used,
|
|
640 making the connection more secure.
|
|
641
|
|
642 There are also two variants, @option{ssh1} and @option{ssh2}, that
|
|
643 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
|
|
644 explicitly select whether you want to use the SSH protocol version 1
|
|
645 or 2 to connect to the remote host. (You can also specify in
|
|
646 @file{~/.ssh/config}, the SSH configuration file, which protocol
|
|
647 should be used, and use the regular @option{ssh} method.)
|
|
648
|
|
649 Two other variants, @option{ssh1_old} and @option{ssh2_old}, use the
|
|
650 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
|
|
651 know what these are, you do not need these options.
|
|
652
|
|
653 All the methods based on @command{ssh} have an additional kludgy
|
|
654 feature: you can specify a host name which looks like @file{host#42}
|
|
655 (the real host name, then a hash sign, then a port number). This
|
|
656 means to connect to the given host but to also pass @code{-p 42} as
|
|
657 arguments to the @command{ssh} command.
|
|
658
|
|
659
|
|
660 @item @option{telnet}
|
|
661 @cindex method telnet
|
|
662 @cindex telnet method
|
|
663
|
|
664 Connect to the remote host with @command{telnet}. This is as unsecure
|
|
665 as the @option{rsh} method.
|
|
666
|
|
667
|
|
668 @item @option{su}
|
|
669 @cindex method su
|
|
670 @cindex su method
|
|
671
|
|
672 This method does not connect to a remote host at all, rather it uses
|
|
673 the @command{su} program to allow you to edit files as another user.
|
|
674 With other words, a specified host name in the file name is silently
|
|
675 ignored.
|
|
676
|
|
677
|
|
678 @item @option{sudo}
|
|
679 @cindex method sudo
|
|
680 @cindex sudo method
|
|
681
|
|
682 This is similar to the @option{su} method, but it uses @command{sudo}
|
|
683 rather than @command{su} to become a different user.
|
|
684
|
|
685 Note that @command{sudo} must be configured to allow you to start a
|
|
686 shell as the user. It would be nice if it was sufficient if
|
|
687 @command{ls} and @command{mimencode} were allowed, but that is not
|
|
688 easy to implement, so I haven't got around to it, yet.
|
|
689
|
|
690
|
|
691 @item @option{sshx}
|
|
692 @cindex method sshx
|
|
693 @cindex sshx method
|
|
694
|
|
695 As you would expect, this is similar to @option{ssh}, only a little
|
|
696 different. Whereas @option{ssh} opens a normal interactive shell on
|
|
697 the remote host, this option uses @samp{ssh -t -t @var{host} -l
|
|
698 @var{user} /bin/sh} to open a connection. This is useful for users
|
|
699 where the normal login shell is set up to ask them a number of
|
|
700 questions when logging in. This procedure avoids these questions, and
|
|
701 just gives @value{tramp} a more-or-less `standard' login shell to work
|
|
702 with.
|
|
703
|
|
704 Note that this procedure does not eliminate questions asked by
|
|
705 @command{ssh} itself. For example, @command{ssh} might ask ``Are you
|
|
706 sure you want to continue connecting?'' if the host key of the remote
|
|
707 host is not known. @value{tramp} does not know how to deal with such a
|
|
708 question (yet), therefore you will need to make sure that you can log
|
|
709 in without such questions.
|
|
710
|
|
711 This is also useful for Windows users where @command{ssh}, when
|
|
712 invoked from an @value{emacsname} buffer, tells them that it is not
|
|
713 allocating a pseudo tty. When this happens, the login shell is wont
|
|
714 to not print any shell prompt, which confuses @value{tramp} mightily.
|
|
715 For reasons unknown, some Windows ports for @command{ssh} require the
|
|
716 doubled @samp{-t} option.
|
|
717
|
|
718 This supports the @samp{-p} kludge.
|
|
719
|
|
720
|
|
721 @item @option{krlogin}
|
|
722 @cindex method krlogin
|
|
723 @cindex krlogin method
|
|
724 @cindex Kerberos (with krlogin method)
|
|
725
|
|
726 This method is also similar to @option{ssh}. It only uses the
|
|
727 @command{krlogin -x} command to log in to the remote host.
|
|
728
|
|
729
|
|
730 @item @option{plink}
|
|
731 @cindex method plink
|
|
732 @cindex plink method
|
|
733
|
|
734 This method is mostly interesting for Windows users using the PuTTY
|
|
735 implementation of SSH. It uses @samp{plink -ssh} to log in to the
|
|
736 remote host.
|
|
737
|
|
738 This supports the @samp{-P} kludge.
|
|
739
|
|
740 Additionally, the methods @option{plink1} and @option{plink2} are
|
|
741 provided, which call @samp{plink -1 -ssh} or @samp{plink -2 -ssh} in
|
|
742 order to use SSH protocol version 1 or 2 explicitly.
|
|
743
|
|
744 CCC: Do we have to connect to the remote host once from the command
|
|
745 line to accept the SSH key? Maybe this can be made automatic?
|
|
746
|
|
747 CCC: Say something about the first shell command failing. This might
|
|
748 be due to a wrong setting of @code{tramp-rsh-end-of-line}.
|
|
749
|
|
750
|
|
751 @item @option{plinkx}
|
|
752 @cindex method plinkx
|
|
753 @cindex plinkx method
|
|
754
|
|
755 Another method using PuTTY on Windows. Instead of host names, it
|
|
756 expects PuTTY session names, calling @samp{plink -load @var{session}
|
|
757 -t"}. User names are relevant only in case the corresponding session
|
|
758 hasn't defined a user name. Different port numbers must be defined in
|
|
759 the session.
|
|
760
|
|
761
|
|
762 @item @option{fish}
|
|
763 @cindex method fish
|
|
764 @cindex fish method
|
|
765
|
|
766 This is an experimental implementation of the fish protocol, known from
|
|
767 the GNU Midnight Commander or the KDE Konqueror. @value{tramp} expects
|
|
768 the fish server implementation from the KDE kioslave. That means, the
|
|
769 file @file{~/.fishsrv.pl} is expected to reside on the remote host.
|
|
770
|
|
771 The implementation lacks good performance. The code is offered anyway,
|
|
772 maybe somebody can improve the performance.
|
|
773
|
|
774 @end table
|
|
775
|
|
776
|
|
777 @node External transfer methods
|
|
778 @section External transfer methods
|
|
779 @cindex methods, external transfer
|
|
780 @cindex methods, out-of-band
|
|
781 @cindex external transfer methods
|
|
782 @cindex out-of-band methods
|
|
783
|
|
784 The external transfer methods operate through multiple channels, using
|
|
785 the remote shell connection for many actions while delegating file
|
|
786 transfers to an external transfer utility.
|
|
787
|
|
788 This saves the overhead of encoding and decoding that multiplexing the
|
|
789 transfer through the one connection has with the inline methods.
|
|
790
|
|
791 Since external transfer methods need their own overhead opening a new
|
|
792 channel, all files which are smaller than @var{tramp-copy-size-limit}
|
|
793 are still transferred with the corresponding inline method. It should
|
|
794 provide a fair trade-off between both approaches.
|
|
795
|
|
796 @table @asis
|
|
797 @item @option{rcp} --- @command{rsh} and @command{rcp}
|
|
798 @cindex method rcp
|
|
799 @cindex rcp method
|
|
800 @cindex rcp (with rcp method)
|
|
801 @cindex rsh (with rcp method)
|
|
802
|
|
803 This method uses the @command{rsh} and @command{rcp} commands to connect
|
|
804 to the remote machine and transfer files. This is probably the fastest
|
|
805 connection method available.
|
|
806
|
|
807 The alternative method @option{remcp} uses the @command{remsh} and
|
|
808 @command{rcp} commands. It should be applied on machines where
|
|
809 @command{remsh} is used instead of @command{rsh}.
|
|
810
|
|
811
|
|
812 @item @option{scp} --- @command{ssh} and @command{scp}
|
|
813 @cindex method scp
|
|
814 @cindex scp method
|
|
815 @cindex scp (with scp method)
|
|
816 @cindex ssh (with scp method)
|
|
817
|
|
818 Using @command{ssh} to connect to the remote host and @command{scp} to
|
|
819 transfer files between the machines is the best method for securely
|
|
820 connecting to a remote machine and accessing files.
|
|
821
|
|
822 The performance of this option is also quite good. It may be slower than
|
|
823 the inline methods when you often open and close small files however.
|
|
824 The cost of the cryptographic handshake at the start of an @command{scp}
|
|
825 session can begin to absorb the advantage that the lack of encoding and
|
|
826 decoding presents.
|
|
827
|
|
828 There are also two variants, @option{scp1} and @option{scp2}, that
|
|
829 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
|
|
830 explicitly select whether you want to use the SSH protocol version 1
|
|
831 or 2 to connect to the remote host. (You can also specify in
|
|
832 @file{~/.ssh/config}, the SSH configuration file, which protocol
|
|
833 should be used, and use the regular @option{scp} method.)
|
|
834
|
|
835 Two other variants, @option{scp1_old} and @option{scp2_old}, use the
|
|
836 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
|
|
837 know what these are, you do not need these options.
|
|
838
|
|
839 All the @command{ssh} based methods support the kludgy @samp{-p}
|
|
840 feature where you can specify a port number to connect to in the host
|
|
841 name. For example, the host name @file{host#42} tells @value{tramp} to
|
|
842 specify @samp{-p 42} in the argument list for @command{ssh}, and to
|
|
843 specify @samp{-P 42} in the argument list for @command{scp}.
|
|
844
|
|
845
|
|
846 @item @option{sftp} --- @command{ssh} and @command{sftp}
|
|
847 @cindex method sftp
|
|
848 @cindex sftp method
|
|
849 @cindex sftp (with sftp method)
|
|
850 @cindex ssh (with sftp method)
|
|
851
|
|
852 That is mostly the same method as @option{scp}, but using
|
|
853 @command{sftp} as transfer command. So the same remarks are valid.
|
|
854
|
|
855 This command does not work like @value{ftppackagename}, where
|
|
856 @command{ftp} is called interactively, and all commands are send from
|
|
857 within this session. Instead of, @command{ssh} is used for login.
|
|
858
|
|
859 This method supports the @samp{-p} hack.
|
|
860
|
|
861
|
|
862 @item @option{rsync} --- @command{ssh} and @command{rsync}
|
|
863 @cindex method rsync
|
|
864 @cindex rsync method
|
|
865 @cindex rsync (with rsync method)
|
|
866 @cindex ssh (with rsync method)
|
|
867
|
|
868 Using the @command{ssh} command to connect securely to the remote
|
|
869 machine and the @command{rsync} command to transfer files is almost
|
|
870 identical to the @option{scp} method.
|
|
871
|
|
872 While @command{rsync} performs much better than @command{scp} when
|
|
873 transferring files that exist on both hosts, this advantage is lost if
|
|
874 the file exists only on one side of the connection.
|
|
875
|
|
876 The @command{rsync} based method may be considerably faster than the
|
|
877 @command{rcp} based methods when writing to the remote system. Reading
|
|
878 files to the local machine is no faster than with a direct copy.
|
|
879
|
|
880 This method supports the @samp{-p} hack.
|
|
881
|
|
882
|
|
883 @item @option{scpx} --- @command{ssh} and @command{scp}
|
|
884 @cindex method scpx
|
|
885 @cindex scpx method
|
|
886 @cindex scp (with scpx method)
|
|
887 @cindex ssh (with scpx method)
|
|
888
|
|
889 As you would expect, this is similar to @option{scp}, only a little
|
|
890 different. Whereas @option{scp} opens a normal interactive shell on
|
|
891 the remote host, this option uses @samp{ssh -t -t @var{host} -l
|
|
892 @var{user} /bin/sh} to open a connection. This is useful for users
|
|
893 where the normal login shell is set up to ask them a number of
|
|
894 questions when logging in. This procedure avoids these questions, and
|
|
895 just gives @value{tramp} a more-or-less `standard' login shell to work
|
|
896 with.
|
|
897
|
|
898 This is also useful for Windows users where @command{ssh}, when
|
|
899 invoked from an @value{emacsname} buffer, tells them that it is not
|
|
900 allocating a pseudo tty. When this happens, the login shell is wont
|
|
901 to not print any shell prompt, which confuses @value{tramp} mightily.
|
|
902
|
|
903 This method supports the @samp{-p} hack.
|
|
904
|
|
905
|
|
906 @item @option{scpc} --- @command{ssh} and @command{scp}
|
|
907 @cindex method scpx
|
|
908 @cindex scpx method
|
|
909 @cindex scp (with scpx method)
|
|
910 @cindex ssh (with scpx method)
|
|
911
|
|
912 Newer versions of @option{ssh} (for example OpenSSH 4) offer an option
|
|
913 @option{ControlMaster}. This allows @option{scp} to reuse an existing
|
|
914 @option{ssh} channel, which increases performance.
|
|
915
|
|
916 Before you use this method, you shall check whether your @option{ssh}
|
|
917 implementation does support this option. Try from the command line
|
|
918
|
|
919 @example
|
|
920 ssh localhost -o ControlMaster=yes
|
|
921 @end example
|
|
922
|
|
923 This method supports the @samp{-p} hack.
|
|
924
|
|
925
|
|
926 @item @option{pscp} --- @command{plink} and @command{pscp}
|
|
927 @cindex method pscp
|
|
928 @cindex pscp method
|
|
929 @cindex pscp (with pscp method)
|
|
930 @cindex plink (with pscp method)
|
|
931 @cindex PuTTY (with pscp method)
|
|
932
|
|
933 This method is similar to @option{scp}, but it uses the
|
|
934 @command{plink} command to connect to the remote host, and it uses
|
|
935 @command{pscp} for transferring the files. These programs are part
|
|
936 of PuTTY, an SSH implementation for Windows.
|
|
937
|
|
938 This method supports the @samp{-P} hack.
|
|
939
|
|
940
|
|
941 @item @option{psftp} --- @command{plink} and @command{psftp}
|
|
942 @cindex method psftp
|
|
943 @cindex psftp method
|
|
944 @cindex psftp (with psftp method)
|
|
945 @cindex plink (with psftp method)
|
|
946 @cindex PuTTY (with psftp method)
|
|
947
|
|
948 As you would expect, this method is similar to @option{sftp}, but it
|
|
949 uses the @command{plink} command to connect to the remote host, and it
|
|
950 uses @command{psftp} for transferring the files. These programs are
|
|
951 part of PuTTY, an SSH implementation for Windows.
|
|
952
|
|
953 This method supports the @samp{-P} hack.
|
|
954
|
|
955
|
|
956 @item @option{fcp} --- @command{fsh} and @command{fcp}
|
|
957 @cindex method fcp
|
|
958 @cindex fcp method
|
|
959 @cindex fsh (with fcp method)
|
|
960 @cindex fcp (with fcp method)
|
|
961
|
|
962 This method is similar to @option{scp}, but it uses the @command{fsh}
|
|
963 command to connect to the remote host, and it uses @command{fcp} for
|
|
964 transferring the files. @command{fsh/fcp} are a front-end for
|
|
965 @command{ssh} which allow for reusing the same @command{ssh} session
|
|
966 for submitting several commands. This avoids the startup overhead of
|
|
967 @command{scp} (which has to establish a secure connection whenever it
|
|
968 is called). Note, however, that you can also use one of the inline
|
|
969 methods to achieve a similar effect.
|
|
970
|
|
971 This method uses the command @samp{fsh @var{host} -l @var{user}
|
|
972 /bin/sh -i} to establish the connection, it does not work to just say
|
|
973 @command{fsh @var{host} -l @var{user}}.
|
|
974
|
|
975 @cindex method fsh
|
|
976 @cindex fsh method
|
|
977
|
|
978 There is no inline method using @command{fsh} as the multiplexing
|
|
979 provided by the program is not very useful in our context. @value{tramp}
|
|
980 opens just one connection to the remote host and then keeps it open,
|
|
981 anyway.
|
|
982
|
|
983
|
|
984 @item @option{ftp}
|
|
985 @cindex method ftp
|
|
986 @cindex ftp method
|
|
987
|
|
988 This is not a native @value{tramp} method. Instead of, it forwards all
|
|
989 requests to @value{ftppackagename}.
|
|
990 @ifset xemacs
|
|
991 This works only for unified filenames, see @ref{Issues}.
|
|
992 @end ifset
|
|
993
|
|
994
|
|
995 @item @option{smb} --- @command{smbclient}
|
|
996 @cindex method smb
|
|
997 @cindex smb method
|
|
998
|
|
999 This is another not natural @value{tramp} method. It uses the
|
|
1000 @command{smbclient} command on different Unices in order to connect to
|
|
1001 an SMB server. An SMB server might be a Samba (or CIFS) server on
|
|
1002 another UNIX host or, more interesting, a host running MS Windows. So
|
|
1003 far, it is tested towards MS Windows NT, MS Windows 2000, and MS
|
|
1004 Windows XP.
|
|
1005
|
|
1006 The first directory in the localname must be a share name on the remote
|
|
1007 host. Remember, that the @code{$} character in which default shares
|
|
1008 usually end, must be written @code{$$} due to environment variable
|
|
1009 substitution in file names. If no share name is given (i.e. remote
|
|
1010 directory @code{/}), all available shares are listed.
|
|
1011
|
|
1012 Since authorization is done on share level, you will be prompted
|
|
1013 always for a password if you access another share on the same host.
|
|
1014 This can be suppressed by @ref{Password caching}.
|
|
1015
|
|
1016 MS Windows uses for authorization both a user name and a domain name.
|
|
1017 Because of this, the @value{tramp} syntax has been extended: you can
|
|
1018 specify a user name which looks like @code{user%domain} (the real user
|
|
1019 name, then a percent sign, then the domain name). So, to connect to
|
|
1020 the machine @code{melancholia} as user @code{daniel} of the domain
|
|
1021 @code{BIZARRE}, and edit @file{.emacs} in the home directory (share
|
|
1022 @code{daniel$}) I would specify the filename @file{@trampfn{smb,
|
|
1023 daniel%BIZARRE, melancholia, /daniel$$/.emacs}}.
|
|
1024
|
|
1025 Depending on the Windows domain configuration, a Windows user might be
|
|
1026 considered as domain user per default. In order to connect as local
|
|
1027 user, the WINS name of that machine must be given as domain name.
|
|
1028 Usually, it is the machine name in capital letters. In the example
|
|
1029 above, the local user @code{daniel} would be specified as
|
|
1030 @file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}.
|
|
1031
|
|
1032 The domain name as well as the user name are optional. If no user
|
|
1033 name is specified at all, the anonymous user (without password
|
|
1034 prompting) is assumed. This is different from all other @value{tramp}
|
|
1035 methods, where in such a case the local user name is taken.
|
|
1036
|
|
1037 The @option{smb} method supports the @samp{-p} hack.
|
|
1038
|
|
1039 @strong{Please note:} If @value{emacsname} runs locally under MS
|
|
1040 Windows, this method isn't available. Instead of, you can use UNC
|
|
1041 file names like @file{//melancholia/daniel$$/.emacs}. The only
|
|
1042 disadvantage is that there's no possibility to specify another user
|
|
1043 name.
|
|
1044
|
|
1045 @end table
|
|
1046
|
|
1047
|
|
1048 @ifset emacsgw
|
|
1049 @node Gateway methods
|
|
1050 @section Gateway methods
|
|
1051 @cindex methods, gateway
|
|
1052 @cindex gateway methods
|
|
1053
|
|
1054 Gateway methods are not methods to access a remote host directly.
|
|
1055 These methods are intended to pass firewalls or proxy servers.
|
|
1056 Therefore, they can be used for proxy host declarations
|
|
1057 (@pxref{Multi-hops}) only.
|
|
1058
|
|
1059 A gateway method must come always along with a method who supports
|
|
1060 port setting (referred to as @samp{-p} kludge). This is because
|
|
1061 @value{tramp} targets the accompanied method to
|
|
1062 @file{localhost#random_port}, from where the firewall or proxy server
|
|
1063 is accessed to.
|
|
1064
|
|
1065 Gateway methods support user name and password declarations. These
|
|
1066 are used to authenticate towards the corresponding firewall or proxy
|
|
1067 server. They can be passed only if your friendly administrator has
|
|
1068 granted your access.
|
|
1069
|
|
1070 @table @asis
|
|
1071 @item @option{tunnel}
|
|
1072 @cindex method tunnel
|
|
1073 @cindex tunnel method
|
|
1074
|
|
1075 This method implements an HTTP tunnel via the @command{CONNECT}
|
|
1076 command (see RFC 2616, 2817). Any HTTP 1.1 compliant (proxy) server
|
|
1077 shall support this command.
|
|
1078
|
|
1079 As authentication method, only @option{Basic Authentication} (see RFC
|
|
1080 2617) is implemented so far. If no port number is given in the
|
|
1081 declaration, port @option{8080} is used for the proxy server.
|
|
1082
|
|
1083
|
|
1084 @item @option{socks}
|
|
1085 @cindex method socks
|
|
1086 @cindex socks method
|
|
1087
|
|
1088 The @command{socks} method provides access to SOCKSv5 servers (see
|
|
1089 RFC 1928). @option{Username/Password Authentication} according to RFC
|
|
1090 1929 is supported.
|
|
1091
|
|
1092 The default port number of the socks server is @option{1080}, if not
|
|
1093 specified otherwise.
|
|
1094
|
|
1095 @end table
|
|
1096 @end ifset
|
|
1097
|
|
1098
|
|
1099 @node Default Method
|
|
1100 @section Selecting a default method
|
|
1101 @cindex default method
|
|
1102
|
|
1103 @vindex tramp-default-method
|
|
1104 When you select an appropriate transfer method for your typical usage
|
|
1105 you should set the variable @code{tramp-default-method} to reflect that
|
|
1106 choice. This variable controls which method will be used when a method
|
|
1107 is not specified in the @value{tramp} file name. For example:
|
|
1108
|
|
1109 @lisp
|
|
1110 (setq tramp-default-method "ssh")
|
|
1111 @end lisp
|
|
1112
|
|
1113 @vindex tramp-default-method-alist
|
|
1114 You can also specify different methods for certain user/host
|
|
1115 combinations, via the variable @code{tramp-default-method-alist}. For
|
|
1116 example, the following two lines specify to use the @option{ssh}
|
|
1117 method for all user names matching @samp{john} and the @option{rsync}
|
|
1118 method for all host names matching @samp{lily}. The third line
|
|
1119 specifies to use the @option{su} method for the user @samp{root} on
|
|
1120 the machine @samp{localhost}.
|
|
1121
|
|
1122 @lisp
|
|
1123 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
|
|
1124 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
|
|
1125 (add-to-list 'tramp-default-method-alist
|
|
1126 '("\\`localhost\\'" "\\`root\\'" "su"))
|
|
1127 @end lisp
|
|
1128
|
|
1129 @noindent
|
|
1130 See the documentation for the variable
|
|
1131 @code{tramp-default-method-alist} for more details.
|
|
1132
|
|
1133 External transfer methods are normally preferable to inline transfer
|
|
1134 methods, giving better performance.
|
|
1135
|
|
1136 @xref{Inline methods}.
|
|
1137 @xref{External transfer methods}.
|
|
1138
|
|
1139 Another consideration with the selection of transfer methods is the
|
|
1140 environment you will use them in and, especially when used over the
|
|
1141 Internet, the security implications of your preferred method.
|
|
1142
|
|
1143 The @option{rsh} and @option{telnet} methods send your password as
|
|
1144 plain text as you log in to the remote machine, as well as
|
|
1145 transferring the files in such a way that the content can easily be
|
|
1146 read from other machines.
|
|
1147
|
|
1148 If you need to connect to remote systems that are accessible from the
|
|
1149 Internet, you should give serious thought to using @option{ssh} based
|
|
1150 methods to connect. These provide a much higher level of security,
|
|
1151 making it a non-trivial exercise for someone to obtain your password
|
|
1152 or read the content of the files you are editing.
|
|
1153
|
|
1154
|
|
1155 @subsection Which method is the right one for me?
|
|
1156 @cindex choosing the right method
|
|
1157
|
|
1158 Given all of the above, you are probably thinking that this is all fine
|
|
1159 and good, but it's not helping you to choose a method! Right you are.
|
|
1160 As a developer, we don't want to boss our users around but give them
|
|
1161 maximum freedom instead. However, the reality is that some users would
|
|
1162 like to have some guidance, so here I'll try to give you this guidance
|
|
1163 without bossing you around. You tell me whether it works @dots{}
|
|
1164
|
|
1165 My suggestion is to use an inline method. For large files, out-of-band
|
|
1166 methods might be more efficient, but I guess that most people will want
|
|
1167 to edit mostly small files.
|
|
1168
|
|
1169 I guess that these days, most people can access a remote machine by
|
|
1170 using @command{ssh}. So I suggest that you use the @option{ssh}
|
|
1171 method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost,
|
|
1172 /etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other
|
|
1173 host.
|
|
1174
|
|
1175 If you can't use @option{ssh} to log in to the remote host, then
|
|
1176 select a method that uses a program that works. For instance, Windows
|
|
1177 users might like the @option{plink} method which uses the PuTTY
|
|
1178 implementation of @command{ssh}. Or you use Kerberos and thus like
|
|
1179 @option{krlogin}.
|
|
1180
|
|
1181 For the special case of editing files on the local host as another
|
|
1182 user, see the @option{su} or @option{sudo} methods. They offer
|
|
1183 shortened syntax for the @samp{root} account, like
|
|
1184 @file{@trampfn{su, , , /etc/motd}}.
|
|
1185
|
|
1186 People who edit large files may want to consider @option{scpc} instead
|
|
1187 of @option{ssh}, or @option{pscp} instead of @option{plink}. These
|
|
1188 out-of-band methods are faster than inline methods for large files.
|
|
1189 Note, however, that out-of-band methods suffer from some limitations.
|
|
1190 Please try first whether you really get a noticeable speed advantage
|
|
1191 from using an out-of-band method! Maybe even for large files, inline
|
|
1192 methods are fast enough.
|
|
1193
|
|
1194
|
|
1195 @node Default User
|
|
1196 @section Selecting a default user
|
|
1197 @cindex default user
|
|
1198
|
|
1199 The user part of a @value{tramp} file name can be omitted. Usually,
|
|
1200 it is replaced by the user name you are logged in. Often, this is not
|
|
1201 what you want. A typical use of @value{tramp} might be to edit some
|
|
1202 files with root permissions on the local host. This case, you should
|
|
1203 set the variable @code{tramp-default-user} to reflect that choice.
|
|
1204 For example:
|
|
1205
|
|
1206 @lisp
|
|
1207 (setq tramp-default-user "root")
|
|
1208 @end lisp
|
|
1209
|
|
1210 @code{tramp-default-user} is regarded as obsolete, and will be removed
|
|
1211 soon.
|
|
1212
|
|
1213 @vindex tramp-default-user-alist
|
|
1214 You can also specify different users for certain method/host
|
|
1215 combinations, via the variable @code{tramp-default-user-alist}. For
|
|
1216 example, if you always have to use the user @samp{john} in the domain
|
|
1217 @samp{somewhere.else}, you can specify the following:
|
|
1218
|
|
1219 @lisp
|
|
1220 (add-to-list 'tramp-default-user-alist
|
|
1221 '("ssh" ".*\\.somewhere\\.else\\'" "john"))
|
|
1222 @end lisp
|
|
1223
|
|
1224 @noindent
|
|
1225 See the documentation for the variable
|
|
1226 @code{tramp-default-user-alist} for more details.
|
|
1227
|
|
1228 One trap to fall in must be known. If @value{tramp} finds a default
|
|
1229 user, this user will be passed always to the connection command as
|
|
1230 parameter (for example @samp{ssh here.somewhere.else -l john}. If you
|
|
1231 have specified another user for your command in its configuration
|
|
1232 files, @value{tramp} cannot know it, and the remote access will fail.
|
|
1233 If you have specified in the given example in @file{~/.ssh/config} the
|
|
1234 lines
|
|
1235
|
|
1236 @example
|
|
1237 Host here.somewhere.else
|
|
1238 User lily
|
|
1239 @end example
|
|
1240
|
|
1241 @noindent
|
|
1242 than you must discard selecting a default user by @value{tramp}. This
|
|
1243 will be done by setting it to @code{nil} (or @samp{lily}, likewise):
|
|
1244
|
|
1245 @lisp
|
|
1246 (add-to-list 'tramp-default-user-alist
|
|
1247 '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
|
|
1248 @end lisp
|
|
1249
|
|
1250 The last entry in @code{tramp-default-user-alist} could be your
|
|
1251 default user you'll apply predominantly. You shall @emph{append} it
|
|
1252 to that list at the end:
|
|
1253
|
|
1254 @lisp
|
|
1255 (add-to-list 'tramp-default-user-alist '(nil nil "jonas") t)
|
|
1256 @end lisp
|
|
1257
|
|
1258
|
|
1259 @node Default Host
|
|
1260 @section Selecting a default host
|
|
1261 @cindex default host
|
|
1262
|
|
1263 @vindex tramp-default-host
|
|
1264 Finally, it is even possible to omit the host name part of a
|
|
1265 @value{tramp} file name. This case, the value of the variable
|
|
1266 @code{tramp-default-host} is used. Per default, it is initialized
|
|
1267 with the host name your local @value{emacsname} is running.
|
|
1268
|
|
1269 If you, for example, use @value{tramp} mainly to contact the host
|
|
1270 @samp{target} as user @samp{john}, you can specify:
|
|
1271
|
|
1272 @lisp
|
|
1273 (setq tramp-default-user "john"
|
|
1274 tramp-default-host "target")
|
|
1275 @end lisp
|
|
1276
|
|
1277 Then the simple file name @samp{@trampfn{ssh, , ,}} will connect you
|
|
1278 to John's home directory on target.
|
|
1279 @ifset emacs
|
|
1280 Note, however, that the most simplification @samp{/::} won't work,
|
|
1281 because @samp{/:} is the prefix for quoted file names.
|
|
1282 @end ifset
|
|
1283
|
|
1284
|
|
1285 @node Multi-hops
|
|
1286 @section Connecting to a remote host using multiple hops
|
|
1287 @cindex multi-hop
|
|
1288 @cindex proxy hosts
|
|
1289
|
|
1290 Sometimes, the methods described before are not sufficient. Sometimes,
|
|
1291 it is not possible to connect to a remote host using a simple command.
|
|
1292 For example, if you are in a secured network, you might have to log in
|
|
1293 to a `bastion host' first before you can connect to the outside world.
|
|
1294 Of course, the target host may also require a bastion host.
|
|
1295
|
|
1296 @vindex tramp-default-proxies-alist
|
|
1297 In order to specify such multiple hops, it is possible to define a proxy
|
|
1298 host to pass through, via the variable
|
|
1299 @code{tramp-default-proxies-alist}. This variable keeps a list of
|
|
1300 triples (@var{host} @var{user} @var{proxy}).
|
|
1301
|
|
1302 The first matching item specifies the proxy host to be passed for a
|
|
1303 file name located on a remote target matching @var{user}@@@var{host}.
|
|
1304 @var{host} and @var{user} are regular expressions or @code{nil}, which
|
|
1305 is interpreted as a regular expression which always matches.
|
|
1306
|
|
1307 @var{proxy} must be a Tramp filename which localname part is ignored.
|
|
1308 Method and user name on @var{proxy} are optional, which is interpreted
|
|
1309 with the default values.
|
|
1310 @ifset emacsgw
|
|
1311 The method must be an inline or gateway method (@pxref{Inline
|
|
1312 methods}, @pxref{Gateway methods}).
|
|
1313 @end ifset
|
|
1314 @ifclear emacsgw
|
|
1315 The method must be an inline method (@pxref{Inline methods}).
|
|
1316 @end ifclear
|
|
1317 If @var{proxy} is @code{nil}, no additional hop is required reaching
|
|
1318 @var{user}@@@var{host}.
|
|
1319
|
|
1320 If you, for example, must pass the host @samp{bastion.your.domain} as
|
|
1321 user @samp{bird} for any remote host which is not located in your local
|
|
1322 domain, you can set
|
|
1323
|
|
1324 @lisp
|
|
1325 (add-to-list 'tramp-default-proxies-alist
|
|
1326 '("\\." nil "@trampfn{ssh, bird, bastion.your.domain,}"))
|
|
1327 (add-to-list 'tramp-default-proxies-alist
|
|
1328 '("\\.your\\.domain\\'" nil nil))
|
|
1329 @end lisp
|
|
1330
|
|
1331 Please note the order of the code. @code{add-to-list} adds elements at the
|
|
1332 beginning of a list. Therefore, most relevant rules must be added last.
|
|
1333
|
|
1334 Proxy hosts can be cascaded. If there is another host called
|
|
1335 @samp{jump.your.domain}, which is the only one in your local domain who
|
|
1336 is allowed connecting @samp{bastion.your.domain}, you can add another
|
|
1337 rule:
|
|
1338
|
|
1339 @lisp
|
|
1340 (add-to-list 'tramp-default-proxies-alist
|
|
1341 '("\\`bastion\\.your\\.domain\\'"
|
|
1342 "\\`bird\\'"
|
|
1343 "@trampfn{ssh, , jump.your.domain,}"))
|
|
1344 @end lisp
|
|
1345
|
|
1346 @var{proxy} can contain the patterns @code{%h} or @code{%u}. These
|
|
1347 patterns are replaced by the strings matching @var{host} or
|
|
1348 @var{user}, respectively.
|
|
1349
|
|
1350 If you, for example, wants to work as @samp{root} on hosts in the
|
|
1351 domain @samp{your.domain}, but login as @samp{root} is disabled for
|
|
1352 non-local access, you might add the following rule:
|
|
1353
|
|
1354 @lisp
|
|
1355 (add-to-list 'tramp-default-proxies-alist
|
|
1356 '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh, , %h,}"))
|
|
1357 @end lisp
|
|
1358
|
|
1359 Opening @file{@trampfn{sudo, , randomhost.your.domain,}} would connect
|
|
1360 first @samp{randomhost.your.domain} via @code{ssh} under your account
|
|
1361 name, and perform @code{sudo -u root} on that host afterwards. It is
|
|
1362 important to know that the given method is applied on the host which
|
|
1363 has been reached so far. @code{sudo -u root}, applied on your local
|
|
1364 host, wouldn't be useful here.
|
|
1365
|
|
1366 This is the recommended configuration to work as @samp{root} on remote
|
|
1367 Ubuntu hosts.
|
|
1368
|
|
1369 @ifset emacsgw
|
|
1370 Finally, @code{tramp-default-proxies-alist} can be used to pass
|
|
1371 firewalls or proxy servers. Imagine your local network has a host
|
|
1372 @samp{proxy.your.domain} which is used on port 3128 as HTTP proxy to
|
|
1373 the outer world. Your friendly administrator has granted you access
|
|
1374 under your user name to @samp{host.other.domain} on that proxy
|
|
1375 server.@footnote{HTTP tunnels are intended for secure SSL/TLS
|
|
1376 communication. Therefore, many proxy server restrict the tunnels to
|
|
1377 related target ports. You might need to run your ssh server on your
|
|
1378 target host @samp{host.other.domain} on such a port, like 443 (https).
|
|
1379 See @uref{http://savannah.gnu.org/maintenance/CvsFromBehindFirewall}
|
|
1380 for discussion of ethical issues.} You would need to add the
|
|
1381 following rule:
|
|
1382
|
|
1383 @lisp
|
|
1384 (add-to-list 'tramp-default-proxies-alist
|
|
1385 '("\\`host\\.other\\.domain\\'" nil
|
|
1386 "@trampfn{tunnel, , proxy.your.domain#3128,}"))
|
|
1387 @end lisp
|
|
1388
|
|
1389 Gateway methods can be declared as first hop only in a multiple hop
|
|
1390 chain.
|
|
1391 @end ifset
|
|
1392
|
|
1393
|
|
1394 @node Customizing Methods
|
|
1395 @section Using Non-Standard Methods
|
|
1396 @cindex customizing methods
|
|
1397 @cindex using non-standard methods
|
|
1398 @cindex create your own methods
|
|
1399
|
|
1400 There is a variable @code{tramp-methods} which you can change if the
|
|
1401 predefined methods don't seem right.
|
|
1402
|
|
1403 For the time being, I'll refer you to the Lisp documentation of that
|
|
1404 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
|
|
1405
|
|
1406
|
|
1407 @node Customizing Completion
|
|
1408 @section Selecting config files for user/host name completion
|
|
1409 @cindex customizing completion
|
|
1410 @cindex selecting config files
|
|
1411 @vindex tramp-completion-function-alist
|
|
1412
|
|
1413 The variable @code{tramp-completion-function-alist} is intended to
|
|
1414 customize which files are taken into account for user and host name
|
|
1415 completion (@pxref{Filename completion}). For every method, it keeps
|
|
1416 a set of configuration files, accompanied by a Lisp function able to
|
|
1417 parse that file. Entries in @code{tramp-completion-function-alist}
|
|
1418 have the form (@var{method} @var{pair1} @var{pair2} ...).
|
|
1419
|
|
1420 Each @var{pair} is composed of (@var{function} @var{file}).
|
|
1421 @var{function} is responsible to extract user names and host names
|
|
1422 from @var{file} for completion. There are two functions which access
|
|
1423 this variable:
|
|
1424
|
|
1425 @defun tramp-get-completion-function method
|
|
1426 This function returns the list of completion functions for @var{method}.
|
|
1427
|
|
1428 Example:
|
|
1429 @example
|
|
1430 (tramp-get-completion-function "rsh")
|
|
1431
|
|
1432 @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
|
|
1433 (tramp-parse-rhosts "~/.rhosts"))
|
|
1434 @end example
|
|
1435 @end defun
|
|
1436
|
|
1437 @defun tramp-set-completion-function method function-list
|
|
1438 This function sets @var{function-list} as list of completion functions
|
|
1439 for @var{method}.
|
|
1440
|
|
1441 Example:
|
|
1442 @example
|
|
1443 (tramp-set-completion-function "ssh"
|
|
1444 '((tramp-parse-sconfig "/etc/ssh_config")
|
|
1445 (tramp-parse-sconfig "~/.ssh/config")))
|
|
1446
|
|
1447 @result{} ((tramp-parse-sconfig "/etc/ssh_config")
|
|
1448 (tramp-parse-sconfig "~/.ssh/config"))
|
|
1449 @end example
|
|
1450 @end defun
|
|
1451
|
|
1452 The following predefined functions parsing configuration files exist:
|
|
1453
|
|
1454 @table @asis
|
|
1455 @item @code{tramp-parse-rhosts}
|
|
1456 @findex tramp-parse-rhosts
|
|
1457
|
|
1458 This function parses files which are syntactical equivalent to
|
|
1459 @file{~/.rhosts}. It returns both host names and user names, if
|
|
1460 specified.
|
|
1461
|
|
1462 @item @code{tramp-parse-shosts}
|
|
1463 @findex tramp-parse-shosts
|
|
1464
|
|
1465 This function parses files which are syntactical equivalent to
|
|
1466 @file{~/.ssh/known_hosts}. Since there are no user names specified
|
|
1467 in such files, it can return host names only.
|
|
1468
|
|
1469 @item @code{tramp-parse-sconfig}
|
|
1470 @findex tramp-parse-shosts
|
|
1471
|
|
1472 This function returns the host nicknames defined by @code{Host} entries
|
|
1473 in @file{~/.ssh/config} style files.
|
|
1474
|
|
1475 @item @code{tramp-parse-shostkeys}
|
|
1476 @findex tramp-parse-shostkeys
|
|
1477
|
|
1478 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
|
|
1479 @file{~/ssh2/hostkeys/*}. Hosts are coded in file names
|
|
1480 @file{hostkey_@var{portnumber}_@var{host-name}.pub}. User names
|
|
1481 are always @code{nil}.
|
|
1482
|
|
1483 @item @code{tramp-parse-sknownhosts}
|
|
1484 @findex tramp-parse-shostkeys
|
|
1485
|
|
1486 Another SSH2 style parsing of directories like
|
|
1487 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}. This
|
|
1488 case, hosts names are coded in file names
|
|
1489 @file{@var{host-name}.@var{algorithm}.pub}. User names are always @code{nil}.
|
|
1490
|
|
1491 @item @code{tramp-parse-hosts}
|
|
1492 @findex tramp-parse-hosts
|
|
1493
|
|
1494 A function dedicated to @file{/etc/hosts} style files. It returns
|
|
1495 host names only.
|
|
1496
|
|
1497 @item @code{tramp-parse-passwd}
|
|
1498 @findex tramp-parse-passwd
|
|
1499
|
|
1500 A function which parses @file{/etc/passwd} like files. Obviously, it
|
|
1501 can return user names only.
|
|
1502
|
|
1503 @item @code{tramp-parse-netrc}
|
|
1504 @findex tramp-parse-netrc
|
|
1505
|
|
1506 Finally, a function which parses @file{~/.netrc} like files.
|
|
1507 @end table
|
|
1508
|
|
1509 If you want to keep your own data in a file, with your own structure,
|
|
1510 you might provide such a function as well. This function must meet
|
|
1511 the following conventions:
|
|
1512
|
|
1513 @defun my-tramp-parse file
|
|
1514 @var{file} must be either a file name on your host, or @code{nil}.
|
|
1515 The function must return a list of (@var{user} @var{host}), which are
|
|
1516 taken as candidates for user and host name completion.
|
|
1517
|
|
1518 Example:
|
|
1519 @example
|
|
1520 (my-tramp-parse "~/.my-tramp-hosts")
|
|
1521
|
|
1522 @result{} ((nil "toto") ("daniel" "melancholia"))
|
|
1523 @end example
|
|
1524 @end defun
|
|
1525
|
|
1526
|
|
1527 @node Password caching
|
|
1528 @section Reusing passwords for several connections.
|
|
1529 @cindex passwords
|
|
1530
|
|
1531 Sometimes it is necessary to connect to the same remote host several
|
|
1532 times. Reentering passwords again and again would be annoying, when
|
|
1533 the chosen method does not support access without password prompt
|
|
1534 through own configuration.
|
|
1535
|
|
1536 By default, @value{tramp} caches the passwords entered by you. They will
|
|
1537 be reused next time if a connection needs them for the same user name
|
|
1538 and host name, independently of the connection method.
|
|
1539
|
|
1540 @vindex password-cache-expiry
|
|
1541 Passwords are not saved permanently, that means the password caching
|
|
1542 is limited to the lifetime of your @value{emacsname} session. You
|
|
1543 can influence the lifetime of password caching by customizing the
|
|
1544 variable @code{password-cache-expiry}. The value is the number of
|
|
1545 seconds how long passwords are cached. Setting it to @code{nil}
|
|
1546 disables the expiration.
|
|
1547
|
|
1548 @findex tramp-clear-passwd
|
|
1549 A password is removed from the cache if a connection isn't established
|
|
1550 successfully. You can remove a password from the cache also by
|
|
1551 executing @kbd{M-x tramp-clear-passwd} in a buffer containing a
|
|
1552 related remote file or directory.
|
|
1553
|
|
1554 @vindex password-cache
|
|
1555 If you don't like this feature for security reasons, password caching
|
|
1556 can be disabled totally by customizing the variable
|
|
1557 @code{password-cache} (setting it to @code{nil}).
|
|
1558
|
|
1559 Implementation Note: password caching is based on the package
|
|
1560 @file{password.el} in No Gnus. For the time being, it is activated
|
|
1561 only when this package is seen in the @code{load-path} while loading
|
|
1562 @value{tramp}.
|
|
1563 @ifset installchapter
|
|
1564 If you don't use No Gnus, you can take @file{password.el} from the
|
|
1565 @value{tramp} @file{contrib} directory, see @ref{Installation
|
|
1566 parameters}.
|
|
1567 @end ifset
|
|
1568 It will be activated mandatory once No Gnus has found its way into
|
|
1569 @value{emacsname}.
|
|
1570
|
|
1571
|
|
1572 @node Connection caching
|
|
1573 @section Reusing connection related information.
|
|
1574 @cindex caching
|
|
1575
|
|
1576 @vindex tramp-persistency-file-name
|
|
1577 In order to reduce initial connection time, @value{tramp} stores
|
|
1578 connection related information persistently. The variable
|
|
1579 @code{tramp-persistency-file-name} keeps the file name where these
|
|
1580 information are written. Its default value is
|
|
1581 @ifset emacs
|
|
1582 @file{~/.emacs.d/tramp}.
|
|
1583 @end ifset
|
|
1584 @ifset xemacs
|
|
1585 @file{~/.xemacs/tramp}.
|
|
1586 @end ifset
|
|
1587 It is recommended to choose a local file name.
|
|
1588
|
|
1589 @value{tramp} reads this file during startup, and writes it when
|
|
1590 exiting @value{emacsname}. You can simply remove this file if
|
|
1591 @value{tramp} shall be urged to recompute these information next
|
|
1592 @value{emacsname} startup time.
|
|
1593
|
|
1594 Using such persistent information can be disabled by setting
|
|
1595 @code{tramp-persistency-file-name} to @code{nil}.
|
|
1596
|
|
1597
|
|
1598 @node Remote Programs
|
|
1599 @section How @value{tramp} finds and uses programs on the remote machine.
|
|
1600
|
|
1601 @value{tramp} depends on a number of programs on the remote host in order to
|
|
1602 function, including @command{ls}, @command{test}, @command{find} and
|
|
1603 @command{cat}.
|
|
1604
|
|
1605 In addition to these required tools, there are various tools that may be
|
|
1606 required based on the connection method. See @ref{Inline methods} and
|
|
1607 @ref{External transfer methods} for details on these.
|
|
1608
|
|
1609 Certain other tools, such as @command{perl} (or @command{perl5}) and
|
|
1610 @command{grep} will be used if they can be found. When they are
|
|
1611 available, they are used to improve the performance and accuracy of
|
|
1612 remote file access.
|
|
1613
|
|
1614 @vindex tramp-remote-path
|
|
1615 When @value{tramp} connects to the remote machine, it searches for the
|
|
1616 programs that it can use. The variable @code{tramp-remote-path}
|
|
1617 controls the directories searched on the remote machine.
|
|
1618
|
|
1619 By default, this is set to a reasonable set of defaults for most
|
|
1620 machines. The symbol @code{tramp-default-remote-path} is a place
|
|
1621 holder, it is replaced by the list of directories received via the
|
|
1622 command @command{getconf PATH} on your remote machine. For example,
|
|
1623 on GNU Debian this is @file{/bin:/usr/bin}, whereas on Solaris this is
|
|
1624 @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}. It is
|
|
1625 recommended to apply this symbol on top of @code{tramp-remote-path}.
|
|
1626
|
|
1627 It is possible, however, that your local (or remote ;) system
|
|
1628 administrator has put the tools you want in some obscure local
|
|
1629 directory.
|
|
1630
|
|
1631 In this case, you can still use them with @value{tramp}. You simply
|
|
1632 need to add code to your @file{.emacs} to add the directory to the
|
|
1633 remote path. This will then be searched by @value{tramp} when you
|
|
1634 connect and the software found.
|
|
1635
|
|
1636 To add a directory to the remote search path, you could use code such
|
|
1637 as:
|
|
1638
|
|
1639 @lisp
|
|
1640 @i{;; We load @value{tramp} to define the variable.}
|
|
1641 (require 'tramp)
|
|
1642 @i{;; We have @command{perl} in "/usr/local/perl/bin"}
|
|
1643 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
|
|
1644 @end lisp
|
|
1645
|
|
1646 @value{tramp} caches several information, like the Perl binary
|
|
1647 location. The changed remote search path wouldn't affect these
|
|
1648 settings. In order to force @value{tramp} to recompute these values,
|
|
1649 you must exit @value{emacsname}, remove your persistency file
|
|
1650 (@pxref{Connection caching}), and restart @value{emacsname}.
|
|
1651
|
|
1652
|
|
1653 @node Remote shell setup
|
|
1654 @comment node-name, next, previous, up
|
|
1655 @section Remote shell setup hints
|
|
1656 @cindex remote shell setup
|
|
1657 @cindex @file{.profile} file
|
|
1658 @cindex @file{.login} file
|
|
1659 @cindex shell init files
|
|
1660
|
|
1661 As explained in the @ref{Overview} section, @value{tramp} connects to the
|
|
1662 remote host and talks to the shell it finds there. Of course, when you
|
|
1663 log in, the shell executes its init files. Suppose your init file
|
|
1664 requires you to enter the birth date of your mother; clearly @value{tramp}
|
|
1665 does not know this and hence fails to log you in to that host.
|
|
1666
|
|
1667 There are different possible strategies for pursuing this problem. One
|
|
1668 strategy is to enable @value{tramp} to deal with all possible situations.
|
|
1669 This is a losing battle, since it is not possible to deal with
|
|
1670 @emph{all} situations. The other strategy is to require you to set up
|
|
1671 the remote host such that it behaves like @value{tramp} expects. This might
|
|
1672 be inconvenient because you have to invest a lot of effort into shell
|
|
1673 setup before you can begin to use @value{tramp}.
|
|
1674
|
|
1675 The package, therefore, pursues a combined approach. It tries to
|
|
1676 figure out some of the more common setups, and only requires you to
|
|
1677 avoid really exotic stuff. For example, it looks through a list of
|
|
1678 directories to find some programs on the remote host. And also, it
|
|
1679 knows that it is not obvious how to check whether a file exists, and
|
|
1680 therefore it tries different possibilities. (On some hosts and
|
|
1681 shells, the command @command{test -e} does the trick, on some hosts
|
|
1682 the shell builtin doesn't work but the program @command{/usr/bin/test
|
|
1683 -e} or @command{/bin/test -e} works. And on still other hosts,
|
|
1684 @command{ls -d} is the right way to do this.)
|
|
1685
|
|
1686 Below you find a discussion of a few things that @value{tramp} does not deal
|
|
1687 with, and that you therefore have to set up correctly.
|
|
1688
|
|
1689 @table @asis
|
|
1690 @item @var{shell-prompt-pattern}
|
|
1691 @vindex shell-prompt-pattern
|
|
1692
|
|
1693 After logging in to the remote host, @value{tramp} has to wait for the remote
|
|
1694 shell startup to finish before it can send commands to the remote
|
|
1695 shell. The strategy here is to wait for the shell prompt. In order to
|
|
1696 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
|
|
1697 to be set correctly to recognize the shell prompt on the remote host.
|
|
1698
|
|
1699 Note that @value{tramp} requires the match for @code{shell-prompt-pattern}
|
|
1700 to be at the end of the buffer. Many people have something like the
|
|
1701 following as the value for the variable: @code{"^[^>$][>$] *"}. Now
|
|
1702 suppose your shell prompt is @code{a <b> c $ }. In this case,
|
|
1703 @value{tramp} recognizes the @code{>} character as the end of the prompt,
|
|
1704 but it is not at the end of the buffer.
|
|
1705
|
|
1706 @item @var{tramp-shell-prompt-pattern}
|
|
1707 @vindex tramp-shell-prompt-pattern
|
|
1708
|
|
1709 This regular expression is used by @value{tramp} in the same way as
|
|
1710 @code{shell-prompt-pattern}, to match prompts from the remote shell.
|
|
1711 This second variable exists because the prompt from the remote shell
|
|
1712 might be different from the prompt from a local shell --- after all,
|
|
1713 the whole point of @value{tramp} is to log in to remote hosts as a
|
|
1714 different user. The default value of
|
|
1715 @code{tramp-shell-prompt-pattern} is the same as the default value of
|
|
1716 @code{shell-prompt-pattern}, which is reported to work well in many
|
|
1717 circumstances.
|
|
1718
|
|
1719 @item @command{tset} and other questions
|
|
1720 @cindex Unix command tset
|
|
1721 @cindex tset Unix command
|
|
1722
|
|
1723 Some people invoke the @command{tset} program from their shell startup
|
|
1724 scripts which asks the user about the terminal type of the shell.
|
|
1725 Maybe some shells ask other questions when they are started.
|
|
1726 @value{tramp} does not know how to answer these questions. There are
|
|
1727 two approaches for dealing with this problem. One approach is to take
|
|
1728 care that the shell does not ask any questions when invoked from
|
|
1729 @value{tramp}. You can do this by checking the @code{TERM}
|
|
1730 environment variable, it will be set to @code{dumb} when connecting.
|
|
1731
|
|
1732 @vindex tramp-terminal-type
|
|
1733 The variable @code{tramp-terminal-type} can be used to change this value
|
|
1734 to @code{dumb}.
|
|
1735
|
|
1736 @vindex tramp-actions-before-shell
|
|
1737 The other approach is to teach @value{tramp} about these questions. See
|
|
1738 the variable @code{tramp-actions-before-shell}. Example:
|
|
1739
|
|
1740 @lisp
|
|
1741 (defconst my-tramp-prompt-regexp
|
|
1742 (concat (regexp-opt '("Enter the birth date of your mother:") t)
|
|
1743 "\\s-*")
|
|
1744 "Regular expression matching my login prompt question.")
|
|
1745
|
|
1746 (defun my-tramp-action (proc vec)
|
|
1747 "Enter \"19000101\" in order to give a correct answer."
|
|
1748 (save-window-excursion
|
|
1749 (with-current-buffer (tramp-get-connection-buffer vec)
|
|
1750 (tramp-message vec 6 "\n%s" (buffer-string))
|
|
1751 (tramp-send-string vec "19000101"))))
|
|
1752
|
|
1753 (add-to-list 'tramp-actions-before-shell
|
|
1754 '(my-tramp-prompt-regexp my-tramp-action))
|
|
1755 @end lisp
|
|
1756
|
|
1757
|
|
1758 @item Environment variables named like users in @file{.profile}
|
|
1759
|
|
1760 If you have a user named frumple and set the variable @code{FRUMPLE} in
|
|
1761 your shell environment, then this might cause trouble. Maybe rename
|
|
1762 the variable to @code{FRUMPLE_DIR} or the like.
|
|
1763
|
|
1764 This weird effect was actually reported by a @value{tramp} user!
|
|
1765
|
|
1766
|
|
1767 @item Non-Bourne commands in @file{.profile}
|
|
1768
|
|
1769 After logging in to the remote host, @value{tramp} issues the command
|
|
1770 @command{exec /bin/sh}. (Actually, the command is slightly
|
|
1771 different.) When @command{/bin/sh} is executed, it reads some init
|
|
1772 files, such as @file{~/.shrc} or @file{~/.profile}.
|
|
1773
|
|
1774 Now, some people have a login shell which is not @code{/bin/sh} but a
|
|
1775 Bourne-ish shell such as bash or ksh. Some of these people might put
|
|
1776 their shell setup into the files @file{~/.shrc} or @file{~/.profile}.
|
|
1777 This way, it is possible for non-Bourne constructs to end up in those
|
|
1778 files. Then, @command{exec /bin/sh} might cause the Bourne shell to
|
|
1779 barf on those constructs.
|
|
1780
|
|
1781 As an example, imagine somebody putting @command{export FOO=bar} into
|
|
1782 the file @file{~/.profile}. The standard Bourne shell does not
|
|
1783 understand this syntax and will emit a syntax error when it reaches
|
|
1784 this line.
|
|
1785
|
|
1786 Another example is the tilde (@code{~}) character, say when adding
|
|
1787 @file{~/bin} to @code{$PATH}. Many Bourne shells will not expand this
|
|
1788 character, and since there is usually no directory whose name consists
|
|
1789 of the single character tilde, strange things will happen.
|
|
1790
|
|
1791 What can you do about this?
|
|
1792
|
|
1793 Well, one possibility is to make sure that everything in
|
|
1794 @file{~/.shrc} and @file{~/.profile} on all remote hosts is
|
|
1795 Bourne-compatible. In the above example, instead of @command{export
|
|
1796 FOO=bar}, you might use @command{FOO=bar; export FOO} instead.
|
|
1797
|
|
1798 The other possibility is to put your non-Bourne shell setup into some
|
|
1799 other files. For example, bash reads the file @file{~/.bash_profile}
|
|
1800 instead of @file{~/.profile}, if the former exists. So bash
|
|
1801 aficionados just rename their @file{~/.profile} to
|
|
1802 @file{~/.bash_profile} on all remote hosts, and Bob's your uncle.
|
|
1803
|
|
1804 The @value{tramp} developers would like to circumvent this problem, so
|
|
1805 if you have an idea about it, please tell us. However, we are afraid
|
|
1806 it is not that simple: before saying @command{exec /bin/sh},
|
|
1807 @value{tramp} does not know which kind of shell it might be talking
|
|
1808 to. It could be a Bourne-ish shell like ksh or bash, or it could be a
|
|
1809 csh derivative like tcsh, or it could be zsh, or even rc. If the
|
|
1810 shell is Bourne-ish already, then it might be prudent to omit the
|
|
1811 @command{exec /bin/sh} step. But how to find out if the shell is
|
|
1812 Bourne-ish?
|
|
1813
|
|
1814 @end table
|
|
1815
|
|
1816
|
|
1817 @node Auto-save and Backup
|
|
1818 @section Auto-save and Backup configuration
|
|
1819 @cindex auto-save
|
|
1820 @cindex backup
|
|
1821 @ifset emacs
|
|
1822 @vindex backup-directory-alist
|
|
1823 @end ifset
|
|
1824 @ifset xemacs
|
|
1825 @vindex bkup-backup-directory-info
|
|
1826 @end ifset
|
|
1827
|
|
1828 Normally, @value{emacsname} writes backup files to the same directory
|
|
1829 as the original files, but this behavior can be changed via the
|
|
1830 variable
|
|
1831 @ifset emacs
|
|
1832 @code{backup-directory-alist}.
|
|
1833 @end ifset
|
|
1834 @ifset xemacs
|
|
1835 @code{bkup-backup-directory-info}.
|
|
1836 @end ifset
|
|
1837 In connection with @value{tramp}, this can have unexpected side
|
|
1838 effects. Suppose that you specify that all backups should go to the
|
|
1839 directory @file{~/.emacs.d/backups/}, and then you edit the file
|
|
1840 @file{@trampfn{su, root, localhost, /etc/secretfile}}. The effect is
|
|
1841 that the backup file will be owned by you and not by root, thus
|
|
1842 possibly enabling others to see it even if they were not intended to
|
|
1843 see it.
|
|
1844
|
|
1845 When
|
|
1846 @ifset emacs
|
|
1847 @code{backup-directory-alist}
|
|
1848 @end ifset
|
|
1849 @ifset xemacs
|
|
1850 @code{bkup-backup-directory-info}
|
|
1851 @end ifset
|
|
1852 is @code{nil} (the default), such problems do not occur.
|
|
1853
|
|
1854 Therefore, it is useful to set special values for @value{tramp}
|
|
1855 files. For example, the following statement effectively `turns off'
|
|
1856 the effect of
|
|
1857 @ifset emacs
|
|
1858 @code{backup-directory-alist}
|
|
1859 @end ifset
|
|
1860 @ifset xemacs
|
|
1861 @code{bkup-backup-directory-info}
|
|
1862 @end ifset
|
|
1863 for @value{tramp} files:
|
|
1864
|
|
1865 @ifset emacs
|
|
1866 @lisp
|
|
1867 (add-to-list 'backup-directory-alist
|
|
1868 (cons tramp-file-name-regexp nil))
|
|
1869 @end lisp
|
|
1870 @end ifset
|
|
1871 @ifset xemacs
|
|
1872 @lisp
|
|
1873 (require 'backup-dir)
|
|
1874 (add-to-list 'bkup-backup-directory-info
|
|
1875 (list tramp-file-name-regexp ""))
|
|
1876 @end lisp
|
|
1877 @end ifset
|
|
1878
|
|
1879 Another possibility is to use the @value{tramp} variable
|
|
1880 @ifset emacs
|
|
1881 @code{tramp-backup-directory-alist}.
|
|
1882 @end ifset
|
|
1883 @ifset xemacs
|
|
1884 @code{tramp-bkup-backup-directory-info}.
|
|
1885 @end ifset
|
|
1886 This variable has the same meaning like
|
|
1887 @ifset emacs
|
|
1888 @code{backup-directory-alist}.
|
|
1889 @end ifset
|
|
1890 @ifset xemacs
|
|
1891 @code{bkup-backup-directory-info}.
|
|
1892 @end ifset
|
|
1893 If a @value{tramp} file is backed up, and DIRECTORY is an absolute
|
|
1894 local file name, DIRECTORY is prepended with the @value{tramp} file
|
|
1895 name prefix of the file to be backed up.
|
|
1896
|
|
1897 @noindent
|
|
1898 Example:
|
|
1899
|
|
1900 @ifset emacs
|
|
1901 @lisp
|
|
1902 (add-to-list 'backup-directory-alist
|
|
1903 (cons "." "~/.emacs.d/backups/"))
|
|
1904 (setq tramp-backup-directory-alist backup-directory-alist)
|
|
1905 @end lisp
|
|
1906 @end ifset
|
|
1907 @ifset xemacs
|
|
1908 @lisp
|
|
1909 (require 'backup-dir)
|
|
1910 (add-to-list 'bkup-backup-directory-info
|
|
1911 (list "." "~/.emacs.d/backups/" 'full-path))
|
|
1912 (setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
|
|
1913 @end lisp
|
|
1914 @end ifset
|
|
1915
|
|
1916 @noindent
|
|
1917 The backup file name of @file{@trampfn{su, root, localhost,
|
|
1918 /etc/secretfile}} would be
|
|
1919 @ifset emacs
|
|
1920 @file{@trampfn{su, root, localhost,
|
|
1921 ~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
|
|
1922 @end ifset
|
|
1923 @ifset xemacs
|
|
1924 @file{@trampfn{su, root, localhost,
|
|
1925 ~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
|
|
1926 @end ifset
|
|
1927
|
|
1928 The same problem can happen with auto-saving files.
|
|
1929 @ifset emacs
|
|
1930 Since @value{emacsname} 21, the variable
|
|
1931 @code{auto-save-file-name-transforms} keeps information, on which
|
|
1932 directory an auto-saved file should go. By default, it is initialized
|
|
1933 for @value{tramp} files to the local temporary directory.
|
|
1934
|
|
1935 On some versions of @value{emacsname}, namely the version built for
|
|
1936 Debian GNU/Linux, the variable @code{auto-save-file-name-transforms}
|
|
1937 contains the directory where @value{emacsname} was built. A
|
|
1938 workaround is to manually set the variable to a sane value.
|
|
1939
|
|
1940 If auto-saved files should go into the same directory as the original
|
|
1941 files, @code{auto-save-file-name-transforms} should be set to @code{nil}.
|
|
1942
|
|
1943 Another possibility is to set the variable
|
|
1944 @code{tramp-auto-save-directory} to a proper value.
|
|
1945 @end ifset
|
|
1946 @ifset xemacs
|
|
1947 For this purpose you can set the variable @code{auto-save-directory}
|
|
1948 to a proper value.
|
|
1949 @end ifset
|
|
1950
|
|
1951
|
|
1952 @node Windows setup hints
|
|
1953 @section Issues with Cygwin ssh
|
|
1954 @cindex Cygwin, issues
|
|
1955
|
|
1956 This section needs a lot of work! Please help.
|
|
1957
|
|
1958 @cindex method sshx with Cygwin
|
|
1959 @cindex sshx method with Cygwin
|
|
1960 The recent Cygwin installation of @command{ssh} works only with a
|
|
1961 Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x
|
|
1962 eshell}, and starting @kbd{ssh test.machine}. The problem is evident
|
|
1963 if you see a message like this:
|
|
1964
|
|
1965 @example
|
|
1966 Pseudo-terminal will not be allocated because stdin is not a terminal.
|
|
1967 @end example
|
|
1968
|
|
1969 Older @command{ssh} versions of Cygwin are told to cooperate with
|
|
1970 @value{tramp} selecting @option{sshx} as the connection method. You
|
|
1971 can find information about setting up Cygwin in their FAQ at
|
|
1972 @uref{http://cygwin.com/faq/}.
|
|
1973
|
|
1974 @cindex method scpx with Cygwin
|
|
1975 @cindex scpx method with Cygwin
|
|
1976 If you wish to use the @option{scpx} connection method, then you might
|
|
1977 have the problem that @value{emacsname} calls @command{scp} with a
|
|
1978 Windows filename such as @code{c:/foo}. The Cygwin version of
|
|
1979 @command{scp} does not know about Windows filenames and interprets
|
|
1980 this as a remote filename on the host @code{c}.
|
|
1981
|
|
1982 One possible workaround is to write a wrapper script for @option{scp}
|
|
1983 which converts the Windows filename to a Cygwinized filename.
|
|
1984
|
|
1985 @cindex Cygwin and ssh-agent
|
|
1986 @cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
|
|
1987 If you want to use either @option{ssh} based method on Windows, then
|
|
1988 you might encounter problems with @command{ssh-agent}. Using this
|
|
1989 program, you can avoid typing the pass-phrase every time you log in.
|
|
1990 However, if you start @value{emacsname} from a desktop shortcut, then
|
|
1991 the environment variable @code{SSH_AUTH_SOCK} is not set and so
|
|
1992 @value{emacsname} and thus @value{tramp} and thus @command{ssh} and
|
|
1993 @command{scp} started from @value{tramp} cannot communicate with
|
|
1994 @command{ssh-agent}. It works better to start @value{emacsname} from
|
|
1995 the shell.
|
|
1996
|
|
1997 If anyone knows how to start @command{ssh-agent} under Windows in such a
|
|
1998 way that desktop shortcuts can profit, please holler. I don't really
|
|
1999 know anything at all about Windows@dots{}
|
|
2000
|
|
2001
|
|
2002 @node Usage
|
|
2003 @chapter Using @value{tramp}
|
|
2004 @cindex using @value{tramp}
|
|
2005
|
|
2006 Once you have installed @value{tramp} it will operate fairly
|
|
2007 transparently. You will be able to access files on any remote machine
|
|
2008 that you can log in to as though they were local.
|
|
2009
|
|
2010 Files are specified to @value{tramp} using a formalized syntax specifying the
|
|
2011 details of the system to connect to. This is similar to the syntax used
|
|
2012 by the @value{ftppackagename} package.
|
|
2013
|
|
2014 @cindex type-ahead
|
|
2015 Something that might happen which surprises you is that
|
|
2016 @value{emacsname} remembers all your keystrokes, so if you see a
|
|
2017 password prompt from @value{emacsname}, say, and hit @kbd{@key{RET}}
|
|
2018 twice instead of once, then the second keystroke will be processed by
|
|
2019 @value{emacsname} after @value{tramp} has done its thing. Why, this
|
|
2020 type-ahead is normal behavior, you say. Right you are, but be aware
|
|
2021 that opening a remote file might take quite a while, maybe half a
|
|
2022 minute when a connection needs to be opened. Maybe after half a
|
|
2023 minute you have already forgotten that you hit that key!
|
|
2024
|
|
2025 @menu
|
|
2026 * Filename Syntax:: @value{tramp} filename conventions.
|
|
2027 * Alternative Syntax:: URL-like filename syntax.
|
|
2028 * Filename completion:: Filename completion.
|
|
2029 * Remote processes:: Integration with other @value{emacsname} packages.
|
|
2030 @end menu
|
|
2031
|
|
2032
|
|
2033 @node Filename Syntax
|
|
2034 @section @value{tramp} filename conventions
|
|
2035 @cindex filename syntax
|
|
2036 @cindex filename examples
|
|
2037
|
|
2038 To access the file @var{localname} on the remote machine @var{machine}
|
|
2039 you would specify the filename @file{@trampfn{, , machine,
|
|
2040 localname}}. This will connect to @var{machine} and transfer the file
|
|
2041 using the default method. @xref{Default Method}.
|
|
2042
|
|
2043 Some examples of @value{tramp} filenames are shown below.
|
|
2044
|
|
2045 @table @file
|
|
2046 @item @trampfn{, , melancholia, .emacs}
|
|
2047 Edit the file @file{.emacs} in your home directory on the machine
|
|
2048 @code{melancholia}.
|
|
2049
|
|
2050 @item @trampfn{, , melancholia.danann.net, .emacs}
|
|
2051 This edits the same file, using the fully qualified domain name of
|
|
2052 the machine.
|
|
2053
|
|
2054 @item @trampfn{, , melancholia, ~/.emacs}
|
|
2055 This also edits the same file --- the @file{~} is expanded to your
|
|
2056 home directory on the remote machine, just like it is locally.
|
|
2057
|
|
2058 @item @trampfn{, , melancholia, ~daniel/.emacs}
|
|
2059 This edits the file @file{.emacs} in the home directory of the user
|
|
2060 @code{daniel} on the machine @code{melancholia}. The @file{~<user>}
|
|
2061 construct is expanded to the home directory of that user on the remote
|
|
2062 machine.
|
|
2063
|
|
2064 @item @trampfn{, , melancholia, /etc/squid.conf}
|
|
2065 This edits the file @file{/etc/squid.conf} on the machine
|
|
2066 @code{melancholia}.
|
|
2067
|
|
2068 @end table
|
|
2069
|
|
2070 Unless you specify a different name to use, @value{tramp} will use the
|
|
2071 current local user name as the remote user name to log in with. If you
|
|
2072 need to log in as a different user, you can specify the user name as
|
|
2073 part of the filename.
|
|
2074
|
|
2075 To log in to the remote machine as a specific user, you use the syntax
|
|
2076 @file{@trampfn{, user, machine, path/to.file}}. That means that
|
|
2077 connecting to @code{melancholia} as @code{daniel} and editing
|
|
2078 @file{.emacs} in your home directory you would specify
|
|
2079 @file{@trampfn{, daniel, melancholia, .emacs}}.
|
|
2080
|
|
2081 It is also possible to specify other file transfer methods
|
|
2082 (@pxref{Default Method}) as part of the filename.
|
|
2083 @ifset emacs
|
|
2084 This is done by putting the method before the user and host name, as
|
|
2085 in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the
|
|
2086 trailing colon).
|
|
2087 @end ifset
|
|
2088 @ifset xemacs
|
|
2089 This is done by replacing the initial @file{@value{prefix}} with
|
|
2090 @file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing
|
|
2091 slash!).
|
|
2092 @end ifset
|
|
2093 The user, machine and file specification remain the same.
|
|
2094
|
|
2095 So, to connect to the machine @code{melancholia} as @code{daniel},
|
|
2096 using the @option{ssh} method to transfer files, and edit
|
|
2097 @file{.emacs} in my home directory I would specify the filename
|
|
2098 @file{@trampfn{ssh, daniel, melancholia, .emacs}}.
|
|
2099
|
|
2100
|
|
2101 @node Alternative Syntax
|
|
2102 @section URL-like filename syntax
|
|
2103 @cindex filename syntax
|
|
2104 @cindex filename examples
|
|
2105
|
|
2106 Additionally to the syntax described in the previous chapter, it is
|
|
2107 possible to use a URL-like syntax for @value{tramp}. This can be
|
|
2108 switched on by customizing the variable @code{tramp-syntax}. Please
|
|
2109 note that this feature is experimental for the time being.
|
|
2110
|
|
2111 The variable @code{tramp-syntax} must be set before requiring @value{tramp}:
|
|
2112
|
|
2113 @lisp
|
|
2114 (setq tramp-syntax 'url)
|
|
2115 (require 'tramp)
|
|
2116 @end lisp
|
|
2117
|
|
2118 Then, a @value{tramp} filename would look like this:
|
|
2119 @file{/@var{method}://@var{user}@@@var{machine}:@var{port}/@var{path/to.file}}.
|
|
2120 @file{/@var{method}://} is mandatory, all other parts are optional.
|
|
2121 @file{:@var{port}} is useful for methods only who support this.
|
|
2122
|
|
2123 The last example from the previous section would look like this:
|
|
2124 @file{/ssh://daniel@@melancholia/.emacs}.
|
|
2125
|
|
2126 For the time being, @code{tramp-syntax} can have the following values:
|
|
2127
|
|
2128 @itemize @w{}
|
|
2129 @ifset emacs
|
|
2130 @item @code{ftp} -- That is the default syntax
|
|
2131 @item @code{url} -- URL-like syntax
|
|
2132 @end ifset
|
|
2133 @ifset xemacs
|
|
2134 @item @code{sep} -- That is the default syntax
|
|
2135 @item @code{url} -- URL-like syntax
|
|
2136 @item @code{ftp} -- EFS-like syntax
|
|
2137 @end ifset
|
|
2138 @end itemize
|
|
2139
|
|
2140
|
|
2141 @node Filename completion
|
|
2142 @section Filename completion
|
|
2143 @cindex filename completion
|
|
2144
|
|
2145 Filename completion works with @value{tramp} for completion of method
|
|
2146 names, of user names and of machine names as well as for completion of
|
|
2147 file names on remote machines.
|
|
2148 @ifset emacs
|
|
2149 In order to enable this, Partial Completion mode must be set
|
|
2150 on@footnote{If you don't use Partial Completion mode, but want to
|
|
2151 keep full completion, load @value{tramp} like this in your
|
|
2152 @file{.emacs}:
|
|
2153
|
|
2154 @lisp
|
|
2155 ;; Preserve Tramp's completion features.
|
|
2156 (let ((partial-completion-mode t))
|
|
2157 (require 'tramp))
|
|
2158 @end lisp
|
|
2159 }.
|
|
2160 @ifinfo
|
|
2161 @xref{Completion Options, , , @value{emacsdir}}.
|
|
2162 @end ifinfo
|
|
2163 @end ifset
|
|
2164
|
|
2165 If you, for example, type @kbd{C-x C-f @value{prefix}t
|
|
2166 @key{TAB}}, @value{tramp} might give you as result the choice for
|
|
2167
|
|
2168 @example
|
|
2169 @ifset emacs
|
|
2170 @value{prefixhop}telnet@value{postfixhop} tmp/
|
|
2171 @value{prefixhop}toto@value{postfix}
|
|
2172 @end ifset
|
|
2173 @ifset xemacs
|
|
2174 @value{prefixhop}telnet@value{postfixhop} @value{prefixhop}toto@value{postfix}
|
|
2175 @end ifset
|
|
2176 @end example
|
|
2177
|
|
2178 @samp{@value{prefixhop}telnet@value{postfixhop}}
|
|
2179 is a possible completion for the respective method,
|
|
2180 @ifset emacs
|
|
2181 @samp{tmp/} stands for the directory @file{/tmp} on your local
|
|
2182 machine,
|
|
2183 @end ifset
|
|
2184 and @samp{@value{prefixhop}toto@value{postfix}}
|
|
2185 might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
|
|
2186 file (given you're using default method @option{ssh}).
|
|
2187
|
|
2188 If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
|
|
2189 @samp{@value{prefix}telnet@value{postfixhop}}.
|
|
2190 Next @kbd{@key{TAB}} brings you all machine names @value{tramp} detects in
|
|
2191 your @file{/etc/hosts} file, let's say
|
|
2192
|
|
2193 @example
|
|
2194 @trampfn{telnet, , 127.0.0.1,} @trampfn{telnet, , 192.168.0.1,}
|
|
2195 @trampfn{telnet, , localhost,} @trampfn{telnet, , melancholia.danann.net,}
|
|
2196 @trampfn{telnet, , melancholia,}
|
|
2197 @end example
|
|
2198
|
|
2199 Now you can choose the desired machine, and you can continue to
|
|
2200 complete file names on that machine.
|
|
2201
|
|
2202 If the configuration files (@pxref{Customizing Completion}), which
|
|
2203 @value{tramp} uses for analysis of completion, offer user names, those user
|
|
2204 names will be taken into account as well.
|
|
2205
|
|
2206 Remote machines, which have been visited in the past and kept
|
|
2207 persistently (@pxref{Connection caching}), will be offered too.
|
|
2208
|
|
2209 Once the remote machine identification is completed, it comes to
|
|
2210 filename completion on the remote host. This works pretty much like
|
|
2211 for files on the local host, with the exception that minibuffer
|
|
2212 killing via a double-slash works only on the filename part, except
|
|
2213 that filename part starts with @file{//}.
|
|
2214 @ifinfo
|
|
2215 @xref{Minibuffer File, , , @value{emacsdir}}.
|
|
2216 @end ifinfo
|
|
2217
|
|
2218 @ifset emacs
|
|
2219 As example, @kbd{@trampfn{telnet, , melancholia, /usr/local/bin//etc}
|
|
2220 @key{TAB}} would result in
|
|
2221 @file{@trampfn{telnet, , melancholia, /etc}}, whereas
|
|
2222 @kbd{@trampfn{telnet, , melancholia, //etc} @key{TAB}} reduces the
|
|
2223 minibuffer contents to @file{/etc}. A triple-slash stands for the
|
|
2224 default behaviour,
|
|
2225 i.e. @kbd{@trampfn{telnet, , melancholia, /usr/local/bin///etc}
|
|
2226 @key{TAB}} expands directly to @file{/etc}.
|
|
2227 @end ifset
|
|
2228
|
|
2229 @ifset xemacs
|
|
2230 As example, @kbd{@trampfn{telnet, , melancholia, /usr/local/bin//}}
|
|
2231 would result in @file{@trampfn{telnet, , melancholia, /}}, whereas
|
|
2232 @kbd{@trampfn{telnet, , melancholia, //}} expands the minibuffer
|
|
2233 contents to @file{/}.
|
|
2234 @end ifset
|
|
2235
|
|
2236
|
|
2237 @node Remote processes
|
|
2238 @section Integration with other @value{emacsname} packages.
|
|
2239 @cindex compile
|
|
2240 @cindex recompile
|
|
2241
|
|
2242 @value{tramp} supports running processes on a remote host. This
|
|
2243 allows to exploit @value{emacsname} packages without modification for
|
|
2244 remote file names. It does not work for the @option{ftp} and
|
|
2245 @option{smb} methods.
|
|
2246
|
|
2247 Remote processes are started when a corresponding command is executed
|
|
2248 from a buffer belonging to a remote file or directory. Up to now, the
|
|
2249 packages @file{compile.el} (commands like @code{compile} and
|
|
2250 @code{grep}) and @file{gud.el} (@code{gdb} or @code{perldb}) have been
|
|
2251 integrated. Integration of further packages is planned, any help for
|
|
2252 this is welcome!
|
|
2253
|
|
2254 When your program is not found in the default search path
|
|
2255 @value{tramp} sets on the remote machine, you should either use an
|
|
2256 absolute path, or extend @code{tramp-remote-path} (see @ref{Remote
|
|
2257 Programs}):
|
|
2258
|
|
2259 @lisp
|
|
2260 (add-to-list 'tramp-remote-path "~/bin")
|
|
2261 (add-to-list 'tramp-remote-path "/appli/pub/bin")
|
|
2262 @end lisp
|
|
2263
|
|
2264 The environment for your program can be adapted by customizing
|
|
2265 @code{tramp-remote-process-environment}. This variable is a list of
|
|
2266 strings. It is structured like @code{process-environment}. Each
|
|
2267 element is a string of the form ENVVARNAME=VALUE. An entry
|
|
2268 ENVVARNAME= disables the corresponding environment variable, which
|
|
2269 might have been set in your init file like @file{~/.profile}.
|
|
2270
|
|
2271 @noindent
|
|
2272 Adding an entry can be performed via @code{add-to-list}:
|
|
2273
|
|
2274 @lisp
|
|
2275 (add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
|
|
2276 @end lisp
|
|
2277
|
|
2278 Changing or removing an existing entry is not encouraged. The default
|
|
2279 values are chosen for proper @value{tramp} work. Nevertheless, if for
|
|
2280 example a paranoid system administrator disallows changing the
|
|
2281 @var{$HISTORY} environment variable, you can customize
|
|
2282 @code{tramp-remote-process-environment}, or you can apply the
|
|
2283 following code in your @file{.emacs}:
|
|
2284
|
|
2285 @lisp
|
|
2286 (let ((process-environment tramp-remote-process-environment))
|
|
2287 (setenv "HISTORY" nil)
|
|
2288 (setq tramp-remote-process-environment process-environment))
|
|
2289 @end lisp
|
|
2290
|
|
2291 If you use other @value{emacsname} packages which do not run
|
|
2292 out-of-the-box on a remote host, please let us know. We will try to
|
|
2293 integrate them as well. @xref{Bug Reports}.
|
|
2294
|
|
2295
|
|
2296 @subsection Running eshell on a remote host
|
|
2297 @cindex eshell
|
|
2298
|
|
2299 @value{tramp} is integrated into @file{eshell.el}. That is, you can
|
|
2300 open an interactive shell on your remote host, and run commands there.
|
|
2301 After you have started @code{eshell}, you could perform commands like
|
|
2302 this:
|
|
2303
|
|
2304 @example
|
|
2305 @b{~ $} cd @trampfn{sudo, , , /etc} @key{RET}
|
|
2306 @b{@trampfn{sudo, root, host, /etc} $} hostname @key{RET}
|
|
2307 host
|
|
2308 @b{@trampfn{sudo, root, host, /etc} $} id @key{RET}
|
|
2309 uid=0(root) gid=0(root) groups=0(root)
|
|
2310 @b{@trampfn{sudo, root, host, /etc} $} find-file shadow @key{RET}
|
|
2311 #<buffer shadow>
|
|
2312 @b{@trampfn{sudo, root, host, /etc} $}
|
|
2313 @end example
|
|
2314
|
|
2315
|
|
2316 @anchor{Running a debugger on a remote host}
|
|
2317 @subsection Running a debugger on a remote host
|
|
2318 @cindex gud
|
|
2319 @cindex gdb
|
|
2320 @cindex perldb
|
|
2321
|
|
2322 @file{gud.el} offers an unified interface to several symbolic
|
|
2323 debuggers
|
|
2324 @ifset emacs
|
|
2325 @ifinfo
|
|
2326 (@ref{Debuggers, , , @value{emacsdir}}).
|
|
2327 @end ifinfo
|
|
2328 @end ifset
|
|
2329 With @value{tramp}, it is possible to debug programs on
|
|
2330 remote hosts. You can call @code{gdb} with a remote file name:
|
|
2331
|
|
2332 @example
|
|
2333 @kbd{M-x gdb @key{RET}}
|
|
2334 @b{Run gdb (like this):} gdb --annotate=3 @trampfn{ssh, , host, ~/myprog} @key{RET}
|
|
2335 @end example
|
|
2336
|
|
2337 The file name can also be relative to a remote default directory.
|
|
2338 Given you are in a buffer that belongs to the remote directory
|
|
2339 @trampfn{ssh, , host, /home/user}, you could call
|
|
2340
|
|
2341 @example
|
|
2342 @kbd{M-x perldb @key{RET}}
|
|
2343 @b{Run perldb (like this):} perl -d myprog.pl @key{RET}
|
|
2344 @end example
|
|
2345
|
|
2346 It is not possible to use just the absolute local part of a remote
|
|
2347 file name as program to debug, like @kbd{perl -d
|
|
2348 /home/user/myprog.pl}, though.
|
|
2349
|
|
2350 Arguments of the program to be debugged are taken literally. That
|
|
2351 means file names as arguments must be given as ordinary relative or
|
|
2352 absolute file names, without any remote specification.
|
|
2353
|
|
2354
|
|
2355 @node Bug Reports
|
|
2356 @chapter Reporting Bugs and Problems
|
|
2357 @cindex bug reports
|
|
2358
|
|
2359 Bugs and problems with @value{tramp} are actively worked on by the
|
|
2360 development team. Feature requests and suggestions are also more than
|
|
2361 welcome.
|
|
2362
|
|
2363 The @value{tramp} mailing list is a great place to get information on
|
|
2364 working with @value{tramp}, solving problems and general discussion
|
|
2365 and advice on topics relating to the package. It is moderated so
|
|
2366 non-subscribers can post but messages will be delayed, possibly up to
|
|
2367 48 hours (or longer in case of holidays), until the moderator approves
|
|
2368 your message.
|
|
2369
|
|
2370 The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
|
|
2371 this address go to all the subscribers. This is @emph{not} the address
|
|
2372 to send subscription requests to.
|
|
2373
|
|
2374 Subscribing to the list is performed via
|
|
2375 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/,
|
|
2376 the @value{tramp} Mail Subscription Page}.
|
|
2377
|
|
2378 To report a bug in @value{tramp}, you should execute @kbd{M-x
|
|
2379 tramp-bug}. This will automatically generate a buffer with the details
|
|
2380 of your system and @value{tramp} version.
|
|
2381
|
|
2382 When submitting a bug report, please try to describe in excruciating
|
|
2383 detail the steps required to reproduce the problem, the setup of the
|
|
2384 remote machine and any special conditions that exist. You should also
|
|
2385 check that your problem is not described already in @xref{Frequently
|
|
2386 Asked Questions}.
|
|
2387
|
|
2388 If you can identify a minimal test case that reproduces the problem,
|
|
2389 include that with your bug report. This will make it much easier for
|
|
2390 the development team to analyze and correct the problem.
|
|
2391
|
|
2392 Before reporting the bug, you should set the verbosity level to 6
|
|
2393 (@pxref{Traces and Profiles, Traces}) in the @file{~/.emacs} file and
|
|
2394 repeat the bug. Then, include the contents of the @file{*tramp/foo*}
|
|
2395 and @file{*debug tramp/foo*} buffers in your bug report. A verbosity
|
|
2396 level greater than 6 will produce a very huge debug buffer, which is
|
|
2397 mostly not necessary for the analysis.
|
|
2398
|
|
2399 Please be aware that, with a verbosity level of 6 or greater, the
|
|
2400 contents of files and directories will be included in the debug
|
|
2401 buffer. Passwords you've typed will never be included there.
|
|
2402
|
|
2403
|
|
2404 @node Frequently Asked Questions
|
|
2405 @chapter Frequently Asked Questions
|
|
2406 @cindex frequently asked questions
|
|
2407 @cindex FAQ
|
|
2408
|
|
2409 @itemize @bullet
|
|
2410 @item
|
|
2411 Where can I get the latest @value{tramp}?
|
|
2412
|
|
2413 @value{tramp} is available under the URL below.
|
|
2414
|
|
2415 @noindent
|
|
2416 @uref{ftp://ftp.gnu.org/gnu/tramp/}
|
|
2417
|
|
2418 @noindent
|
|
2419 There is also a Savannah project page.
|
|
2420
|
|
2421 @noindent
|
|
2422 @uref{http://savannah.gnu.org/projects/tramp/}
|
|
2423
|
|
2424
|
|
2425 @item
|
|
2426 Which systems does it work on?
|
|
2427
|
|
2428 The package has been used successfully on GNU Emacs 21, GNU Emacs 22
|
|
2429 and XEmacs 21 (starting with 21.4). Gateway methods are supported for
|
|
2430 GNU Emacs 22 only.
|
|
2431
|
|
2432 The package was intended to work on Unix, and it really expects a
|
|
2433 Unix-like system on the remote end (except the @option{smb} method),
|
|
2434 but some people seemed to have some success getting it to work on MS
|
|
2435 Windows NT/2000/XP @value{emacsname}.
|
|
2436
|
|
2437 There is some informations on @value{tramp} on NT at the following URL;
|
|
2438 many thanks to Joe Stoy for providing the information:
|
|
2439 @uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
|
|
2440
|
|
2441 @c The link is broken. I've contacted Tom for clarification. Michael.
|
|
2442 @ignore
|
|
2443 The above mostly contains patches to old ssh versions; Tom Roche has a
|
|
2444 Web page with instructions:
|
|
2445 @uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
|
|
2446 @end ignore
|
|
2447
|
|
2448 @item
|
|
2449 How could I speed up @value{tramp}?
|
|
2450
|
|
2451 In the backstage, @value{tramp} needs a lot of operations on the
|
|
2452 remote host. The time for transferring data from and to the remote
|
|
2453 host as well as the time needed to perform the operations there count.
|
|
2454 In order to speed up @value{tramp}, one could either try to avoid some
|
|
2455 of the operations, or one could try to improve their performance.
|
|
2456
|
|
2457 Use an external transfer method, like @option{scpc}.
|
|
2458
|
|
2459 Use caching. This is already enabled by default. Information about
|
|
2460 the remote host as well as the remote files are cached for reuse. The
|
|
2461 information about remote hosts is kept in the file specified in
|
|
2462 @code{tramp-persistency-file-name}. Keep this file.
|
|
2463
|
|
2464 Disable version control. If you access remote files which are not
|
|
2465 under version control, a lot of check operations can be avoided by
|
|
2466 disabling VC. This can be achieved by
|
|
2467
|
|
2468 @lisp
|
|
2469 (setq vc-handled-backends nil)
|
|
2470 @end lisp
|
|
2471
|
|
2472 Disable excessive traces. The default trace level of @value{tramp},
|
|
2473 defined in the variable @code{tramp-verbose}, is 3. You should
|
|
2474 increase this level only temporarily, hunting bugs.
|
|
2475
|
|
2476
|
|
2477 @item
|
|
2478 @value{tramp} does not connect to the remote host
|
|
2479
|
|
2480 When @value{tramp} does not connect to the remote host, there are two
|
|
2481 reasons heading the bug mailing list:
|
|
2482
|
|
2483 @itemize @minus
|
|
2484
|
|
2485 @item
|
|
2486 Unknown characters in the prompt
|
|
2487
|
|
2488 @value{tramp} needs to recognize the prompt on the remote machine
|
|
2489 after execution any command. This is not possible, when the prompt
|
|
2490 contains unknown characters like escape sequences for coloring. This
|
|
2491 should be avoided on the remote side. @xref{Remote shell setup}. for
|
|
2492 setting the regular expression detecting the prompt.
|
|
2493
|
|
2494 You can check your settings after an unsuccessful connection by
|
|
2495 switching to the @value{tramp} connection buffer @file{*tramp/foo*},
|
|
2496 setting the cursor at the top of the buffer, and applying the expression
|
|
2497
|
|
2498 @example
|
|
2499 @kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
|
|
2500 @end example
|
|
2501
|
|
2502 If it fails, or the cursor is not moved at the end of the buffer, your
|
|
2503 prompt is not recognised correctly.
|
|
2504
|
|
2505 A special problem is the zsh, which uses left-hand side and right-hand
|
|
2506 side prompts in parallel. Therefore, it is necessary to disable the
|
|
2507 zsh line editor on the remote host. You shall add to @file{~/.zshrc}
|
|
2508 the following command:
|
|
2509
|
|
2510 @example
|
|
2511 [ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
|
|
2512 @end example
|
|
2513
|
|
2514
|
|
2515 @item
|
|
2516 @value{tramp} doesn't transfer strings with more than 500 characters
|
|
2517 correctly
|
|
2518
|
|
2519 On some few systems, the implementation of @code{process-send-string}
|
|
2520 seems to be broken for longer strings. It is reported for HP-UX,
|
|
2521 FreeBSD and Tru64 Unix, for example. This case, you should customize
|
|
2522 the variable @code{tramp-chunksize} to 500. For a description how to
|
|
2523 determine whether this is necessary see the documentation of
|
|
2524 @code{tramp-chunksize}.
|
|
2525
|
|
2526 Additionally, it will be useful to set @code{file-precious-flag} to
|
|
2527 @code{t} for @value{tramp} files. Then the file contents will be
|
|
2528 written into a temporary file first, which is checked for correct
|
|
2529 checksum.
|
|
2530 @ifinfo
|
|
2531 @pxref{Saving Buffers, , , elisp}
|
|
2532 @end ifinfo
|
|
2533
|
|
2534 @lisp
|
|
2535 (add-hook
|
|
2536 'find-file-hooks
|
|
2537 '(lambda ()
|
|
2538 (when (file-remote-p default-directory)
|
|
2539 (set (make-local-variable 'file-precious-flag) t))))
|
|
2540 @end lisp
|
|
2541
|
|
2542 @end itemize
|
|
2543
|
|
2544
|
|
2545 @item
|
|
2546 File name completion does not work with @value{tramp}
|
|
2547
|
|
2548 When you log in to the remote machine, do you see the output of
|
|
2549 @command{ls} in color? If so, this may be the cause of your problems.
|
|
2550
|
|
2551 @command{ls} outputs @acronym{ANSI} escape sequences that your terminal
|
|
2552 emulator interprets to set the colors. These escape sequences will
|
|
2553 confuse @value{tramp} however.
|
|
2554
|
|
2555 In your @file{.bashrc}, @file{.profile} or equivalent on the remote
|
|
2556 machine you probably have an alias configured that adds the option
|
|
2557 @option{--color=yes} or @option{--color=auto}.
|
|
2558
|
|
2559 You should remove that alias and ensure that a new login @emph{does not}
|
|
2560 display the output of @command{ls} in color. If you still cannot use
|
|
2561 filename completion, report a bug to the @value{tramp} developers.
|
|
2562
|
|
2563
|
|
2564 @item
|
|
2565 File name completion does not work in large directories
|
|
2566
|
|
2567 @value{tramp} uses globbing for some operations. (Globbing means to use the
|
|
2568 shell to expand wildcards such as `*.c'.) This might create long
|
|
2569 command lines, especially in directories with many files. Some shells
|
|
2570 choke on long command lines, or don't cope well with the globbing
|
|
2571 itself.
|
|
2572
|
|
2573 If you have a large directory on the remote end, you may wish to execute
|
|
2574 a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
|
|
2575 Note that you must first start the right shell, which might be
|
|
2576 @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
|
|
2577 of those supports tilde expansion.
|
|
2578
|
|
2579
|
|
2580 @item
|
|
2581 How can I get notified when @value{tramp} file transfers are complete?
|
|
2582
|
|
2583 The following snippet can be put in your @file{~/.emacs} file. It
|
|
2584 makes @value{emacsname} beep after reading from or writing to the
|
|
2585 remote host.
|
|
2586
|
|
2587 @lisp
|
|
2588 (defadvice tramp-handle-write-region
|
|
2589 (after tramp-write-beep-advice activate)
|
|
2590 " make tramp beep after writing a file."
|
|
2591 (interactive)
|
|
2592 (beep))
|
|
2593
|
|
2594 (defadvice tramp-handle-do-copy-or-rename-file
|
|
2595 (after tramp-copy-beep-advice activate)
|
|
2596 " make tramp beep after copying a file."
|
|
2597 (interactive)
|
|
2598 (beep))
|
|
2599
|
|
2600 (defadvice tramp-handle-insert-file-contents
|
|
2601 (after tramp-copy-beep-advice activate)
|
|
2602 " make tramp beep after copying a file."
|
|
2603 (interactive)
|
|
2604 (beep))
|
|
2605 @end lisp
|
|
2606
|
|
2607
|
|
2608 @ifset emacs
|
|
2609 @item
|
|
2610 I'ld like to see a host indication in the mode line when I'm remote
|
|
2611
|
|
2612 The following code has been tested with @value{emacsname} 22.1. You
|
|
2613 should put it into your @file{~/.emacs}:
|
|
2614
|
|
2615 @lisp
|
|
2616 (defconst my-mode-line-buffer-identification
|
|
2617 (list
|
|
2618 '(:eval
|
|
2619 (let ((host-name
|
|
2620 (if (file-remote-p default-directory)
|
|
2621 (tramp-file-name-host
|
|
2622 (tramp-dissect-file-name default-directory))
|
|
2623 (system-name))))
|
|
2624 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
|
|
2625 (substring host-name 0 (match-beginning 1))
|
|
2626 host-name)))
|
|
2627 ": %12b"))
|
|
2628
|
|
2629 (setq-default
|
|
2630 mode-line-buffer-identification
|
|
2631 my-mode-line-buffer-identification)
|
|
2632
|
|
2633 (add-hook
|
|
2634 'dired-mode-hook
|
|
2635 '(lambda ()
|
|
2636 (setq
|
|
2637 mode-line-buffer-identification
|
|
2638 my-mode-line-buffer-identification)))
|
|
2639 @end lisp
|
|
2640
|
|
2641 Since @value{emacsname} 23.1, the mode line contains an indication if
|
|
2642 @code{default-directory} for the current buffer is on a remote host.
|
|
2643 The corresponding tooltip includes the name of that host. If you
|
|
2644 still want the host name as part of the mode line, you can use the
|
|
2645 example above, but the @code{:eval} clause can be simplified:
|
|
2646
|
|
2647 @lisp
|
|
2648 '(:eval
|
|
2649 (let ((host-name
|
|
2650 (or (file-remote-p default-directory 'host)
|
|
2651 (system-name))))
|
|
2652 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
|
|
2653 (substring host-name 0 (match-beginning 1))
|
|
2654 host-name)))
|
|
2655 @end lisp
|
|
2656 @end ifset
|
|
2657
|
|
2658
|
|
2659 @ifset emacs
|
|
2660 @item
|
|
2661 My remote host does not understand default directory listing options
|
|
2662
|
|
2663 @value{emacsname} computes the @command{dired} options depending on
|
|
2664 the local host you are working. If your @command{ls} command on the
|
|
2665 remote host does not understand those options, you can change them
|
|
2666 like this:
|
|
2667
|
|
2668 @lisp
|
|
2669 (add-hook
|
|
2670 'dired-before-readin-hook
|
|
2671 '(lambda ()
|
|
2672 (when (file-remote-p default-directory)
|
|
2673 (setq dired-actual-switches "-al"))))
|
|
2674 @end lisp
|
|
2675 @end ifset
|
|
2676
|
|
2677
|
|
2678 @item
|
|
2679 There's this @file{~/.sh_history} file on the remote host which keeps
|
|
2680 growing and growing. What's that?
|
|
2681
|
|
2682 Sometimes, @value{tramp} starts @command{ksh} on the remote host for
|
|
2683 tilde expansion. Maybe @command{ksh} saves the history by default.
|
|
2684 @value{tramp} tries to turn off saving the history, but maybe you have
|
|
2685 to help. For example, you could put this in your @file{.kshrc}:
|
|
2686
|
|
2687 @example
|
|
2688 if [ -f $HOME/.sh_history ] ; then
|
|
2689 /bin/rm $HOME/.sh_history
|
|
2690 fi
|
|
2691 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
|
|
2692 unset HISTFILE
|
|
2693 fi
|
|
2694 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
|
|
2695 unset HISTSIZE
|
|
2696 fi
|
|
2697 @end example
|
|
2698
|
|
2699
|
|
2700 @item There are longish file names to type. How to shorten this?
|
|
2701
|
|
2702 Let's say you need regularly access to @file{@trampfn{ssh, news,
|
|
2703 news.my.domain, /opt/news/etc}}, which is boring to type again and
|
|
2704 again. The following approaches can be mixed:
|
|
2705
|
|
2706 @enumerate
|
|
2707
|
|
2708 @item Use default values for method and user name:
|
|
2709
|
|
2710 You can define default methods and user names for hosts,
|
|
2711 (@pxref{Default Method}, @pxref{Default User}):
|
|
2712
|
|
2713 @lisp
|
|
2714 (setq tramp-default-method "ssh"
|
|
2715 tramp-default-user "news")
|
|
2716 @end lisp
|
|
2717
|
|
2718 The file name left to type would be
|
|
2719 @kbd{C-x C-f @trampfn{, , news.my.domain, /opt/news/etc}}.
|
|
2720
|
|
2721 Note, that there are some useful settings already. Accessing your
|
|
2722 local host as @samp{root} user, is possible just by @kbd{C-x C-f
|
|
2723 @trampfn{su, , ,}}.
|
|
2724
|
|
2725 @item Use configuration possibilities of your method:
|
|
2726
|
|
2727 Several connection methods (i.e. the programs used) offer powerful
|
|
2728 configuration possibilities (@pxref{Customizing Completion}). In the
|
|
2729 given case, this could be @file{~/.ssh/config}:
|
|
2730
|
|
2731 @example
|
|
2732 Host xy
|
|
2733 HostName news.my.domain
|
|
2734 User news
|
|
2735 @end example
|
|
2736
|
|
2737 The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
|
|
2738 /opt/news/etc}}. Depending on files in your directories, it is even
|
|
2739 possible to complete the hostname with @kbd{C-x C-f
|
|
2740 @value{prefix}ssh@value{postfixhop}x @key{TAB}}.
|
|
2741
|
|
2742 @item Use environment variables:
|
|
2743
|
|
2744 File names typed in the minibuffer can be expanded by environment
|
|
2745 variables. You can set them outside @value{emacsname}, or even with
|
|
2746 Lisp:
|
|
2747
|
|
2748 @lisp
|
|
2749 (setenv "xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")
|
|
2750 @end lisp
|
|
2751
|
|
2752 Then you need simply to type @kbd{C-x C-f $xy @key{RET}}, and here you
|
|
2753 are. The disadvantage is, that you cannot edit the file name, because
|
|
2754 environment variables are not expanded during editing in the
|
|
2755 minibuffer.
|
|
2756
|
|
2757 @item Define own keys:
|
|
2758
|
|
2759 You can define your own key sequences in @value{emacsname}, which can
|
|
2760 be used instead of @kbd{C-x C-f}:
|
|
2761
|
|
2762 @lisp
|
|
2763 (global-set-key
|
|
2764 [(control x) (control y)]
|
|
2765 (lambda ()
|
|
2766 (interactive)
|
|
2767 (find-file
|
|
2768 (read-file-name
|
|
2769 "Find Tramp file: "
|
|
2770 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))))
|
|
2771 @end lisp
|
|
2772
|
|
2773 Simply typing @kbd{C-x C-y} would initialize the minibuffer for
|
|
2774 editing with your beloved file name.
|
|
2775
|
|
2776 See also @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the
|
|
2777 Emacs Wiki} for a more comprehensive example.
|
|
2778
|
|
2779 @item Define own abbreviation (1):
|
|
2780
|
|
2781 It is possible to define an own abbreviation list for expanding file
|
|
2782 names:
|
|
2783
|
|
2784 @lisp
|
|
2785 (add-to-list
|
|
2786 'directory-abbrev-alist
|
|
2787 '("^/xy" . "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
|
|
2788 @end lisp
|
|
2789
|
|
2790 This shortens the file openening command to @kbd{C-x C-f /xy
|
|
2791 @key{RET}}. The disadvantage is, again, that you cannot edit the file
|
|
2792 name, because the expansion happens after entering the file name only.
|
|
2793
|
|
2794 @item Define own abbreviation (2):
|
|
2795
|
|
2796 The @code{abbrev-mode} gives more flexibility for editing the
|
|
2797 minibuffer:
|
|
2798
|
|
2799 @lisp
|
|
2800 (define-abbrev-table 'my-tramp-abbrev-table
|
|
2801 '(("xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")))
|
|
2802
|
|
2803 (add-hook
|
|
2804 'minibuffer-setup-hook
|
|
2805 '(lambda ()
|
|
2806 (abbrev-mode 1)
|
|
2807 (setq local-abbrev-table my-tramp-abbrev-table)))
|
|
2808
|
|
2809 (defadvice minibuffer-complete
|
|
2810 (before my-minibuffer-complete activate)
|
|
2811 (expand-abbrev))
|
|
2812
|
|
2813 ;; If you use partial-completion-mode
|
|
2814 (defadvice PC-do-completion
|
|
2815 (before my-PC-do-completion activate)
|
|
2816 (expand-abbrev))
|
|
2817 @end lisp
|
|
2818
|
|
2819 After entering @kbd{C-x C-f xy @key{TAB}}, the minibuffer is
|
|
2820 expanded, and you can continue editing.
|
|
2821
|
|
2822 @item Use bookmarks:
|
|
2823
|
|
2824 Bookmarks can be used to visit Tramp files or directories.
|
|
2825 @ifinfo
|
|
2826 @pxref{Bookmarks, , , @value{emacsdir}}
|
|
2827 @end ifinfo
|
|
2828
|
|
2829 When you have opened @file{@trampfn{ssh, news, news.my.domain,
|
|
2830 /opt/news/etc/}}, you should save the bookmark via
|
|
2831 @ifset emacs
|
|
2832 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
|
|
2833 @end ifset
|
|
2834 @ifset xemacs
|
|
2835 @kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
|
|
2836 @end ifset
|
|
2837
|
|
2838 Later on, you can always navigate to that bookmark via
|
|
2839 @ifset emacs
|
|
2840 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
|
|
2841 @end ifset
|
|
2842 @ifset xemacs
|
|
2843 @kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
|
|
2844 @end ifset
|
|
2845
|
|
2846 @item Use recent files:
|
|
2847
|
|
2848 @ifset emacs
|
|
2849 @file{recentf}
|
|
2850 @end ifset
|
|
2851 @ifset xemacs
|
|
2852 @file{recent-files}
|
|
2853 @end ifset
|
|
2854 remembers visited places.
|
|
2855 @ifinfo
|
|
2856 @ifset emacs
|
|
2857 @pxref{File Conveniences, , , @value{emacsdir}}
|
|
2858 @end ifset
|
|
2859 @ifset xemacs
|
|
2860 @pxref{recent-files, , , edit-utils}
|
|
2861 @end ifset
|
|
2862 @end ifinfo
|
|
2863
|
|
2864 You could keep remote file names in the recent list without checking
|
|
2865 their readability through a remote access:
|
|
2866
|
|
2867 @lisp
|
|
2868 @ifset emacs
|
|
2869 (recentf-mode 1)
|
|
2870 @end ifset
|
|
2871 @ifset xemacs
|
|
2872 (recent-files-initialize)
|
|
2873 (add-hook
|
|
2874 'find-file-hooks
|
|
2875 (lambda ()
|
|
2876 (when (file-remote-p (buffer-file-name))
|
|
2877 (recent-files-make-permanent)))
|
|
2878 'append)
|
|
2879 @end ifset
|
|
2880 @end lisp
|
|
2881
|
|
2882 The list of files opened recently is reachable via
|
|
2883 @ifset emacs
|
|
2884 @kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
|
|
2885 @end ifset
|
|
2886 @ifset xemacs
|
|
2887 @kbd{@key{menu-bar} @key{Recent Files}}.
|
|
2888 @end ifset
|
|
2889
|
|
2890 @ifset emacs
|
|
2891 @item Use filecache:
|
|
2892
|
|
2893 @file{filecache} remembers visited places. Add the directory into
|
|
2894 the cache:
|
|
2895
|
|
2896 @lisp
|
|
2897 (eval-after-load "filecache"
|
|
2898 '(file-cache-add-directory
|
|
2899 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
|
|
2900 @end lisp
|
|
2901
|
|
2902 Whenever you want to load a file, you can enter @kbd{C-x C-f
|
|
2903 C-@key{TAB}} in the minibuffer. The completion is done for the given
|
|
2904 directory.
|
|
2905 @end ifset
|
|
2906
|
|
2907 @ifset emacs
|
|
2908 @item Use bbdb:
|
|
2909
|
|
2910 @file{bbdb} has a built-in feature for @value{ftppackagename} files,
|
|
2911 which works also for @value{tramp}.
|
|
2912 @ifinfo
|
|
2913 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}
|
|
2914 @end ifinfo
|
|
2915
|
|
2916 You need to load @file{bbdb}:
|
|
2917
|
|
2918 @lisp
|
|
2919 (require 'bbdb)
|
|
2920 (bbdb-initialize)
|
|
2921 @end lisp
|
|
2922
|
|
2923 Then you can create a BBDB entry via @kbd{M-x bbdb-create-ftp-site}.
|
|
2924 Because BBDB is not prepared for @value{tramp} syntax, you must
|
|
2925 specify a method together with the user name, when needed. Example:
|
|
2926
|
|
2927 @example
|
|
2928 @kbd{M-x bbdb-create-ftp-site @key{RET}}
|
|
2929 @b{Ftp Site:} news.my.domain @key{RET}
|
|
2930 @b{Ftp Directory:} /opt/news/etc/ @key{RET}
|
|
2931 @b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
|
|
2932 @b{Company:} @key{RET}
|
|
2933 @b{Additional Comments:} @key{RET}
|
|
2934 @end example
|
|
2935
|
|
2936 When you have opened your BBDB buffer, you can access such an entry by
|
|
2937 pressing the key @key{F}.
|
|
2938 @end ifset
|
|
2939
|
|
2940 @end enumerate
|
|
2941
|
|
2942 I would like to thank all @value{tramp} users, who have contributed to
|
|
2943 the different recipes!
|
|
2944
|
|
2945
|
|
2946 @item
|
|
2947 How can I disable @value{tramp}?
|
|
2948
|
|
2949 Shame on you, why did you read until now?
|
|
2950
|
|
2951 @ifset emacs
|
|
2952 If you just want to have @value{ftppackagename} as default remote
|
|
2953 files access package, you should apply the following code:
|
|
2954
|
|
2955 @lisp
|
|
2956 (setq tramp-default-method "ftp")
|
|
2957 @end lisp
|
|
2958 @end ifset
|
|
2959
|
|
2960 Unloading @value{tramp} can be achieved by applying @kbd{M-x
|
|
2961 tramp-unload-tramp}.
|
|
2962 @ifset emacs
|
|
2963 This resets also the @value{ftppackagename} plugins.
|
|
2964 @end ifset
|
|
2965 @end itemize
|
|
2966
|
|
2967
|
|
2968 @c For the developer
|
|
2969 @node Version Control
|
|
2970 @chapter The inner workings of remote version control
|
|
2971 @cindex Version Control
|
|
2972
|
|
2973 Unlike @value{ftppackagename}, @value{tramp} has full shell access to the
|
|
2974 remote machine. This makes it possible to provide version control for
|
|
2975 files accessed under @value{tramp}.
|
|
2976
|
|
2977 The actual version control binaries must be installed on the remote
|
|
2978 machine, accessible in the directories specified in
|
|
2979 @code{tramp-remote-path}.
|
|
2980
|
|
2981 This transparent integration with the version control systems is one of
|
|
2982 the most valuable features provided by @value{tramp}, but it is far from perfect.
|
|
2983 Work is ongoing to improve the transparency of the system.
|
|
2984
|
|
2985 @menu
|
|
2986 * Version Controlled Files:: Determining if a file is under version control.
|
|
2987 * Remote Commands:: Executing the version control commands on the remote machine.
|
|
2988 * Changed workfiles:: Detecting if the working file has changed.
|
|
2989 * Checking out files:: Bringing the workfile out of the repository.
|
|
2990 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
|
|
2991 @end menu
|
|
2992
|
|
2993
|
|
2994 @node Version Controlled Files
|
|
2995 @section Determining if a file is under version control
|
|
2996
|
|
2997 The VC package uses the existence of on-disk revision control master
|
|
2998 files to determine if a given file is under revision control. These file
|
|
2999 tests happen on the remote machine through the standard @value{tramp} mechanisms.
|
|
3000
|
|
3001
|
|
3002 @node Remote Commands
|
|
3003 @section Executing the version control commands on the remote machine
|
|
3004
|
|
3005 There are no hooks provided by VC to allow intercepting of the version
|
|
3006 control command execution. The calls occur through the
|
|
3007 @code{call-process} mechanism, a function that is somewhat more
|
|
3008 efficient than the @code{shell-command} function but that does not
|
|
3009 provide hooks for remote execution of commands.
|
|
3010
|
|
3011 To work around this, the functions @code{vc-do-command} and
|
|
3012 @code{vc-simple-command} have been advised to intercept requests for
|
|
3013 operations on files accessed via @value{tramp}.
|
|
3014
|
|
3015 In the case of a remote file, the @code{shell-command} interface is
|
|
3016 used, with some wrapper code, to provide the same functionality on the
|
|
3017 remote machine as would be seen on the local machine.
|
|
3018
|
|
3019
|
|
3020 @node Changed workfiles
|
|
3021 @section Detecting if the working file has changed
|
|
3022
|
|
3023 As there is currently no way to get access to the mtime of a file on a
|
|
3024 remote machine in a portable way, the @code{vc-workfile-unchanged-p}
|
|
3025 function is advised to call an @value{tramp} specific function for remote files.
|
|
3026
|
|
3027 The @code{tramp-vc-workfile-unchanged-p} function uses the functioning VC
|
|
3028 diff functionality to determine if any changes have occurred between the
|
|
3029 workfile and the version control master.
|
|
3030
|
|
3031 This requires that a shell command be executed remotely, a process that
|
|
3032 is notably heavier-weight than the mtime comparison used for local
|
|
3033 files. Unfortunately, unless a portable solution to the issue is found,
|
|
3034 this will remain the cost of remote version control.
|
|
3035
|
|
3036
|
|
3037 @node Checking out files
|
|
3038 @section Bringing the workfile out of the repository
|
|
3039
|
|
3040 VC will, by default, check for remote files and refuse to act on them
|
|
3041 when checking out files from the repository. To work around this
|
|
3042 problem, the function @code{vc-checkout} knows about @value{tramp} files and
|
|
3043 allows version control to occur.
|
|
3044
|
|
3045
|
|
3046 @node Miscellaneous Version Control
|
|
3047 @section Things related to Version Control that don't fit elsewhere
|
|
3048
|
|
3049 Minor implementation details, &c.
|
|
3050
|
|
3051 @menu
|
|
3052 * Remote File Ownership:: How VC determines who owns a workfile.
|
|
3053 * Back-end Versions:: How VC determines what release your RCS is.
|
|
3054 @end menu
|
|
3055
|
|
3056
|
|
3057 @node Remote File Ownership
|
|
3058 @subsection How VC determines who owns a workfile
|
|
3059
|
|
3060 @value{emacsname} provides the @code{user-login-name} function to
|
|
3061 return the login name of the current user as well as mapping from
|
|
3062 arbitrary user id values back to login names. The VC code uses this
|
|
3063 functionality to map from the uid of the owner of a workfile to the
|
|
3064 login name in some circumstances.
|
|
3065
|
|
3066 This will not, for obvious reasons, work if the remote system has a
|
|
3067 different set of logins. As such, it is necessary to delegate to the
|
|
3068 remote machine the job of determining the login name associated with a
|
|
3069 uid.
|
|
3070
|
|
3071 Unfortunately, with the profusion of distributed management systems such
|
|
3072 as @code{NIS}, @code{NIS+} and @code{NetInfo}, there is no simple,
|
|
3073 reliable and portable method for performing this mapping.
|
|
3074
|
|
3075 Thankfully, the only place in the VC code that depends on the mapping of
|
|
3076 a uid to a login name is the @code{vc-file-owner} function. This returns
|
|
3077 the login of the owner of the file as a string.
|
|
3078
|
|
3079 This function has been advised to use the output of @command{ls} on the
|
|
3080 remote machine to determine the login name, delegating the problem of
|
|
3081 mapping the uid to the login to the remote system which should know more
|
|
3082 about it than I do.
|
|
3083
|
|
3084
|
|
3085 @node Back-end Versions
|
|
3086 @subsection How VC determines what release your RCS is
|
|
3087
|
|
3088 VC needs to know what release your revision control binaries you are
|
|
3089 running as not all features VC supports are available with older
|
|
3090 versions of @command{rcs(1)}, @command{cvs(1)} or @command{sccs(1)}.
|
|
3091
|
|
3092 The default implementation of VC determines this value the first time it
|
|
3093 is needed and then stores the value globally to avoid the overhead of
|
|
3094 executing a process and parsing its output each time the information is
|
|
3095 needed.
|
|
3096
|
|
3097 Unfortunately, life is not quite so easy when remote version control
|
|
3098 comes into the picture. Each remote machine may have a different version
|
|
3099 of the version control tools and, while this is painful, we need to
|
|
3100 ensure that unavailable features are not used remotely.
|
|
3101
|
|
3102 To resolve this issue, @value{tramp} currently takes the sledgehammer
|
|
3103 approach of making the release values of the revision control tools
|
|
3104 local to each @value{tramp} buffer, forcing VC to determine these values
|
|
3105 again each time a new file is visited.
|
|
3106
|
|
3107 This has, quite obviously, some performance implications. Thankfully,
|
|
3108 most of the common operations performed by VC do not actually require
|
|
3109 that the remote version be known. This makes the problem far less
|
|
3110 apparent.
|
|
3111
|
|
3112 Eventually these values will be captured by @value{tramp} on a system by
|
|
3113 system basis and the results cached to improve performance.
|
|
3114
|
|
3115
|
|
3116 @node Files directories and localnames
|
|
3117 @chapter How file names, directories and localnames are mangled and managed.
|
|
3118
|
|
3119 @menu
|
|
3120 * Localname deconstruction:: Breaking a localname into its components.
|
|
3121 @end menu
|
|
3122
|
|
3123
|
|
3124 @node Localname deconstruction
|
|
3125 @section Breaking a localname into its components.
|
|
3126
|
|
3127 @value{tramp} file names are somewhat different, obviously, to ordinary file
|
|
3128 names. As such, the lisp functions @code{file-name-directory} and
|
|
3129 @code{file-name-nondirectory} are overridden within the @value{tramp}
|
|
3130 package.
|
|
3131
|
|
3132 Their replacements are reasonably simplistic in their approach. They
|
|
3133 dissect the filename, call the original handler on the localname and
|
|
3134 then rebuild the @value{tramp} file name with the result.
|
|
3135
|
|
3136 This allows the platform specific hacks in the original handlers to take
|
|
3137 effect while preserving the @value{tramp} file name information.
|
|
3138
|
|
3139
|
|
3140 @node Traces and Profiles
|
|
3141 @chapter How to Customize Traces
|
|
3142
|
|
3143 All @value{tramp} messages are raised with a verbosity level. The
|
|
3144 verbosity level can be any number between 0 and 10. Only messages with
|
|
3145 a verbosity level less than or equal to @code{tramp-verbose} are
|
|
3146 displayed.
|
|
3147
|
|
3148 The verbosity levels are
|
|
3149
|
|
3150 @w{ 0} silent (no @value{tramp} messages at all)
|
|
3151 @*@indent @w{ 1} errors
|
|
3152 @*@indent @w{ 2} warnings
|
|
3153 @*@indent @w{ 3} connection to remote hosts (default verbosity)
|
|
3154 @*@indent @w{ 4} activities
|
|
3155 @*@indent @w{ 5} internal
|
|
3156 @*@indent @w{ 6} sent and received strings
|
|
3157 @*@indent @w{ 7} file caching
|
|
3158 @*@indent @w{ 8} connection properties
|
|
3159 @*@indent @w{10} traces (huge)
|
|
3160
|
|
3161 When @code{tramp-verbose} is greater than or equal to 4, the messages
|
|
3162 are also written into a @value{tramp} debug buffer. This debug buffer
|
|
3163 is useful for analysing problems; sending a @value{tramp} bug report
|
|
3164 should be done with @code{tramp-verbose} set to a verbosity level of at
|
|
3165 least 6 (@pxref{Bug Reports}).
|
|
3166
|
|
3167 The debug buffer is in
|
|
3168 @ifinfo
|
|
3169 @ref{Outline Mode, , , @value{emacsdir}}.
|
|
3170 @end ifinfo
|
|
3171 @ifnotinfo
|
|
3172 Outline Mode.
|
|
3173 @end ifnotinfo
|
|
3174 That means, you can change the level of messages to be viewed. If you
|
|
3175 want, for example, see only messages up to verbosity level 5, you must
|
|
3176 enter @kbd{C-u 6 C-c C-q}.
|
|
3177 @ifinfo
|
|
3178 Other keys for navigating are described in
|
|
3179 @ref{Outline Visibility, , , @value{emacsdir}}.
|
|
3180 @end ifinfo
|
|
3181
|
|
3182 @value{tramp} errors are handled internally in order to raise the
|
|
3183 verbosity level 1 messages. When you want to get a Lisp backtrace in
|
|
3184 case of an error, you need to set both
|
|
3185
|
|
3186 @lisp
|
|
3187 (setq debug-on-error t
|
|
3188 debug-on-signal t)
|
|
3189 @end lisp
|
|
3190
|
|
3191 Sometimes, it might be even necessary to step through @value{tramp}
|
|
3192 function call traces. Such traces are enabled by the following code:
|
|
3193
|
|
3194 @lisp
|
|
3195 (require 'tramp)
|
|
3196 (require 'trace)
|
|
3197 (mapcar 'trace-function-background
|
|
3198 (mapcar 'intern
|
|
3199 (all-completions "tramp-" obarray 'functionp)))
|
|
3200 (untrace-function 'tramp-read-passwd)
|
|
3201 (untrace-function 'tramp-gw-basic-authentication)
|
|
3202 @end lisp
|
|
3203
|
|
3204 The function call traces are inserted in the buffer
|
|
3205 @file{*trace-output*}. @code{tramp-read-passwd} and
|
|
3206 @code{tramp-gw-basic-authentication} shall be disabled when the
|
|
3207 function call traces are added to @value{tramp}, because both
|
|
3208 functions return password strings, which should not be distributed.
|
|
3209
|
|
3210
|
|
3211 @node Issues
|
|
3212 @chapter Debatable Issues and What Was Decided
|
|
3213
|
|
3214 @itemize @bullet
|
|
3215 @item The uuencode method does not always work.
|
|
3216
|
|
3217 Due to the design of @value{tramp}, the encoding and decoding programs
|
|
3218 need to read from stdin and write to stdout. On some systems,
|
|
3219 @command{uudecode -o -} will read stdin and write the decoded file to
|
|
3220 stdout, on other systems @command{uudecode -p} does the same thing.
|
|
3221 But some systems have uudecode implementations which cannot do this at
|
|
3222 all---it is not possible to call these uudecode implementations with
|
|
3223 suitable parameters so that they write to stdout.
|
|
3224
|
|
3225 Of course, this could be circumvented: the @code{begin foo 644} line
|
|
3226 could be rewritten to put in some temporary file name, then
|
|
3227 @command{uudecode} could be called, then the temp file could be
|
|
3228 printed and deleted.
|
|
3229
|
|
3230 But I have decided that this is too fragile to reliably work, so on some
|
|
3231 systems you'll have to do without the uuencode methods.
|
|
3232
|
|
3233 @item The @value{tramp} filename syntax differs between GNU Emacs and XEmacs.
|
|
3234
|
|
3235 The GNU Emacs maintainers wish to use a unified filename syntax for
|
|
3236 Ange-FTP and @value{tramp} so that users don't have to learn a new
|
|
3237 syntax. It is sufficient to learn some extensions to the old syntax.
|
|
3238
|
|
3239 For the XEmacs maintainers, the problems caused from using a unified
|
|
3240 filename syntax are greater than the gains. The XEmacs package system
|
|
3241 uses EFS for downloading new packages. So, obviously, EFS has to be
|
|
3242 installed from the start. If the filenames were unified, @value{tramp}
|
|
3243 would have to be installed from the start, too.
|
|
3244
|
|
3245 @ifset xemacs
|
|
3246 @strong{Note:} If you'd like to use a similar syntax like
|
|
3247 @value{ftppackagename}, you need the following settings in your init
|
|
3248 file:
|
|
3249
|
|
3250 @lisp
|
|
3251 (setq tramp-unified-filenames t)
|
|
3252 (require 'tramp)
|
|
3253 @end lisp
|
|
3254
|
|
3255 The autoload of the @value{emacsname} @value{tramp} package must be
|
|
3256 disabled. This can be achieved by setting file permissions @code{000}
|
|
3257 to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}.
|
|
3258
|
|
3259 In case of unified filenames, all @value{emacsname} download sites are
|
|
3260 added to @code{tramp-default-method-alist} with default method
|
|
3261 @option{ftp} @xref{Default Method}. These settings shouldn't be
|
|
3262 touched for proper working of the @value{emacsname} package system.
|
|
3263
|
|
3264 The syntax for unified filenames is described in the @value{tramp} manual
|
|
3265 for @value{emacsothername}.
|
|
3266 @end ifset
|
|
3267 @end itemize
|
|
3268
|
|
3269 @node GNU Free Documentation License
|
|
3270 @appendix GNU Free Documentation License
|
|
3271 @include doclicense.texi
|
|
3272
|
|
3273 @node Concept Index
|
|
3274 @comment node-name, next, previous, up
|
|
3275 @unnumbered Concept Index
|
|
3276 @printindex cp
|
|
3277 @contents
|
|
3278 @c End of tramp.texi - the TRAMP User Manual
|
|
3279 @bye
|
|
3280
|
|
3281 @c TODO
|
|
3282 @c
|
|
3283 @c * Say something about the .login and .profile files of the remote
|
|
3284 @c shells.
|
|
3285 @c * Explain how tramp.el works in principle: open a shell on a remote
|
|
3286 @c host and then send commands to it.
|
|
3287 @c * Make terminology "inline" vs "out-of-band" consistent.
|
|
3288 @c It seems that "external" is also used instead of "out-of-band".
|
|
3289
|
|
3290 @c * M. Albinus
|
|
3291 @c ** Use `filename' resp. `file name' consistently.
|
|
3292 @c ** Use `host' resp. `machine' consistently.
|
|
3293 @c ** Consistent small or capitalized words especially in menues.
|
|
3294
|
|
3295 @ignore
|
|
3296 arch-tag: f96dd66e-6dd3-4c92-8d77-9c56205ba808
|
|
3297 @end ignore
|