]> code.delx.au - gnu-emacs/blob - man/tramp.texi
** gotoh@taiyo.co.jp, Nov 8: url-gw.el: Cannot use proxy with url-gw\.el 2006-10...
[gnu-emacs] / man / tramp.texi
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename ../info/tramp
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 Macros for formatting a filename.
21 @c trampfn is for a full filename, trampfnmhp means method, host, localname
22 @c were given, and so on.
23 @macro trampfn(method, user, host, localname)
24 @value{prefix}@value{method}@value{user}@@@value{host}@value{postfix}@value{localname}
25 @end macro
26
27 @copying
28 Copyright @copyright{} 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
29 Free Software Foundation, Inc.
30
31 @quotation
32 Permission is granted to copy, distribute and/or modify this document
33 under the terms of the GNU Free Documentation License, Version 1.2 or
34 any later version published by the Free Software Foundation; with no
35 Invariant Sections, with the Front-Cover texts being ``A GNU
36 Manual'', and with the Back-Cover Texts as in (a) below. A copy of the
37 license is included in the section entitled ``GNU Free Documentation
38 License'' in the Emacs manual.
39
40 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
41 this GNU Manual, like GNU software. Copies published by the Free
42 Software Foundation raise funds for GNU development.''
43
44 This document is part of a collection distributed under the GNU Free
45 Documentation License. If you want to distribute this document
46 separately from the collection, you can do so by adding a copy of the
47 license to the document, as described in section 6 of the license.
48 @end quotation
49 @end copying
50
51 @c Entries for @command{install-info} to use
52 @dircategory @value{emacsname}
53 @direntry
54 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
55 @value{emacsname} remote file access via rsh and rcp.
56 @end direntry
57
58 @tex
59
60 @titlepage
61 @title @value{tramp} version @value{trampver} User Manual
62
63 @author by Daniel Pittman
64 @author based on documentation by Kai Gro@ss{}johann
65
66 @page
67 @insertcopying
68
69 @end titlepage
70 @page
71
72 @end tex
73
74 @ifnottex
75 @node Top, Overview, (dir), (dir)
76 @top @value{tramp} version @value{trampver} User Manual
77
78 This file documents @value{tramp} version @value{trampver}, a remote file
79 editing package for @value{emacsname}.
80
81 @value{tramp} stands for `Transparent Remote (file) Access, Multiple
82 Protocol'. This package provides remote file editing, similar to
83 @value{ftppackagename}.
84
85 The difference is that @value{ftppackagename} uses FTP to transfer
86 files between the local and the remote host, whereas @value{tramp} uses a
87 combination of @command{rsh} and @command{rcp} or other work-alike
88 programs, such as @command{ssh}/@command{scp}.
89
90 You can find the latest version of this document on the web at
91 @uref{http://www.gnu.org/software/tramp/}.
92
93 @c Pointer to the other Emacs flavor is necessary only in case of
94 @c standalone installation.
95 @ifset installchapter
96 The manual has been generated for @value{emacsname}.
97 @ifinfo
98 If you want to read the info pages for @value{emacsothername}, you
99 should read in @ref{Installation} how to create them.
100 @end ifinfo
101 @ifhtml
102 If you're using the other Emacs flavor, you should read the
103 @uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
104 @end ifhtml
105 @end ifset
106
107 @ifhtml
108 @ifset jamanual
109 This manual is also available as a @uref{@value{japanesemanual},
110 Japanese translation}.
111 @end ifset
112
113 The latest release of @value{tramp} is available for
114 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
115 @ref{Obtaining Tramp} for more details, including the CVS server
116 details.
117
118 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
119 Savannah Project Page}.
120 @end ifhtml
121
122 There is a mailing list for @value{tramp}, available at
123 @email{tramp-devel@@gnu.org}, and archived at
124 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
125 @value{tramp} Mail Archive}.
126 @ifhtml
127 Older archives are located at
128 @uref{http://sourceforge.net/mailarchive/forum.php?forum=tramp-devel,
129 SourceForge Mail Archive} and
130 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/,
131 The Mail Archive}.
132 @c in HTML output, there's no new paragraph.
133 @*@*
134 @end ifhtml
135
136 @insertcopying
137
138 @end ifnottex
139
140 @menu
141 * Overview:: What @value{tramp} can and cannot do.
142
143 For the end user:
144
145 * Obtaining Tramp:: How to obtain @value{tramp}.
146 * History:: History of @value{tramp}.
147 @ifset installchapter
148 * Installation:: Installing @value{tramp} with your @value{emacsname}.
149 @end ifset
150 * Configuration:: Configuring @value{tramp} for use.
151 * Usage:: An overview of the operation of @value{tramp}.
152 * Bug Reports:: Reporting Bugs and Problems.
153 * Frequently Asked Questions:: Questions and answers from the mailing list.
154 * Concept Index:: An item for each concept.
155
156 For the developer:
157
158 * Version Control:: The inner workings of remote version control.
159 * Files directories and localnames:: How file names, directories and localnames are mangled and managed.
160 * Issues:: Debatable Issues and What Was Decided.
161
162 @detailmenu
163 --- The Detailed Node Listing ---
164 @c
165 @ifset installchapter
166 Installing @value{tramp} with your @value{emacsname}
167
168 * Installation parameters:: Parameters in order to control installation.
169 * Load paths:: How to plug-in @value{tramp} into your environment.
170 * Japanese manual:: Japanese manual.
171
172 @end ifset
173
174 Configuring @value{tramp} for use
175
176 * Connection types:: Types of connections made to remote machines.
177 * Inline methods:: Inline methods.
178 * External transfer methods:: External transfer methods.
179 * Multi-hop Methods:: Connecting to a remote host using multiple hops.
180 * Default Method:: Selecting a default method.
181 * Customizing Methods:: Using Non-Standard Methods.
182 * Customizing Completion:: Selecting config files for user/host name completion.
183 * Password caching:: Reusing passwords for several connections.
184 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
185 * Remote shell setup:: Remote shell setup hints.
186 * Windows setup hints:: Issues with Cygwin ssh.
187 * Auto-save and Backup:: Auto-save and Backup.
188
189 Using @value{tramp}
190
191 * Filename Syntax:: @value{tramp} filename conventions.
192 * Multi-hop filename syntax:: Multi-hop filename conventions.
193 * Filename completion:: Filename completion.
194 * Dired:: Dired.
195 * Compilation:: Compile remote files.
196
197 The inner workings of remote version control
198
199 * Version Controlled Files:: Determining if a file is under version control.
200 * Remote Commands:: Executing the version control commands on the remote machine.
201 * Changed workfiles:: Detecting if the working file has changed.
202 * Checking out files:: Bringing the workfile out of the repository.
203 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
204
205 Things related to Version Control that don't fit elsewhere
206
207 * Remote File Ownership:: How VC determines who owns a workfile.
208 * Back-end Versions:: How VC determines what release your RCS is.
209
210 How file names, directories and localnames are mangled and managed
211
212 * Localname deconstruction:: Breaking a localname into its components.
213
214 @end detailmenu
215 @end menu
216
217 @node Overview
218 @chapter An overview of @value{tramp}
219 @cindex overview
220
221 After the installation of @value{tramp} into your @value{emacsname},
222 you will be able to access files on remote machines as though they
223 were local. Access to the remote file system for editing files,
224 version control, and @code{dired} are transparently enabled.
225
226 Your access to the remote machine can be with the @command{rsh},
227 @command{rlogin}, @command{telnet} programs or with any similar
228 connection method. This connection must pass @acronym{ASCII}
229 successfully to be usable but need not be 8-bit clean.
230
231 The package provides support for @command{ssh} connections out of the
232 box, one of the more common uses of the package. This allows
233 relatively secure access to machines, especially if @command{ftp}
234 access is disabled.
235
236 The majority of activity carried out by @value{tramp} requires only that
237 the remote login is possible and is carried out at the terminal. In
238 order to access remote files @value{tramp} needs to transfer their content
239 to the local machine temporarily.
240
241 @value{tramp} can transfer files between the machines in a variety of ways.
242 The details are easy to select, depending on your needs and the
243 machines in question.
244
245 The fastest transfer methods (for large files) rely on a remote file
246 transfer package such as @command{rcp}, @command{scp} or
247 @command{rsync}.
248
249 If the remote copy methods are not suitable for you, @value{tramp} also
250 supports the use of encoded transfers directly through the shell.
251 This requires that the @command{mimencode} or @command{uuencode} tools
252 are available on the remote machine. These methods are generally
253 faster for small files.
254
255 Within these limitations, @value{tramp} is quite powerful. It is worth
256 noting that, as of the time of writing, it is far from a polished
257 end-user product. For a while yet you should expect to run into rough
258 edges and problems with the code now and then.
259
260 It is finished enough that the developers use it for day to day work but
261 the installation and setup can be a little difficult to master, as can
262 the terminology.
263
264 @value{tramp} is still under active development and any problems you encounter,
265 trivial or major, should be reported to the @value{tramp} developers.
266 @xref{Bug Reports}.
267
268
269 @subsubheading Behind the scenes
270 @cindex behind the scenes
271 @cindex details of operation
272 @cindex how it works
273
274 This section tries to explain what goes on behind the scenes when you
275 access a remote file through @value{tramp}.
276
277 Suppose you type @kbd{C-x C-f} and enter part of an @value{tramp} file name,
278 then hit @kbd{@key{TAB}} for completion. Suppose further that this is
279 the first time that @value{tramp} is invoked for the host in question. Here's
280 what happens:
281
282 @itemize
283 @item
284 @value{tramp} discovers that it needs a connection to the host. So it
285 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
286 @var{user}} or a similar tool to connect to the remote host.
287 Communication with this process happens through an
288 @value{emacsname} buffer, that is, the output from the remote end
289 goes into a buffer.
290
291 @item
292 The remote host may prompt for a login name (for @command{telnet}).
293 The login name is given in the file name, so @value{tramp} sends the
294 login name and a newline.
295
296 @item
297 The remote host may prompt for a password or pass phrase (for
298 @command{rsh} or for @command{telnet} after sending the login name).
299 @value{tramp} displays the prompt in the minibuffer, asking you for the
300 password or pass phrase.
301
302 You enter the password or pass phrase. @value{tramp} sends it to the remote
303 host, followed by a newline.
304
305 @item
306 @value{tramp} now waits for the shell prompt or for a message that the login
307 failed.
308
309 If @value{tramp} sees neither of them after a certain period of time (a minute,
310 say), then it issues an error message saying that it couldn't find the
311 remote shell prompt and shows you what the remote host has sent.
312
313 If @value{tramp} sees a @samp{login failed} message, it tells you so,
314 aborts the login attempt and allows you to try again.
315
316 @item
317 Suppose that the login was successful and @value{tramp} sees the shell prompt
318 from the remote host. Now @value{tramp} invokes @command{/bin/sh} because
319 Bourne shells and C shells have different command
320 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
321 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
322 Maybe you use the Scheme shell @command{scsh}@dots{}}
323
324 After the Bourne shell has come up, @value{tramp} sends a few commands to
325 ensure a good working environment. It turns off echoing, it sets the
326 shell prompt, and a few other things.
327
328 @item
329 Now the remote shell is up and it good working order. Remember, what
330 was supposed to happen is that @value{tramp} tries to find out what files exist
331 on the remote host so that it can do filename completion.
332
333 So, @value{tramp} basically issues @command{cd} and @command{ls} commands and
334 also sometimes @command{echo} with globbing. Another command that is
335 often used is @command{test} to find out whether a file is writable or a
336 directory or the like. The output of each command is parsed for the
337 necessary operation.
338
339 @item
340 Suppose you are finished with filename completion, have entered @kbd{C-x
341 C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to
342 transfer the file contents from the remote host to the local host so
343 that you can edit them.
344
345 See above for an explanation of how @value{tramp} transfers the file contents.
346
347 For inline transfers, @value{tramp} issues a command like @samp{mimencode -b
348 /path/to/remote/file}, waits until the output has accumulated in the
349 buffer that's used for communication, then decodes that output to
350 produce the file contents.
351
352 For out-of-band transfers, @value{tramp} issues a command like the following:
353 @example
354 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
355 @end example
356 It then reads the local temporary file @file{/tmp/tramp.4711} into a
357 buffer and deletes the temporary file.
358
359 @item
360 You now edit the buffer contents, blithely unaware of what has happened
361 behind the scenes. (Unless you have read this section, that is.) When
362 you are finished, you type @kbd{C-x C-s} to save the buffer.
363
364 @item
365 Again, @value{tramp} transfers the file contents to the remote host either
366 inline or out-of-band. This is the reverse of what happens when reading
367 the file.
368 @end itemize
369
370 I hope this has provided you with a basic overview of what happens
371 behind the scenes when you open a file with @value{tramp}.
372
373
374 @c For the end user
375 @node Obtaining Tramp
376 @chapter Obtaining Tramp.
377 @cindex obtaining Tramp
378
379 @value{tramp} is freely available on the Internet and the latest
380 release may be downloaded from
381 @uref{ftp://ftp.gnu.org/gnu/tramp/}. This release includes the full
382 documentation and code for @value{tramp}, suitable for installation.
383 But GNU Emacs (22 or later) includes @value{tramp} already, and there
384 is a @value{tramp} package for XEmacs, as well. So maybe it is easier
385 to just use those. But if you want the bleeding edge, read
386 on@dots{...}
387
388 For the especially brave, @value{tramp} is available from CVS. The CVS
389 version is the latest version of the code and may contain incomplete
390 features or new issues. Use these versions at your own risk.
391
392 Instructions for obtaining the latest development version of @value{tramp}
393 from CVS can be found by going to the Savannah project page at the
394 following URL and then clicking on the CVS link in the navigation bar
395 at the top.
396
397 @noindent
398 @uref{http://savannah.gnu.org/projects/tramp/}
399
400 @noindent
401 Or follow the example session below:
402
403 @example
404 ] @strong{cd ~/@value{emacsdir}}
405 ] @strong{export CVS_RSH="ssh"}
406 ] @strong{cvs -z3 -d:ext:anoncvs@@savannah.gnu.org:/cvsroot/tramp co tramp}
407 @end example
408
409 @noindent
410 You should now have a directory @file{~/@value{emacsdir}/tramp}
411 containing the latest version of @value{tramp}. You can fetch the latest
412 updates from the repository by issuing the command:
413
414 @example
415 ] @strong{cd ~/@value{emacsdir}/tramp}
416 ] @strong{export CVS_RSH="ssh"}
417 ] @strong{cvs update -d}
418 @end example
419
420 @noindent
421 Once you've got updated files from the CVS repository, you need to run
422 @command{autoconf} in order to get an up-to-date @file{configure}
423 script:
424
425 @example
426 ] @strong{cd ~/@value{emacsdir}/tramp}
427 ] @strong{autoconf}
428 @end example
429
430
431 @node History
432 @chapter History of @value{tramp}
433 @cindex history
434 @cindex development history
435
436 Development was started end of November 1998. The package was called
437 @file{rssh.el}, back then. It only provided one method to access a
438 file, using @command{ssh} to log in to a remote host and using
439 @command{scp} to transfer the file contents. After a while, the name
440 was changed to @file{rcp.el}, and now it's @value{tramp}. Along the way,
441 many more methods for getting a remote shell and for transferring the
442 file contents were added. Support for VC was added.
443
444 The most recent addition of major features were the multi-hop methods
445 added in April 2000 and the unification of @value{tramp} and Ange-FTP
446 filenames in July 2002.
447
448 @c Installation chapter is necessary only in case of standalone
449 @c installation. Text taken from trampinst.texi.
450 @ifset installchapter
451 @include trampinst.texi
452 @end ifset
453
454 @node Configuration
455 @chapter Configuring @value{tramp} for use
456 @cindex configuration
457
458 @cindex default configuration
459 @value{tramp} is (normally) fully functional when it is initially
460 installed. It is initially configured to use the @command{scp}
461 program to connect to the remote host. So in the easiest case, you
462 just type @kbd{C-x C-f} and then enter the filename
463 @file{@value{prefix}@var{user}@@@var{machine}@value{postfix}@var{/path/to.file}}.
464
465 On some hosts, there are problems with opening a connection. These are
466 related to the behavior of the remote shell. See @xref{Remote shell
467 setup}, for details on this.
468
469 If you do not wish to use these commands to connect to the remote
470 host, you should change the default connection and transfer method
471 that @value{tramp} uses. There are several different methods that @value{tramp}
472 can use to connect to remote machines and transfer files
473 (@pxref{Connection types}).
474
475 If you don't know which method is right for you, see @xref{Default
476 Method}.
477
478
479 @menu
480 * Connection types:: Types of connections made to remote machines.
481 * Inline methods:: Inline methods.
482 * External transfer methods:: External transfer methods.
483 * Multi-hop Methods:: Connecting to a remote host using multiple hops.
484 * Default Method:: Selecting a default method.
485 Here we also try to help those who
486 don't have the foggiest which method
487 is right for them.
488 * Customizing Methods:: Using Non-Standard Methods.
489 * Customizing Completion:: Selecting config files for user/host name completion.
490 * Password caching:: Reusing passwords for several connections.
491 * Remote Programs:: How @value{tramp} finds and uses programs on the remote machine.
492 * Remote shell setup:: Remote shell setup hints.
493 * Windows setup hints:: Issues with Cygwin ssh.
494 * Auto-save and Backup:: Auto-save and Backup.
495 @end menu
496
497
498 @node Connection types
499 @section Types of connections made to remote machines.
500 @cindex connection types, overview
501
502 There are two basic types of transfer methods, each with its own
503 advantages and limitations. Both types of connection make use of a
504 remote shell access program such as @command{rsh}, @command{ssh} or
505 @command{telnet} to connect to the remote machine.
506
507 This connection is used to perform many of the operations that @value{tramp}
508 requires to make the remote file system transparently accessible from
509 the local machine. It is only when visiting files that the methods
510 differ.
511
512 @cindex inline methods
513 @cindex external transfer methods
514 @cindex external methods
515 @cindex out-of-band methods
516 @cindex methods, inline
517 @cindex methods, external transfer
518 @cindex methods, out-of-band
519 Loading or saving a remote file requires that the content of the file
520 be transfered between the two machines. The content of the file can be
521 transfered over the same connection used to log in to the remote
522 machine or the file can be transfered through another connection using
523 a remote copy program such as @command{rcp}, @command{scp} or
524 @command{rsync}. The former are called @dfn{inline methods}, the
525 latter are called @dfn{out-of-band methods} or @dfn{external transfer
526 methods} (@dfn{external methods} for short).
527
528 The performance of the external transfer methods is generally better
529 than that of the inline methods, at least for large files. This is
530 caused by the need to encode and decode the data when transferring
531 inline.
532
533 The one exception to this rule are the @command{scp} based transfer
534 methods. While these methods do see better performance when actually
535 transferring files, the overhead of the cryptographic negotiation at
536 startup may drown out the improvement in file transfer times.
537
538 External transfer methods should be configured such a way that they
539 don't require a password (with @command{ssh-agent}, or such alike).
540 If it isn't possible, you should consider @ref{Password caching},
541 otherwise you will be prompted for a password every copy action.
542
543 @cindex multi-hop methods
544 @cindex methods, multi-hop
545 A variant of the inline methods are the @dfn{multi-hop methods}.
546 These methods allow you to connect a remote host using a number `hops',
547 each of which connects to a different host. This is useful if you are
548 in a secured network where you need to go through a bastion host to
549 connect to the outside world.
550
551
552 @node Inline methods
553 @section Inline methods
554 @cindex inline methods
555 @cindex methods, inline
556
557 The inline methods in @value{tramp} are quite powerful and can work in
558 situations where you cannot use an external transfer program to connect.
559 Inline methods are the only methods that work when connecting to the
560 remote machine via telnet. (There are also strange inline methods which
561 allow you to transfer files between @emph{user identities} rather than
562 hosts, see below.)
563
564 These methods depend on the existence of a suitable encoding and
565 decoding command on remote machine. Locally, @value{tramp} may be able to
566 use features of @value{emacsname} to decode and encode the files or
567 it may require access to external commands to perform that task.
568
569 @cindex uuencode
570 @cindex mimencode
571 @cindex base-64 encoding
572 @value{tramp} checks the availability and usability of commands like
573 @command{mimencode} (part of the @command{metamail} package) or
574 @command{uuencode} on the remote host. The first reliable command
575 will be used. The search path can be customized, see @ref{Remote
576 Programs}.
577
578 If both commands aren't available on the remote host, @value{tramp}
579 transfers a small piece of Perl code to the remote host, and tries to
580 apply it for encoding and decoding.
581
582
583 @table @asis
584 @item @option{rsh}
585 @cindex method rsh
586 @cindex rsh method
587
588 Connect to the remote host with @command{rsh}. Due to the unsecure
589 connection it is recommended for very local host topology only.
590
591 On operating systems which provide the command @command{remsh} instead
592 of @command{rsh}, you can use the method @option{remsh}. This is true
593 for HP-UX or Cray UNICOS, for example.
594
595
596 @item @option{ssh}
597 @cindex method ssh
598 @cindex ssh method
599
600 Connect to the remote host with @command{ssh}. This is identical to
601 the previous option except that the @command{ssh} package is used,
602 making the connection more secure.
603
604 There are also two variants, @option{ssh1} and @option{ssh2}, that
605 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
606 explicitly select whether you want to use the SSH protocol version 1
607 or 2 to connect to the remote host. (You can also specify in
608 @file{~/.ssh/config}, the SSH configuration file, which protocol
609 should be used, and use the regular @option{ssh} method.)
610
611 Two other variants, @option{ssh1_old} and @option{ssh2_old}, use the
612 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
613 know what these are, you do not need these options.
614
615 All the methods based on @command{ssh} have an additional kludgy
616 feature: you can specify a host name which looks like @file{host#42}
617 (the real host name, then a hash sign, then a port number). This
618 means to connect to the given host but to also pass @code{-p 42} as
619 arguments to the @command{ssh} command.
620
621
622 @item @option{telnet}
623 @cindex method telnet
624 @cindex telnet method
625
626 Connect to the remote host with @command{telnet}. This is as unsecure
627 as the @option{rsh} method.
628
629
630 @item @option{su}
631 @cindex method su
632 @cindex su method
633
634 This method does not connect to a remote host at all, rather it uses
635 the @command{su} program to allow you to edit files as another user.
636
637
638 @item @option{sudo}
639 @cindex method sudo
640 @cindex sudo method
641
642 This is similar to the @option{su} method, but it uses @command{sudo}
643 rather than @command{su} to become a different user.
644
645 Note that @command{sudo} must be configured to allow you to start a
646 shell as the user. It would be nice if it was sufficient if
647 @command{ls} and @command{mimencode} were allowed, but that is not
648 easy to implement, so I haven't got around to it, yet.
649
650
651 @item @option{sshx}
652 @cindex method sshx
653 @cindex sshx method
654
655 As you would expect, this is similar to @option{ssh}, only a little
656 different. Whereas @option{ssh} opens a normal interactive shell on
657 the remote host, this option uses @samp{ssh -t -t @var{host} -l
658 @var{user} /bin/sh} to open a connection. This is useful for users
659 where the normal login shell is set up to ask them a number of
660 questions when logging in. This procedure avoids these questions, and
661 just gives @value{tramp} a more-or-less `standard' login shell to work
662 with.
663
664 Note that this procedure does not eliminate questions asked by
665 @command{ssh} itself. For example, @command{ssh} might ask ``Are you
666 sure you want to continue connecting?'' if the host key of the remote
667 host is not known. @value{tramp} does not know how to deal with such a
668 question (yet), therefore you will need to make sure that you can log
669 in without such questions.
670
671 This is also useful for Windows users where @command{ssh}, when
672 invoked from an @value{emacsname} buffer, tells them that it is not
673 allocating a pseudo tty. When this happens, the login shell is wont
674 to not print any shell prompt, which confuses @value{tramp} mightily.
675 For reasons unknown, some Windows ports for @command{ssh} require the
676 doubled @samp{-t} option.
677
678 This supports the @samp{-p} kludge.
679
680
681 @item @option{krlogin}
682 @cindex method krlogin
683 @cindex km krlogin
684 @cindex Kerberos (with krlogin method)
685
686 This method is also similar to @option{ssh}. It only uses the
687 @command{krlogin -x} command to log in to the remote host.
688
689
690 @item @option{plink}
691 @cindex method plink
692 @cindex plink method
693
694 This method is mostly interesting for Windows users using the PuTTY
695 implementation of SSH. It uses @samp{plink -ssh} to log in to the
696 remote host.
697
698 Additionally, the method @option{plink1} is provided, which calls
699 @samp{plink -1 -ssh} in order to use SSH protocol version 1
700 explicitly.
701
702 CCC: Do we have to connect to the remote host once from the command
703 line to accept the SSH key? Maybe this can be made automatic?
704
705 CCC: Does @command{plink} support the @samp{-p} option? @value{tramp} will
706 support that, anyway.
707
708 @end table
709
710
711
712 @node External transfer methods
713 @section External transfer methods
714 @cindex methods, external transfer
715 @cindex methods, out-of-band
716 @cindex external transfer methods
717 @cindex out-of-band methods
718
719 The external transfer methods operate through multiple channels, using
720 the remote shell connection for many actions while delegating file
721 transfers to an external transfer utility.
722
723 This saves the overhead of encoding and decoding that multiplexing the
724 transfer through the one connection has with the inline methods.
725
726 If you want to use an external transfer method you should be able to
727 execute the transfer utility to copy files to and from the remote
728 machine without any interaction.
729
730 @cindex ssh-agent
731 This means that you will need to use @command{ssh-agent} if you use the
732 @command{scp} program for transfers, or maybe your version of
733 @command{scp} accepts a password on the command line.@footnote{PuTTY's
734 @command{pscp} allows you to specify the password on the command line.}
735 If you use @command{rsync} via @command{ssh} then the same rule must
736 apply to that connection.
737
738 If you cannot get an external method to run without asking for a
739 password you should consider @ref{Password caching}.
740
741
742 @table @asis
743 @item @option{rcp} --- @command{rsh} and @command{rcp}
744 @cindex method rcp
745 @cindex rcp method
746 @cindex rcp (with rcp method)
747 @cindex rsh (with rcp method)
748
749 This method uses the @command{rsh} and @command{rcp} commands to connect
750 to the remote machine and transfer files. This is probably the fastest
751 connection method available.
752
753 The alternative method @option{remcp} uses the @command{remsh} and
754 @command{rcp} commands. It should be applied on machines where
755 @command{remsh} is used instead of @command{rsh}.
756
757
758 @item @option{scp} --- @command{ssh} and @command{scp}
759 @cindex method scp
760 @cindex scp method
761 @cindex scp (with scp method)
762 @cindex ssh (with scp method)
763
764 Using @command{ssh} to connect to the remote host and @command{scp} to
765 transfer files between the machines is the best method for securely
766 connecting to a remote machine and accessing files.
767
768 The performance of this option is also quite good. It may be slower than
769 the inline methods when you often open and close small files however.
770 The cost of the cryptographic handshake at the start of an @command{scp}
771 session can begin to absorb the advantage that the lack of encoding and
772 decoding presents.
773
774 There are also two variants, @option{scp1} and @option{scp2}, that
775 call @samp{ssh -1} and @samp{ssh -2}, respectively. This way, you can
776 explicitly select whether you want to use the SSH protocol version 1
777 or 2 to connect to the remote host. (You can also specify in
778 @file{~/.ssh/config}, the SSH configuration file, which protocol
779 should be used, and use the regular @option{scp} method.)
780
781 Two other variants, @option{scp1_old} and @option{scp2_old}, use the
782 @command{ssh1} and @command{ssh2} commands explicitly. If you don't
783 know what these are, you do not need these options.
784
785 All the @command{ssh} based methods support the kludgy @samp{-p}
786 feature where you can specify a port number to connect to in the host
787 name. For example, the host name @file{host#42} tells @value{tramp} to
788 specify @samp{-p 42} in the argument list for @command{ssh}.
789
790
791 @item @option{rsync} --- @command{ssh} and @command{rsync}
792 @cindex method rsync
793 @cindex rsync method
794 @cindex rsync (with rsync method)
795 @cindex ssh (with rsync method)
796
797 Using the @command{ssh} command to connect securely to the remote
798 machine and the @command{rsync} command to transfer files is almost
799 identical to the @option{scp} method.
800
801 While @command{rsync} performs much better than @command{scp} when
802 transferring files that exist on both hosts, this advantage is lost if
803 the file exists only on one side of the connection.
804
805 The @command{rsync} based method may be considerably faster than the
806 @command{rcp} based methods when writing to the remote system. Reading
807 files to the local machine is no faster than with a direct copy.
808
809 This method supports the @samp{-p} hack.
810
811
812 @item @option{scpx} --- @command{ssh} and @command{scp}
813 @cindex method scpx
814 @cindex scpx method
815 @cindex scp (with scpx method)
816 @cindex ssh (with scpx method)
817
818 As you would expect, this is similar to @option{scp}, only a little
819 different. Whereas @option{scp} opens a normal interactive shell on
820 the remote host, this option uses @samp{ssh -t -t @var{host} -l
821 @var{user} /bin/sh} to open a connection. This is useful for users
822 where the normal login shell is set up to ask them a number of
823 questions when logging in. This procedure avoids these questions, and
824 just gives @value{tramp} a more-or-less `standard' login shell to work
825 with.
826
827 This is also useful for Windows users where @command{ssh}, when
828 invoked from an @value{emacsname} buffer, tells them that it is not
829 allocating a pseudo tty. When this happens, the login shell is wont
830 to not print any shell prompt, which confuses @value{tramp} mightily.
831
832 This method supports the @samp{-p} hack.
833
834
835 @item @option{pscp} --- @command{plink} and @command{pscp}
836 @cindex method pscp
837 @cindex pscp method
838 @cindex pscp (with pscp method)
839 @cindex plink (with pscp method)
840 @cindex PuTTY (with pscp method)
841
842 This method is similar to @option{scp}, but it uses the
843 @command{plink} command to connect to the remote host, and it uses
844 @command{pscp} for transferring the files. These programs are part
845 of PuTTY, an SSH implementation for Windows.
846
847 CCC: Does @command{plink} support the @samp{-p} hack?
848
849
850 @item @option{fcp} --- @command{fsh} and @command{fcp}
851 @cindex method fcp
852 @cindex fcp method
853 @cindex fsh (with fcp method)
854 @cindex fcp (with fcp method)
855
856 This method is similar to @option{scp}, but it uses the @command{fsh}
857 command to connect to the remote host, and it uses @command{fcp} for
858 transferring the files. @command{fsh/fcp} are a front-end for
859 @command{ssh} which allow for reusing the same @command{ssh} session
860 for submitting several commands. This avoids the startup overhead of
861 @command{scp} (which has to establish a secure connection whenever it
862 is called). Note, however, that you can also use one of the inline
863 methods to achieve a similar effect.
864
865 This method uses the command @samp{fsh @var{host} -l @var{user}
866 /bin/sh -i} to establish the connection, it does not work to just say
867 @command{fsh @var{host} -l @var{user}}.
868
869 @cindex method fsh
870 @cindex fsh method
871
872 There is no inline method using @command{fsh} as the multiplexing
873 provided by the program is not very useful in our context. @value{tramp}
874 opens just one connection to the remote host and then keeps it open,
875 anyway.
876
877
878 @item @option{ftp}
879 @cindex method ftp
880 @cindex ftp method
881
882 This is not a native @value{tramp} method. Instead of, it forwards all
883 requests to @value{ftppackagename}.
884 @ifset xemacs
885 This works only for unified filenames, see @ref{Issues}.
886 @end ifset
887
888
889 @item @option{smb} --- @command{smbclient}
890 @cindex method smb
891 @cindex smb method
892
893 This is another not natural @value{tramp} method. It uses the
894 @command{smbclient} command on different Unices in order to connect to
895 an SMB server. An SMB server might be a Samba (or CIFS) server on
896 another UNIX host or, more interesting, a host running MS Windows. So
897 far, it is tested towards MS Windows NT, MS Windows 2000, and MS
898 Windows XP.
899
900 The first directory in the localname must be a share name on the remote
901 host. Remember, that the @code{$} character in which default shares
902 usually end, must be written @code{$$} due to environment variable
903 substitution in file names. If no share name is given (i.e. remote
904 directory @code{/}), all available shares are listed.
905
906 Since authorization is done on share level, you will be prompted
907 always for a password if you access another share on the same host.
908 This can be suppressed by @ref{Password caching}.
909
910 MS Windows uses for authorization both a user name and a domain name.
911 Because of this, the @value{tramp} syntax has been extended: you can
912 specify a user name which looks like @code{user%domain} (the real user
913 name, then a percent sign, then the domain name). So, to connect to
914 the machine @code{melancholia} as user @code{daniel} of the domain
915 @code{BIZARRE}, and edit @file{.emacs} in the home directory (share
916 @code{daniel$}) I would specify the filename
917 @file{@value{prefix}smb@value{postfixsinglehop}daniel%BIZARRE@@melancholia@value{postfix}/daniel$$/.emacs}.
918
919 The domain name as well as the user name are optional. If no user
920 name is specified at all, the anonymous user (without password
921 prompting) is assumed. This is different from all other @value{tramp}
922 methods, where in such a case the local user name is taken.
923
924 The @option{smb} method supports the @samp{-p} hack.
925
926 @strong{Please note:} If @value{emacsname} runs locally under MS
927 Windows, this method isn't available. Instead of, you can use UNC
928 file names like @file{//melancholia/daniel$$/.emacs}. The only
929 disadvantage is that there's no possibility to specify another user
930 name.
931
932 @end table
933
934 @node Multi-hop Methods
935 @section Connecting to a remote host using multiple hops
936 @cindex multi-hop methods
937 @cindex methods, multi-hop
938
939 Sometimes, the methods described before are not sufficient. Sometimes,
940 it is not possible to connect to a remote host using a simple command.
941 For example, if you are in a secured network, you might have to log in
942 to a `bastion host' first before you can connect to the outside world.
943 Of course, the target host may also require a bastion host. The format
944 of multi-hop filenames is slightly different than the format of normal
945 @value{tramp} methods.
946
947 @cindex method multi
948 @cindex multi method
949 A multi-hop file name specifies a method, a number of hops, and a
950 localname (path name on the remote system). The method name is always
951 @option{multi}.
952
953 Each hop consists of a @dfn{hop method} specification, a user name and
954 a host name. The hop method can be an inline method only. The
955 following hop methods are (currently) available:
956
957 @table @option
958 @item telnet
959 @cindex hop method telnet
960 @cindex telnet hop method
961
962 Uses the well-known @command{telnet} program to connect to the host.
963 Whereas user name and host name are supplied in the file name, the
964 user is queried for the password.
965
966 @item rsh
967 @cindex hop method rsh
968 @cindex rsh hop method
969
970 This uses @command{rsh} to connect to the host. You do not need to
971 enter a password unless @command{rsh} explicitly asks for it.
972
973 The variant @option{remsh} uses the @command{remsh} command. It
974 should be applied on machines where @command{remsh} is used instead of
975 @command{rsh}.
976
977 @item ssh
978 @cindex hop method ssh
979 @cindex ssh hop method
980
981 This uses @command{ssh} to connect to the host. You might have to enter
982 a password or a pass phrase.
983
984 @item su
985 @cindex hop method su
986 @cindex su hop method
987
988 This method does not actually contact a different host, but it allows
989 you to become a different user on the host you're currently on. This
990 might be useful if you want to edit files as root, but the remote host
991 does not allow remote root logins. In this case you can use
992 @option{telnet}, @option{rsh} or @option{ssh} to connect to the
993 remote host as a non-root user, then use an @option{su} hop to become
994 root. But @option{su} need not be the last hop in a sequence, you could
995 also use it somewhere in the middle, if the need arises.
996
997 Even though you @emph{must} specify both user and host with an
998 @option{su} hop, the host name is ignored and only the user name is
999 used.
1000
1001 @item sudo
1002 @cindex hop method sudo
1003 @cindex sudo hop method
1004
1005 This is similar to the @option{su} hop, except that it uses
1006 @command{sudo} rather than @command{su} to become a different user.
1007
1008 @end table
1009
1010 Some people might wish to use port forwarding with @command{ssh} or
1011 maybe they have to use a nonstandard port. This can be accomplished
1012 by putting a stanza in @file{~/.ssh/config} for the account which
1013 specifies a different port number for a certain host name. But it can
1014 also be accomplished within @value{tramp}, by adding a multi-hop method.
1015 For example:
1016
1017 @lisp
1018 (add-to-list
1019 'tramp-multi-connection-function-alist
1020 '("sshf" tramp-multi-connect-rlogin "ssh %h -l %u -p 4400%n"))
1021 @end lisp
1022
1023 Now you can use an @option{sshf} hop which connects to port 4400 instead of
1024 the standard port.
1025
1026
1027 @node Default Method
1028 @section Selecting a default method
1029 @cindex default method
1030
1031 @vindex tramp-default-method
1032 When you select an appropriate transfer method for your typical usage
1033 you should set the variable @code{tramp-default-method} to reflect that
1034 choice. This variable controls which method will be used when a method
1035 is not specified in the @value{tramp} file name. For example:
1036
1037 @lisp
1038 (setq tramp-default-method "ssh")
1039 @end lisp
1040
1041 @vindex tramp-default-method-alist
1042 You can also specify different methods for certain user/host
1043 combinations, via the variable @code{tramp-default-method-alist}. For
1044 example, the following two lines specify to use the @option{ssh}
1045 method for all user names matching @samp{john} and the @option{rsync}
1046 method for all host names matching @samp{lily}. The third line
1047 specifies to use the @option{su} method for the user @samp{root} on
1048 the machine @samp{localhost}.
1049
1050 @lisp
1051 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1052 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1053 (add-to-list 'tramp-default-method-alist
1054 '("\\`localhost\\'" "\\`root\\'" "su"))
1055 @end lisp
1056
1057 @noindent
1058 See the documentation for the variable
1059 @code{tramp-default-method-alist} for more details.
1060
1061 External transfer methods are normally preferable to inline transfer
1062 methods, giving better performance.
1063
1064 @xref{Inline methods}.
1065 @xref{External transfer methods}.
1066 @xref{Multi-hop Methods}.
1067
1068 Another consideration with the selection of transfer methods is the
1069 environment you will use them in and, especially when used over the
1070 Internet, the security implications of your preferred method.
1071
1072 The @option{rsh} and @option{telnet} methods send your password as
1073 plain text as you log in to the remote machine, as well as
1074 transferring the files in such a way that the content can easily be
1075 read from other machines.
1076
1077 If you need to connect to remote systems that are accessible from the
1078 Internet, you should give serious thought to using @option{ssh} based
1079 methods to connect. These provide a much higher level of security,
1080 making it a non-trivial exercise for someone to obtain your password
1081 or read the content of the files you are editing.
1082
1083
1084 @subsection Which method is the right one for me?
1085 @cindex choosing the right method
1086
1087 Given all of the above, you are probably thinking that this is all fine
1088 and good, but it's not helping you to choose a method! Right you are.
1089 As a developer, we don't want to boss our users around but give them
1090 maximum freedom instead. However, the reality is that some users would
1091 like to have some guidance, so here I'll try to give you this guidance
1092 without bossing you around. You tell me whether it works @dots{}
1093
1094 My suggestion is to use an inline method. For large files, out-of-band
1095 methods might be more efficient, but I guess that most people will want
1096 to edit mostly small files.
1097
1098 I guess that these days, most people can access a remote machine by
1099 using @command{ssh}. So I suggest that you use the @option{ssh}
1100 method. So, type @kbd{C-x C-f
1101 @value{prefix}ssh@value{postfixsinglehop}root@@otherhost@value{postfix}/etc/motd
1102 @key{RET}} to edit the @file{/etc/motd} file on the other host.
1103
1104 If you can't use @option{ssh} to log in to the remote host, then
1105 select a method that uses a program that works. For instance, Windows
1106 users might like the @option{plink} method which uses the PuTTY
1107 implementation of @command{ssh}. Or you use Kerberos and thus like
1108 @option{krlogin}.
1109
1110 For the special case of editing files on the local host as another
1111 user, see the @option{su} or @option{sudo} methods. They offer
1112 shortened syntax for the @samp{root} account, like
1113 @file{@value{prefix}su@value{postfixsinglehop}@value{postfix}/etc/motd}.
1114
1115 People who edit large files may want to consider @option{scp} instead
1116 of @option{ssh}, or @option{pscp} instead of @option{plink}. These
1117 out-of-band methods are faster than inline methods for large files.
1118 Note, however, that out-of-band methods suffer from some limitations.
1119 Please try first whether you really get a noticeable speed advantage
1120 from using an out-of-band method! Maybe even for large files, inline
1121 methods are fast enough.
1122
1123
1124 @node Customizing Methods
1125 @section Using Non-Standard Methods
1126 @cindex customizing methods
1127 @cindex using non-standard methods
1128 @cindex create your own methods
1129
1130 There is a variable @code{tramp-methods} which you can change if the
1131 predefined methods don't seem right.
1132
1133 For the time being, I'll refer you to the Lisp documentation of that
1134 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1135
1136
1137 @node Customizing Completion
1138 @section Selecting config files for user/host name completion
1139 @cindex customizing completion
1140 @cindex selecting config files
1141 @vindex tramp-completion-function-alist
1142
1143 The variable @code{tramp-completion-function-alist} is intended to
1144 customize which files are taken into account for user and host name
1145 completion (@pxref{Filename completion}). For every method, it keeps
1146 a set of configuration files, accompanied by a Lisp function able to
1147 parse that file. Entries in @code{tramp-completion-function-alist}
1148 have the form (@var{method} @var{pair1} @var{pair2} ...).
1149
1150 Each @var{pair} is composed of (@var{function} @var{file}).
1151 @var{function} is responsible to extract user names and host names
1152 from @var{file} for completion. There are two functions which access
1153 this variable:
1154
1155 @defun tramp-get-completion-function method
1156 This function returns the list of completion functions for @var{method}.
1157
1158 Example:
1159 @example
1160 (tramp-get-completion-function "rsh")
1161
1162 @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1163 (tramp-parse-rhosts "~/.rhosts"))
1164 @end example
1165 @end defun
1166
1167 @defun tramp-set-completion-function method function-list
1168 This function sets @var{function-list} as list of completion functions
1169 for @var{method}.
1170
1171 Example:
1172 @example
1173 (tramp-set-completion-function "ssh"
1174 '((tramp-parse-sconfig "/etc/ssh_config")
1175 (tramp-parse-sconfig "~/.ssh/config")))
1176
1177 @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1178 (tramp-parse-sconfig "~/.ssh/config"))
1179 @end example
1180 @end defun
1181
1182 The following predefined functions parsing configuration files exist:
1183
1184 @table @asis
1185 @item @code{tramp-parse-rhosts}
1186 @findex tramp-parse-rhosts
1187
1188 This function parses files which are syntactical equivalent to
1189 @file{~/.rhosts}. It returns both host names and user names, if
1190 specified.
1191
1192 @item @code{tramp-parse-shosts}
1193 @findex tramp-parse-shosts
1194
1195 This function parses files which are syntactical equivalent to
1196 @file{~/.ssh/known_hosts}. Since there are no user names specified
1197 in such files, it can return host names only.
1198
1199 @item @code{tramp-parse-sconfig}
1200 @findex tramp-parse-shosts
1201
1202 This function returns the host nicknames defined by @code{Host} entries
1203 in @file{~/.ssh/config} style files.
1204
1205 @item @code{tramp-parse-shostkeys}
1206 @findex tramp-parse-shostkeys
1207
1208 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1209 @file{~/ssh2/hostkeys/*}. Hosts are coded in file names
1210 @file{hostkey_@var{portnumber}_@var{host-name}.pub}. User names
1211 are always @code{nil}.
1212
1213 @item @code{tramp-parse-sknownhosts}
1214 @findex tramp-parse-shostkeys
1215
1216 Another SSH2 style parsing of directories like
1217 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}. This
1218 case, hosts names are coded in file names
1219 @file{@var{host-name}.@var{algorithm}.pub}. User names are always @code{nil}.
1220
1221 @item @code{tramp-parse-hosts}
1222 @findex tramp-parse-hosts
1223
1224 A function dedicated to @file{/etc/hosts} style files. It returns
1225 host names only.
1226
1227 @item @code{tramp-parse-passwd}
1228 @findex tramp-parse-passwd
1229
1230 A function which parses @file{/etc/passwd} like files. Obviously, it
1231 can return user names only.
1232
1233 @item @code{tramp-parse-netrc}
1234 @findex tramp-parse-netrc
1235
1236 Finally, a function which parses @file{~/.netrc} like files.
1237 @end table
1238
1239 If you want to keep your own data in a file, with your own structure,
1240 you might provide such a function as well. This function must meet
1241 the following conventions:
1242
1243 @defun my-tramp-parse file
1244 @var{file} must be either a file name on your host, or @code{nil}. The
1245 function must return a list of (@var{user} @var{host}), which are
1246 taken as candidates for user and host name completion.
1247
1248 Example:
1249 @example
1250 (my-tramp-parse "~/.my-tramp-hosts")
1251
1252 @result{} ((nil "toto") ("daniel" "melancholia"))
1253 @end example
1254 @end defun
1255
1256
1257 @node Password caching
1258 @section Reusing passwords for several connections.
1259 @cindex passwords
1260
1261 Sometimes it is necessary to connect to the same remote host several
1262 times. Reentering passwords again and again would be annoying, when
1263 the chosen method does not support access without password prompt
1264 through own configuration.
1265
1266 By default, @value{tramp} caches the passwords entered by you. They will
1267 be reused next time if a connection needs them for the same user name
1268 and host name, independently of the connection method.
1269
1270 @vindex password-cache-expiry
1271 Passwords are not saved permanently, that means the password caching
1272 is limited to the lifetime of your @value{emacsname} session. You
1273 can influence the lifetime of password caching by customizing the
1274 variable @code{password-cache-expiry}. The value is the number of
1275 seconds how long passwords are cached. Setting it to @code{nil}
1276 disables the expiration.
1277
1278 @findex tramp-clear-passwd
1279 A password is removed from the cache if a connection isn't established
1280 successfully. You can remove a password from the cache also by
1281 executing @kbd{M-x tramp-clear-passwd} in a buffer containing a
1282 related remote file or directory.
1283
1284 @vindex password-cache
1285 If you don't like this feature for security reasons, password caching
1286 can be disabled totally by customizing the variable
1287 @code{password-cache} (setting it to @code{nil}).
1288
1289 Implementation Note: password caching is based on the package
1290 password.el in No Gnus. For the time being, it is activated only when
1291 this package is seen in the @code{load-path} while loading @value{tramp}.
1292 @ifset installchapter
1293 If you don't use No Gnus, you can take password.el from the @value{tramp}
1294 @file{contrib} directory, see @ref{Installation parameters}.
1295 @end ifset
1296 It will be activated mandatory once No Gnus has found its way into
1297 @value{emacsname}.
1298
1299
1300 @node Remote Programs
1301 @section How @value{tramp} finds and uses programs on the remote machine.
1302
1303 @value{tramp} depends on a number of programs on the remote host in order to
1304 function, including @command{ls}, @command{test}, @command{find} and
1305 @command{cat}.
1306
1307 In addition to these required tools, there are various tools that may be
1308 required based on the connection method. See @ref{Inline methods} and
1309 @ref{External transfer methods} for details on these.
1310
1311 Certain other tools, such as @command{perl} (or @command{perl5}) and
1312 @command{grep} will be used if they can be found. When they are
1313 available, they are used to improve the performance and accuracy of
1314 remote file access.
1315
1316 @vindex tramp-remote-path
1317 When @value{tramp} connects to the remote machine, it searches for the
1318 programs that it can use. The variable @var{tramp-remote-path} controls
1319 the directories searched on the remote machine.
1320
1321 By default, this is set to a reasonable set of defaults for most
1322 machines. It is possible, however, that your local (or remote ;) system
1323 administrator has put the tools you want in some obscure local
1324 directory.
1325
1326 In this case, you can still use them with @value{tramp}. You simply need to
1327 add code to your @file{.emacs} to add the directory to the remote path.
1328 This will then be searched by @value{tramp} when you connect and the software
1329 found.
1330
1331 To add a directory to the remote search path, you could use code such
1332 as:
1333
1334 @lisp
1335 @i{;; We load @value{tramp} to define the variable.}
1336 (require 'tramp)
1337 @i{;; We have @command{perl} in "/usr/local/perl/bin"}
1338 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1339 @end lisp
1340
1341
1342 @node Remote shell setup
1343 @comment node-name, next, previous, up
1344 @section Remote shell setup hints
1345 @cindex remote shell setup
1346 @cindex @file{.profile} file
1347 @cindex @file{.login} file
1348 @cindex shell init files
1349
1350 As explained in the @ref{Overview} section, @value{tramp} connects to the
1351 remote host and talks to the shell it finds there. Of course, when you
1352 log in, the shell executes its init files. Suppose your init file
1353 requires you to enter the birth date of your mother; clearly @value{tramp}
1354 does not know this and hence fails to log you in to that host.
1355
1356 There are different possible strategies for pursuing this problem. One
1357 strategy is to enable @value{tramp} to deal with all possible situations.
1358 This is a losing battle, since it is not possible to deal with
1359 @emph{all} situations. The other strategy is to require you to set up
1360 the remote host such that it behaves like @value{tramp} expects. This might
1361 be inconvenient because you have to invest a lot of effort into shell
1362 setup before you can begin to use @value{tramp}.
1363
1364 The package, therefore, pursues a combined approach. It tries to
1365 figure out some of the more common setups, and only requires you to
1366 avoid really exotic stuff. For example, it looks through a list of
1367 directories to find some programs on the remote host. And also, it
1368 knows that it is not obvious how to check whether a file exists, and
1369 therefore it tries different possibilities. (On some hosts and
1370 shells, the command @command{test -e} does the trick, on some hosts
1371 the shell builtin doesn't work but the program @command{/usr/bin/test
1372 -e} or @command{/bin/test -e} works. And on still other hosts,
1373 @command{ls -d} is the right way to do this.)
1374
1375 Below you find a discussion of a few things that @value{tramp} does not deal
1376 with, and that you therefore have to set up correctly.
1377
1378 @table @asis
1379 @item @var{shell-prompt-pattern}
1380 @vindex shell-prompt-pattern
1381
1382 After logging in to the remote host, @value{tramp} has to wait for the remote
1383 shell startup to finish before it can send commands to the remote
1384 shell. The strategy here is to wait for the shell prompt. In order to
1385 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
1386 to be set correctly to recognize the shell prompt on the remote host.
1387
1388 Note that @value{tramp} requires the match for @code{shell-prompt-pattern}
1389 to be at the end of the buffer. Many people have something like the
1390 following as the value for the variable: @code{"^[^>$][>$] *"}. Now
1391 suppose your shell prompt is @code{a <b> c $ }. In this case,
1392 @value{tramp} recognizes the @code{>} character as the end of the prompt,
1393 but it is not at the end of the buffer.
1394
1395 @item @var{tramp-shell-prompt-pattern}
1396 @vindex tramp-shell-prompt-pattern
1397
1398 This regular expression is used by @value{tramp} in the same way as
1399 @code{shell-prompt-pattern}, to match prompts from the remote shell.
1400 This second variable exists because the prompt from the remote shell
1401 might be different from the prompt from a local shell --- after all,
1402 the whole point of @value{tramp} is to log in to remote hosts as a
1403 different user. The default value of
1404 @code{tramp-shell-prompt-pattern} is the same as the default value of
1405 @code{shell-prompt-pattern}, which is reported to work well in many
1406 circumstances.
1407
1408 @item @command{tset} and other questions
1409 @cindex Unix command tset
1410 @cindex tset Unix command
1411
1412 Some people invoke the @command{tset} program from their shell startup
1413 scripts which asks the user about the terminal type of the shell.
1414 Maybe some shells ask other questions when they are started. @value{tramp}
1415 does not know how to answer these questions. There are two approaches
1416 for dealing with this problem. One approach is to take care that the
1417 shell does not ask any questions when invoked from @value{tramp}. You can
1418 do this by checking the @code{TERM} environment variable, it will be
1419 set to @code{dumb} when connecting.
1420
1421 @vindex tramp-terminal-type
1422 The variable @code{tramp-terminal-type} can be used to change this value
1423 to @code{dumb}.
1424
1425 The other approach is to teach @value{tramp} about these questions. See
1426 the variables @code{tramp-actions-before-shell} and
1427 @code{tramp-multi-actions} (for multi-hop connections).
1428
1429
1430 @item Environment variables named like users in @file{.profile}
1431
1432 If you have a user named frumple and set the variable @code{FRUMPLE} in
1433 your shell environment, then this might cause trouble. Maybe rename
1434 the variable to @code{FRUMPLE_DIR} or the like.
1435
1436 This weird effect was actually reported by a @value{tramp} user!
1437
1438
1439 @item Non-Bourne commands in @file{.profile}
1440
1441 After logging in to the remote host, @value{tramp} issues the command
1442 @command{exec /bin/sh}. (Actually, the command is slightly
1443 different.) When @command{/bin/sh} is executed, it reads some init
1444 files, such as @file{~/.shrc} or @file{~/.profile}.
1445
1446 Now, some people have a login shell which is not @code{/bin/sh} but a
1447 Bourne-ish shell such as bash or ksh. Some of these people might put
1448 their shell setup into the files @file{~/.shrc} or @file{~/.profile}.
1449 This way, it is possible for non-Bourne constructs to end up in those
1450 files. Then, @command{exec /bin/sh} might cause the Bourne shell to
1451 barf on those constructs.
1452
1453 As an example, imagine somebody putting @command{export FOO=bar} into
1454 the file @file{~/.profile}. The standard Bourne shell does not
1455 understand this syntax and will emit a syntax error when it reaches
1456 this line.
1457
1458 Another example is the tilde (@code{~}) character, say when adding
1459 @file{~/bin} to @code{$PATH}. Many Bourne shells will not expand this
1460 character, and since there is usually no directory whose name consists
1461 of the single character tilde, strange things will happen.
1462
1463 What can you do about this?
1464
1465 Well, one possibility is to make sure that everything in @file{~/.shrc}
1466 and @file{~/.profile} on all remote hosts is Bourne-compatible. In the
1467 above example, instead of @command{export FOO=bar}, you might use
1468 @command{FOO=bar; export FOO} instead.
1469
1470 The other possibility is to put your non-Bourne shell setup into some
1471 other files. For example, bash reads the file @file{~/.bash_profile}
1472 instead of @file{~/.profile}, if the former exists. So bash
1473 aficionados just rename their @file{~/.profile} to
1474 @file{~/.bash_profile} on all remote hosts, and Bob's your uncle.
1475
1476 The @value{tramp} developers would like to circumvent this problem, so
1477 if you have an idea about it, please tell us. However, we are afraid
1478 it is not that simple: before saying @command{exec /bin/sh},
1479 @value{tramp} does not know which kind of shell it might be talking
1480 to. It could be a Bourne-ish shell like ksh or bash, or it could be a
1481 csh derivative like tcsh, or it could be zsh, or even rc. If the
1482 shell is Bourne-ish already, then it might be prudent to omit the
1483 @command{exec /bin/sh} step. But how to find out if the shell is
1484 Bourne-ish?
1485
1486 @end table
1487
1488
1489 @node Auto-save and Backup
1490 @section Auto-save and Backup configuration
1491 @cindex auto-save
1492 @cindex backup
1493 @ifset emacs
1494 @vindex backup-directory-alist
1495 @end ifset
1496 @ifset xemacs
1497 @vindex bkup-backup-directory-info
1498 @end ifset
1499
1500 Normally, @value{emacsname} writes backup files to the same directory
1501 as the original files, but this behavior can be changed via the
1502 variable
1503 @ifset emacs
1504 @code{backup-directory-alist}.
1505 @end ifset
1506 @ifset xemacs
1507 @code{bkup-backup-directory-info}.
1508 @end ifset
1509 In connection with @value{tramp}, this can have unexpected side effects.
1510 Suppose that you specify that all backups should go to the directory
1511 @file{~/.emacs.d/backups/}, and then you edit the file
1512 @file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}/etc/secretfile}.
1513 The effect is that the backup file will be owned by you and not by
1514 root, thus possibly enabling others to see it even if they were not
1515 intended to see it.
1516
1517 When
1518 @ifset emacs
1519 @code{backup-directory-alist}
1520 @end ifset
1521 @ifset xemacs
1522 @code{bkup-backup-directory-info}
1523 @end ifset
1524 is @code{nil} (the default), such problems do not occur.
1525
1526 Therefore, it is useful to set special values for @value{tramp}
1527 files. For example, the following statement effectively `turns off'
1528 the effect of
1529 @ifset emacs
1530 @code{backup-directory-alist}
1531 @end ifset
1532 @ifset xemacs
1533 @code{bkup-backup-directory-info}
1534 @end ifset
1535 for @value{tramp} files:
1536
1537 @ifset emacs
1538 @lisp
1539 (add-to-list 'backup-directory-alist
1540 (cons tramp-file-name-regexp nil))
1541 @end lisp
1542 @end ifset
1543 @ifset xemacs
1544 @lisp
1545 (require 'backup-dir)
1546 (add-to-list 'bkup-backup-directory-info
1547 (list tramp-file-name-regexp ""))
1548 @end lisp
1549 @end ifset
1550
1551 Another possibility is to use the @value{tramp} variable
1552 @ifset emacs
1553 @code{tramp-backup-directory-alist}.
1554 @end ifset
1555 @ifset xemacs
1556 @code{tramp-bkup-backup-directory-info}.
1557 @end ifset
1558 This variable has the same meaning like
1559 @ifset emacs
1560 @code{backup-directory-alist}.
1561 @end ifset
1562 @ifset xemacs
1563 @code{bkup-backup-directory-info}.
1564 @end ifset
1565 If a @value{tramp} file is backed up, and DIRECTORY is an absolute
1566 local file name, DIRECTORY is prepended with the @value{tramp} file
1567 name prefix of the file to be backed up.
1568
1569 @noindent
1570 Example:
1571
1572 @ifset emacs
1573 @lisp
1574 (add-to-list 'backup-directory-alist
1575 (cons "." "~/.emacs.d/backups/"))
1576 (setq tramp-backup-directory-alist backup-directory-alist)
1577 @end lisp
1578 @end ifset
1579 @ifset xemacs
1580 @lisp
1581 (require 'backup-dir)
1582 (add-to-list 'bkup-backup-directory-info
1583 (list "." "~/.emacs.d/backups/" 'full-path))
1584 (setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
1585 @end lisp
1586 @end ifset
1587
1588 @noindent
1589 The backup file name of
1590 @file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}/etc/secretfile}
1591 would be
1592 @ifset emacs
1593 @file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}
1594 @end ifset
1595 @ifset xemacs
1596 @file{@value{prefix}su@value{postfixsinglehop}root@@localhost@value{postfix}~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}
1597 @end ifset
1598
1599 The same problem can happen with auto-saving files.
1600 @ifset emacs
1601 Since @value{emacsname} 21, the variable
1602 @code{auto-save-file-name-transforms} keeps information, on which
1603 directory an auto-saved file should go. By default, it is initialized
1604 for @value{tramp} files to the local temporary directory.
1605
1606 On some versions of @value{emacsname}, namely the version built for
1607 Debian GNU/Linux, the variable @code{auto-save-file-name-transforms}
1608 contains the directory where @value{emacsname} was built. A
1609 workaround is to manually set the variable to a sane value.
1610
1611 If auto-saved files should go into the same directory as the original
1612 files, @code{auto-save-file-name-transforms} should be set to @code{nil}.
1613
1614 Another possibility is to set the variable
1615 @code{tramp-auto-save-directory} to a proper value.
1616 @end ifset
1617 @ifset xemacs
1618 For this purpose you can set the variable @code{auto-save-directory}
1619 to a proper value.
1620 @end ifset
1621
1622
1623 @node Windows setup hints
1624 @section Issues with Cygwin ssh
1625 @cindex Cygwin, issues
1626
1627 This section needs a lot of work! Please help.
1628
1629 @cindex method sshx with Cygwin
1630 @cindex sshx method with Cygwin
1631 The recent Cygwin installation of @command{ssh} works only with a
1632 Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x
1633 eshell}, and starting @kbd{ssh test.machine}. The problem is evident
1634 if you see a message like this:
1635
1636 @example
1637 Pseudo-terminal will not be allocated because stdin is not a terminal.
1638 @end example
1639
1640 Older @command{ssh} versions of Cygwin are told to cooperate with
1641 @value{tramp} selecting @option{sshx} as the connection method. You
1642 can find information about setting up Cygwin in their FAQ at
1643 @uref{http://cygwin.com/faq/}.
1644
1645 @cindex method scpx with Cygwin
1646 @cindex scpx method with Cygwin
1647 If you wish to use the @option{scpx} connection method, then you might
1648 have the problem that @value{emacsname} calls @command{scp} with a
1649 Windows filename such as @code{c:/foo}. The Cygwin version of
1650 @command{scp} does not know about Windows filenames and interprets this
1651 as a remote filename on the host @code{c}.
1652
1653 One possible workaround is to write a wrapper script for @option{scp}
1654 which converts the Windows filename to a Cygwinized filename.
1655
1656 @cindex Cygwin and ssh-agent
1657 @cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
1658 If you want to use either @option{ssh} based method on Windows, then
1659 you might encounter problems with @command{ssh-agent}. Using this
1660 program, you can avoid typing the pass-phrase every time you log in.
1661 However, if you start @value{emacsname} from a desktop shortcut, then
1662 the environment variable @code{SSH_AUTH_SOCK} is not set and so
1663 @value{emacsname} and thus @value{tramp} and thus @command{ssh} and
1664 @command{scp} started from @value{tramp} cannot communicate with
1665 @command{ssh-agent}. It works better to start @value{emacsname} from
1666 the shell.
1667
1668 If anyone knows how to start @command{ssh-agent} under Windows in such a
1669 way that desktop shortcuts can profit, please holler. I don't really
1670 know anything at all about Windows@dots{}
1671
1672
1673 @node Usage
1674 @chapter Using @value{tramp}
1675 @cindex using @value{tramp}
1676
1677 Once you have installed @value{tramp} it will operate fairly transparently. You
1678 will be able to access files on any remote machine that you can log in
1679 to as though they were local.
1680
1681 Files are specified to @value{tramp} using a formalized syntax specifying the
1682 details of the system to connect to. This is similar to the syntax used
1683 by the @value{ftppackagename} package.
1684
1685 @cindex type-ahead
1686 Something that might happen which surprises you is that
1687 @value{emacsname} remembers all your keystrokes, so if you see a
1688 password prompt from @value{emacsname}, say, and hit @kbd{@key{RET}}
1689 twice instead of once, then the second keystroke will be processed by
1690 @value{emacsname} after @value{tramp} has done its thing. Why, this
1691 type-ahead is normal behavior, you say. Right you are, but be aware
1692 that opening a remote file might take quite a while, maybe half a
1693 minute when a connection needs to be opened. Maybe after half a
1694 minute you have already forgotten that you hit that key!
1695
1696 @menu
1697 * Filename Syntax:: @value{tramp} filename conventions.
1698 * Multi-hop filename syntax:: Multi-hop filename conventions.
1699 * Filename completion:: Filename completion.
1700 * Dired:: Dired.
1701 * Compilation:: Compile remote files.
1702 @end menu
1703
1704
1705 @node Filename Syntax
1706 @section @value{tramp} filename conventions
1707 @cindex filename syntax
1708 @cindex filename examples
1709
1710 To access the file @var{localname} on the remote machine @var{machine} you
1711 would specify the filename
1712 @file{@value{prefix}@var{machine}@value{postfix}@var{localname}}.
1713 This will connect to @var{machine} and transfer the file using the
1714 default method. @xref{Default Method}.
1715
1716 Some examples of @value{tramp} filenames are shown below.
1717
1718 @table @file
1719 @item @value{prefix}melancholia@value{postfix}.emacs
1720 Edit the file @file{.emacs} in your home directory on the machine
1721 @code{melancholia}.
1722
1723 @item @value{prefix}melancholia.danann.net@value{postfix}.emacs
1724 This edits the same file, using the fully qualified domain name of
1725 the machine.
1726
1727 @item @value{prefix}melancholia@value{postfix}~/.emacs
1728 This also edits the same file --- the @file{~} is expanded to your
1729 home directory on the remote machine, just like it is locally.
1730
1731 @item @value{prefix}melancholia@value{postfix}~daniel/.emacs
1732 This edits the file @file{.emacs} in the home directory of the user
1733 @code{daniel} on the machine @code{melancholia}. The @file{~<user>}
1734 construct is expanded to the home directory of that user on the remote
1735 machine.
1736
1737 @item @value{prefix}melancholia@value{postfix}/etc/squid.conf
1738 This edits the file @file{/etc/squid.conf} on the machine
1739 @code{melancholia}.
1740
1741 @end table
1742
1743 Unless you specify a different name to use, @value{tramp} will use the
1744 current local user name as the remote user name to log in with. If you
1745 need to log in as a different user, you can specify the user name as
1746 part of the filename.
1747
1748 To log in to the remote machine as a specific user, you use the syntax
1749 @file{@value{prefix}@var{user}@@@var{machine}@value{postfix}/@var{path/to.file}}.
1750 That means that connecting to @code{melancholia} as @code{daniel} and
1751 editing @file{.emacs} in your home directory you would specify
1752 @file{@value{prefix}daniel@@melancholia@value{postfix}.emacs}.
1753
1754 It is also possible to specify other file transfer methods
1755 (@pxref{Default Method}) as part of the filename.
1756 @ifset emacs
1757 This is done by putting the method before the user and host name, as
1758 in
1759 @file{@value{prefix}@var{method}@value{postfixsinglehop}}
1760 (Note the trailing colon).
1761 @end ifset
1762 @ifset xemacs
1763 This is done by replacing the initial
1764 @file{@value{prefix}} with
1765 @file{@value{prefix}<method>@value{postfixsinglehop}}.
1766 (Note the trailing slash!).
1767 @end ifset
1768 The user, machine and file specification remain the same.
1769
1770 So, to connect to the machine @code{melancholia} as @code{daniel},
1771 using the @option{ssh} method to transfer files, and edit @file{.emacs}
1772 in my home directory I would specify the filename
1773 @file{@value{prefix}ssh@value{postfixsinglehop}daniel@@melancholia@value{postfix}.emacs}.
1774
1775
1776 @node Multi-hop filename syntax
1777 @section Multi-hop filename conventions
1778 @cindex filename syntax for multi-hop files
1779 @cindex multi-hop filename syntax
1780
1781 The syntax of multi-hop file names is necessarily slightly different
1782 than the syntax of other @value{tramp} file names. Here's an example
1783 multi-hop file name:
1784
1785 @example
1786 @value{prefix}multi@value{postfixsinglehop}rsh@value{postfixmultihop}out@@gate@value{postfixsinglehop}telnet@value{postfixmultihop}kai@@real.host@value{postfix}/path/to.file
1787 @end example
1788
1789 This is quite a mouthful. So let's go through it step by step. The
1790 file name consists of three parts.
1791 @ifset emacs
1792 The parts are separated by colons
1793 @end ifset
1794 @ifset xemacs
1795 The parts are separated by slashes and square brackets.
1796 @end ifset
1797 The first part is @file{@value{prefix}multi}, the method
1798 specification. The second part is
1799 @file{rsh@value{postfixmultihop}out@@gate@value{postfixsinglehop}telnet@value{postfixmultihop}kai@@real.host}
1800 and specifies the hops. The final part is @file{/path/to.file} and
1801 specifies the file name on the remote host.
1802
1803 The first part and the final part should be clear. See @ref{Multi-hop
1804 Methods}, for a list of alternatives for the method specification.
1805
1806 The second part can be subdivided again into components, so-called
1807 hops. In the above file name, there are two hops,
1808 @file{rsh@value{postfixmultihop}out@@gate} and
1809 @file{telnet@value{postfixmultihop}kai@@real.host}.
1810
1811 Each hop can @emph{again} be subdivided into (three) components, the
1812 @dfn{hop method}, the @dfn{user name} and the @dfn{host name}. The
1813 meaning of the second and third component should be clear, and the hop
1814 method says what program to use to perform that hop.
1815
1816 The first hop, @file{rsh@value{postfixmultihop}out@@gate},
1817 says to use @command{rsh} to log in as user @code{out} to the host
1818 @code{gate}. Starting at that host, the second hop,
1819 @file{telnet@value{postfixmultihop}kai@@real.host}, says to
1820 use @command{telnet} to log in as user @code{kai} to host
1821 @code{real.host}.
1822
1823 @xref{Multi-hop Methods}, for a list of possible hop method values.
1824 The variable @code{tramp-multi-connection-function-alist} contains the
1825 list of possible hop methods and information on how to execute them,
1826 should you want to add your own.
1827
1828
1829 @node Filename completion
1830 @section Filename completion
1831 @cindex filename completion
1832
1833 Filename completion works with @value{tramp} for completion of method
1834 names, of user names and of machine names (except multi-hop methods)
1835 as well as for completion of file names on remote machines.
1836 @ifset emacs
1837 In order to enable this, Partial Completion mode must be set on.
1838 @ifinfo
1839 @xref{Completion Options, , , @value{emacsdir}}.
1840 @end ifinfo
1841 @end ifset
1842
1843 If you, for example, type @kbd{C-x C-f @value{prefix}t
1844 @key{TAB}}, @value{tramp} might give you as result the choice for
1845
1846 @example
1847 @ifset emacs
1848 @value{prefixsinglehop}telnet@value{postfixsinglehop} tmp/
1849 @value{prefixsinglehop}toto@value{postfix}
1850 @end ifset
1851 @ifset xemacs
1852 @value{prefixsinglehop}telnet@value{postfixsinglehop} @value{prefixsinglehop}toto@value{postfix}
1853 @end ifset
1854 @end example
1855
1856 @samp{@value{prefixsinglehop}telnet@value{postfixsinglehop}}
1857 is a possible completion for the respective method,
1858 @ifset emacs
1859 @samp{tmp/} stands for the directory @file{/tmp} on your local
1860 machine,
1861 @end ifset
1862 and @samp{@value{prefixsinglehop}toto@value{postfix}}
1863 might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
1864 file (given you're using default method @option{ssh}).
1865
1866 If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
1867 @samp{@value{prefix}telnet@value{postfixsinglehop}}.
1868 Next @kbd{@key{TAB}} brings you all machine names @value{tramp} detects in
1869 your @file{/etc/hosts} file, let's say
1870
1871 @example
1872 @value{prefixsinglehop}telnet@value{postfixsinglehop}127.0.0.1@value{postfix} @value{prefixsinglehop}telnet@value{postfixsinglehop}192.168.0.1@value{postfix}
1873 @value{prefixsinglehop}telnet@value{postfixsinglehop}localhost@value{postfix} @value{prefixsinglehop}telnet@value{postfixsinglehop}melancholia.danann.net@value{postfix}
1874 @value{prefixsinglehop}telnet@value{postfixsinglehop}melancholia@value{postfix}
1875 @end example
1876
1877 Now you can choose the desired machine, and you can continue to
1878 complete file names on that machine.
1879
1880 As filename completion needs to fetch the listing of files from the
1881 remote machine, this feature is sometimes fairly slow. As @value{tramp}
1882 does not yet cache the results of directory listing, there is no gain
1883 in performance the second time you complete filenames.
1884
1885 If the configuration files (@pxref{Customizing Completion}), which
1886 @value{tramp} uses for analysis of completion, offer user names, those user
1887 names will be taken into account as well.
1888
1889
1890 @node Dired
1891 @section Dired
1892 @cindex dired
1893
1894 @value{tramp} works transparently with dired, enabling you to use this powerful
1895 file management tool to manage files on any machine you have access to
1896 over the Internet.
1897
1898 If you need to browse a directory tree, Dired is a better choice, at
1899 present, than filename completion. Dired has its own cache mechanism
1900 and will only fetch the directory listing once.
1901
1902
1903 @node Compilation
1904 @section Compile remote files
1905 @cindex compile
1906 @cindex recompile
1907
1908 @value{tramp} provides commands for compilation of files on remote
1909 machines. In order to get them loaded, you need to require
1910 @file{tramp-util.el}:
1911
1912 @lisp
1913 (require 'tramp-util)
1914 @end lisp
1915
1916 Afterwards, you can use the commands @code{tramp-compile} and
1917 @code{tramp-recompile} instead of @code{compile} and @code{recompile},
1918 respectively; @inforef{Compilation, ,@value{emacsdir}}. This does not
1919 work for the @option{ftp} and @option{smb} methods.
1920
1921 The corresponding key bindings and menu entries calling these commands
1922 are redefined automatically for buffers associated with remote files.
1923
1924 After finishing the compilation, you can use the usual commands like
1925 @code{previous-error}, @code{next-error} and @code{first-error} for
1926 navigation in the @file{*Compilation*} buffer.
1927
1928
1929 @node Bug Reports
1930 @chapter Reporting Bugs and Problems
1931 @cindex bug reports
1932
1933 Bugs and problems with @value{tramp} are actively worked on by the
1934 development team. Feature requests and suggestions are also more than
1935 welcome.
1936
1937 The @value{tramp} mailing list is a great place to get information on
1938 working with @value{tramp}, solving problems and general discussion
1939 and advice on topics relating to the package. It is moderated so
1940 non-subscribers can post but messages will be delayed, possibly up to
1941 48 hours (or longer in case of holidays), until the moderator approves
1942 your message.
1943
1944 The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
1945 this address go to all the subscribers. This is @emph{not} the address
1946 to send subscription requests to.
1947
1948 Subscribing to the list is performed via
1949 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/,
1950 the @value{tramp} Mail Subscription Page}.
1951
1952 To report a bug in @value{tramp}, you should execute @kbd{M-x tramp-bug}. This
1953 will automatically generate a buffer with the details of your system and
1954 @value{tramp} version.
1955
1956 When submitting a bug report, please try to describe in excruciating
1957 detail the steps required to reproduce the problem, the setup of the
1958 remote machine and any special conditions that exist. You should also
1959 check that your problem is not described already in @xref{Frequently
1960 Asked Questions}.
1961
1962 If you can identify a minimal test case that reproduces the problem,
1963 include that with your bug report. This will make it much easier for the
1964 development team to analyze and correct the problem.
1965
1966 @node Frequently Asked Questions
1967 @chapter Frequently Asked Questions
1968 @cindex frequently asked questions
1969 @cindex FAQ
1970
1971 @itemize @bullet
1972 @item
1973 Where can I get the latest @value{tramp}?
1974
1975 @value{tramp} is available under the URL below.
1976
1977 @noindent
1978 @uref{ftp://ftp.gnu.org/gnu/tramp/}
1979
1980 @noindent
1981 There is also a Savannah project page.
1982
1983 @noindent
1984 @uref{http://savannah.gnu.org/projects/tramp/}
1985
1986
1987 @item
1988 Which systems does it work on?
1989
1990 The package has been used successfully on GNU Emacs 20, GNU Emacs 21
1991 and GNU Emacs 22, as well as XEmacs 21. XEmacs 20 is more
1992 problematic, see the notes in @file{tramp.el}. I don't think anybody
1993 has really tried it on GNU Emacs 19.
1994
1995 The package was intended to work on Unix, and it really expects a
1996 Unix-like system on the remote end (except the @option{smb} method),
1997 but some people seemed to have some success getting it to work on MS
1998 Windows NT/2000/XP @value{emacsname}.
1999
2000 There is some informations on @value{tramp} on NT at the following URL;
2001 many thanks to Joe Stoy for providing the information:
2002 @uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
2003
2004 @c The link is broken. I've contacted Tom for clarification. Michael.
2005 @ignore
2006 The above mostly contains patches to old ssh versions; Tom Roche has a
2007 Web page with instructions:
2008 @uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
2009 @end ignore
2010
2011
2012 @item
2013 @value{tramp} does not connect to the remote host
2014
2015 When @value{tramp} does not connect to the remote host, there are two
2016 reasons heading the bug mailing list:
2017
2018 @itemize @minus
2019
2020 @item
2021 Unknown characters in the prompt
2022
2023 @value{tramp} needs to recognize the prompt on the remote machine
2024 after execution any command. This is not possible, when the prompt
2025 contains unknown characters like escape sequences for coloring. This
2026 should be avoided on the remote side. @xref{Remote shell setup}. for
2027 setting the regular expression detecting the prompt.
2028
2029 A special problem is the zsh, which uses left-hand side and right-hand
2030 side prompts in parallel. Therefore, it is necessary to disable the
2031 zsh line editor on the remote host. You shall add to @file{~/.zshrc}
2032 the following command: @command{[ $TERM = "dumb" ] && unsetopt zle}.
2033
2034 @item
2035 @value{tramp} doesn't transfer strings with more than 500 characters
2036 correctly
2037
2038 On some few systems, the implementation of @code{process-send-string}
2039 seems to be broken for longer strings. This case, you should
2040 customize the variable @code{tramp-chunksize} to 500. For a
2041 description how to determine whether this is necessary see the
2042 documentation of @code{tramp-chunksize}.
2043 @end itemize
2044
2045
2046 @item
2047 File name completion does not work with @value{tramp}
2048
2049 When you log in to the remote machine, do you see the output of
2050 @command{ls} in color? If so, this may be the cause of your problems.
2051
2052 @command{ls} outputs @acronym{ANSI} escape sequences that your terminal
2053 emulator interprets to set the colors. These escape sequences will
2054 confuse @value{tramp} however.
2055
2056 In your @file{.bashrc}, @file{.profile} or equivalent on the remote
2057 machine you probably have an alias configured that adds the option
2058 @option{--color=yes} or @option{--color=auto}.
2059
2060 You should remove that alias and ensure that a new login @emph{does not}
2061 display the output of @command{ls} in color. If you still cannot use
2062 filename completion, report a bug to the @value{tramp} developers.
2063
2064
2065 @item
2066 File name completion does not work in large directories
2067
2068 @value{tramp} uses globbing for some operations. (Globbing means to use the
2069 shell to expand wildcards such as `*.c'.) This might create long
2070 command lines, especially in directories with many files. Some shells
2071 choke on long command lines, or don't cope well with the globbing
2072 itself.
2073
2074 If you have a large directory on the remote end, you may wish to execute
2075 a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
2076 Note that you must first start the right shell, which might be
2077 @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
2078 of those supports tilde expansion.
2079
2080
2081 @item
2082 How can I get notified when @value{tramp} file transfers are complete?
2083
2084 The following snippet can be put in your @file{~/.emacs} file. It
2085 makes @value{emacsname} beep after reading from or writing to the
2086 remote host.
2087
2088 @lisp
2089 (defadvice tramp-handle-write-region
2090 (after tramp-write-beep-advice activate)
2091 " make tramp beep after writing a file."
2092 (interactive)
2093 (beep))
2094 (defadvice tramp-handle-do-copy-or-rename-file
2095 (after tramp-copy-beep-advice activate)
2096 " make tramp beep after copying a file."
2097 (interactive)
2098 (beep))
2099 (defadvice tramp-handle-insert-file-contents
2100 (after tramp-copy-beep-advice activate)
2101 " make tramp beep after copying a file."
2102 (interactive)
2103 (beep))
2104 @end lisp
2105
2106
2107 @item
2108 There's this @file{~/.sh_history} file on the remote host which keeps
2109 growing and growing. What's that?
2110
2111 Sometimes, @value{tramp} starts @command{ksh} on the remote host for
2112 tilde expansion. Maybe @command{ksh} saves the history by default.
2113 @value{tramp} tries to turn off saving the history, but maybe you have
2114 to help. For example, you could put this in your @file{.kshrc}:
2115
2116 @example
2117 if [ -f $HOME/.sh_history ] ; then
2118 /bin/rm $HOME/.sh_history
2119 fi
2120 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
2121 unset HISTFILE
2122 fi
2123 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
2124 unset HISTSIZE
2125 fi
2126 @end example
2127
2128
2129 @item
2130 How can I disable @value{tramp}?
2131
2132 Shame on you, why did you read until now?
2133
2134 @ifset emacs
2135 If you just want to have @value{ftppackagename} as default remote
2136 files access package, you should apply the following code:
2137
2138 @lisp
2139 (setq tramp-default-method "ftp")
2140 @end lisp
2141 @end ifset
2142
2143 Unloading @value{tramp} can be achieved by applying @kbd{M-x
2144 tramp-unload-tramp}.
2145 @ifset emacs
2146 This resets also the @value{ftppackagename} plugins.
2147 @end ifset
2148 @end itemize
2149
2150
2151 @c For the developer
2152 @node Version Control
2153 @chapter The inner workings of remote version control
2154 @cindex Version Control
2155
2156 Unlike @value{ftppackagename}, @value{tramp} has full shell access to the
2157 remote machine. This makes it possible to provide version control for
2158 files accessed under @value{tramp}.
2159
2160 The actual version control binaries must be installed on the remote
2161 machine, accessible in the directories specified in
2162 @var{tramp-remote-path}.
2163
2164 This transparent integration with the version control systems is one of
2165 the most valuable features provided by @value{tramp}, but it is far from perfect.
2166 Work is ongoing to improve the transparency of the system.
2167
2168 @menu
2169 * Version Controlled Files:: Determining if a file is under version control.
2170 * Remote Commands:: Executing the version control commands on the remote machine.
2171 * Changed workfiles:: Detecting if the working file has changed.
2172 * Checking out files:: Bringing the workfile out of the repository.
2173 * Miscellaneous Version Control:: Things related to Version Control that don't fit elsewhere.
2174 @end menu
2175
2176
2177 @node Version Controlled Files
2178 @section Determining if a file is under version control
2179
2180 The VC package uses the existence of on-disk revision control master
2181 files to determine if a given file is under revision control. These file
2182 tests happen on the remote machine through the standard @value{tramp} mechanisms.
2183
2184
2185 @node Remote Commands
2186 @section Executing the version control commands on the remote machine
2187
2188 There are no hooks provided by VC to allow intercepting of the version
2189 control command execution. The calls occur through the
2190 @code{call-process} mechanism, a function that is somewhat more
2191 efficient than the @code{shell-command} function but that does not
2192 provide hooks for remote execution of commands.
2193
2194 To work around this, the functions @code{vc-do-command} and
2195 @code{vc-simple-command} have been advised to intercept requests for
2196 operations on files accessed via @value{tramp}.
2197
2198 In the case of a remote file, the @code{shell-command} interface is
2199 used, with some wrapper code, to provide the same functionality on the
2200 remote machine as would be seen on the local machine.
2201
2202
2203 @node Changed workfiles
2204 @section Detecting if the working file has changed
2205
2206 As there is currently no way to get access to the mtime of a file on a
2207 remote machine in a portable way, the @code{vc-workfile-unchanged-p}
2208 function is advised to call an @value{tramp} specific function for remote files.
2209
2210 The @code{tramp-vc-workfile-unchanged-p} function uses the functioning VC
2211 diff functionality to determine if any changes have occurred between the
2212 workfile and the version control master.
2213
2214 This requires that a shell command be executed remotely, a process that
2215 is notably heavier-weight than the mtime comparison used for local
2216 files. Unfortunately, unless a portable solution to the issue is found,
2217 this will remain the cost of remote version control.
2218
2219
2220 @node Checking out files
2221 @section Bringing the workfile out of the repository
2222
2223 VC will, by default, check for remote files and refuse to act on them
2224 when checking out files from the repository. To work around this
2225 problem, the function @code{vc-checkout} knows about @value{tramp} files and
2226 allows version control to occur.
2227
2228
2229 @node Miscellaneous Version Control
2230 @section Things related to Version Control that don't fit elsewhere
2231
2232 Minor implementation details, &c.
2233
2234 @menu
2235 * Remote File Ownership:: How VC determines who owns a workfile.
2236 * Back-end Versions:: How VC determines what release your RCS is.
2237 @end menu
2238
2239
2240 @node Remote File Ownership
2241 @subsection How VC determines who owns a workfile
2242
2243 @value{emacsname} provides the @code{user-full-name} function to
2244 return the login name of the current user as well as mapping from
2245 arbitrary user id values back to login names. The VC code uses this
2246 functionality to map from the uid of the owner of a workfile to the
2247 login name in some circumstances.
2248
2249 This will not, for obvious reasons, work if the remote system has a
2250 different set of logins. As such, it is necessary to delegate to the
2251 remote machine the job of determining the login name associated with a
2252 uid.
2253
2254 Unfortunately, with the profusion of distributed management systems such
2255 as @code{NIS}, @code{NIS+} and @code{NetInfo}, there is no simple,
2256 reliable and portable method for performing this mapping.
2257
2258 Thankfully, the only place in the VC code that depends on the mapping of
2259 a uid to a login name is the @code{vc-file-owner} function. This returns
2260 the login of the owner of the file as a string.
2261
2262 This function has been advised to use the output of @command{ls} on the
2263 remote machine to determine the login name, delegating the problem of
2264 mapping the uid to the login to the remote system which should know more
2265 about it than I do.
2266
2267
2268 @node Back-end Versions
2269 @subsection How VC determines what release your RCS is
2270
2271 VC needs to know what release your revision control binaries you are
2272 running as not all features VC supports are available with older
2273 versions of @command{rcs(1)}, @command{cvs(1)} or @command{sccs(1)}.
2274
2275 The default implementation of VC determines this value the first time it
2276 is needed and then stores the value globally to avoid the overhead of
2277 executing a process and parsing its output each time the information is
2278 needed.
2279
2280 Unfortunately, life is not quite so easy when remote version control
2281 comes into the picture. Each remote machine may have a different version
2282 of the version control tools and, while this is painful, we need to
2283 ensure that unavailable features are not used remotely.
2284
2285 To resolve this issue, @value{tramp} currently takes the sledgehammer
2286 approach of making the release values of the revision control tools
2287 local to each @value{tramp} buffer, forcing VC to determine these values
2288 again each time a new file is visited.
2289
2290 This has, quite obviously, some performance implications. Thankfully,
2291 most of the common operations performed by VC do not actually require
2292 that the remote version be known. This makes the problem far less
2293 apparent.
2294
2295 Eventually these values will be captured by @value{tramp} on a system by
2296 system basis and the results cached to improve performance.
2297
2298
2299 @node Files directories and localnames
2300 @chapter How file names, directories and localnames are mangled and managed.
2301
2302 @menu
2303 * Localname deconstruction:: Breaking a localname into its components.
2304 @end menu
2305
2306
2307 @node Localname deconstruction
2308 @section Breaking a localname into its components.
2309
2310 @value{tramp} file names are somewhat different, obviously, to ordinary file
2311 names. As such, the lisp functions @code{file-name-directory} and
2312 @code{file-name-nondirectory} are overridden within the @value{tramp}
2313 package.
2314
2315 Their replacements are reasonably simplistic in their approach. They
2316 dissect the filename, call the original handler on the localname and
2317 then rebuild the @value{tramp} file name with the result.
2318
2319 This allows the platform specific hacks in the original handlers to take
2320 effect while preserving the @value{tramp} file name information.
2321
2322
2323 @node Issues
2324 @chapter Debatable Issues and What Was Decided
2325
2326 @itemize @bullet
2327 @item The uuencode method does not always work.
2328
2329 Due to the design of @value{tramp}, the encoding and decoding programs
2330 need to read from stdin and write to stdout. On some systems,
2331 @command{uudecode -o -} will read stdin and write the decoded file to
2332 stdout, on other systems @command{uudecode -p} does the same thing.
2333 But some systems have uudecode implementations which cannot do this at
2334 all---it is not possible to call these uudecode implementations with
2335 suitable parameters so that they write to stdout.
2336
2337 Of course, this could be circumvented: the @code{begin foo 644} line
2338 could be rewritten to put in some temporary file name, then
2339 @command{uudecode} could be called, then the temp file could be
2340 printed and deleted.
2341
2342 But I have decided that this is too fragile to reliably work, so on some
2343 systems you'll have to do without the uuencode methods.
2344
2345 @item @value{tramp} does not work on XEmacs 20.
2346
2347 This is because it requires the macro @code{with-timeout} which does not
2348 appear to exist in XEmacs 20. I'm somewhat reluctant to add an
2349 emulation macro to @value{tramp}, but if somebody who uses XEmacs 20 steps
2350 forward and wishes to implement and test it, please contact me or the
2351 mailing list.
2352
2353 @item The @value{tramp} filename syntax differs between GNU Emacs and XEmacs.
2354
2355 The GNU Emacs maintainers wish to use a unified filename syntax for
2356 Ange-FTP and @value{tramp} so that users don't have to learn a new
2357 syntax. It is sufficient to learn some extensions to the old syntax.
2358
2359 For the XEmacs maintainers, the problems caused from using a unified
2360 filename syntax are greater than the gains. The XEmacs package system
2361 uses EFS for downloading new packages. So, obviously, EFS has to be
2362 installed from the start. If the filenames were unified, @value{tramp}
2363 would have to be installed from the start, too.
2364
2365 @ifset xemacs
2366 @strong{Note:} If you'd like to use a similar syntax like
2367 @value{ftppackagename}, you need the following settings in your init
2368 file:
2369
2370 @lisp
2371 (setq tramp-unified-filenames t)
2372 (require 'tramp)
2373 @end lisp
2374
2375 The autoload of the @value{emacsname} @value{tramp} package must be
2376 disabled. This can be achieved by setting file permissions @code{000}
2377 to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}.
2378
2379 In case of unified filenames, all @value{emacsname} download sites
2380 are added to @code{tramp-default-method-alist} with default method
2381 @option{ftp} @xref{Default Method}. These settings shouldn't be touched
2382 for proper working of the @value{emacsname} package system.
2383
2384 The syntax for unified filenames is described in the @value{tramp} manual
2385 for @value{emacsothername}.
2386 @end ifset
2387 @end itemize
2388
2389 @node Concept Index
2390 @comment node-name, next, previous, up
2391 @unnumbered Concept Index
2392 @printindex cp
2393 @contents
2394 @c End of tramp.texi - the TRAMP User Manual
2395 @bye
2396
2397 @c TODO
2398 @c
2399 @c * Say something about the .login and .profile files of the remote
2400 @c shells.
2401 @c * Explain how tramp.el works in principle: open a shell on a remote
2402 @c host and then send commands to it.
2403 @c * Mention that bookmarks are a cool feature to go along with Tramp.
2404 @c * Make terminology "inline" vs "out-of-band" consistent.
2405 @c It seems that "external" is also used instead of "out-of-band".
2406
2407 @c * M. Albinus
2408 @c ** Use `filename' resp. `file name' consistently.
2409 @c ** Use `host' resp. `machine' consistently.
2410 @c ** Consistent small or capitalized words especially in menues.
2411
2412 @ignore
2413 arch-tag: f96dd66e-6dd3-4c92-8d77-9c56205ba808
2414 @end ignore