]> code.delx.au - gnu-emacs/blob - doc/misc/tramp.texi
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
[gnu-emacs] / doc / misc / tramp.texi
1 \input texinfo @c -*- mode: texinfo; coding: utf-8 -*-
2 @setfilename ../../info/tramp.info
3 @c %**start of header
4 @settitle TRAMP User Manual
5 @include docstyle.texi
6 @c %**end of header
7
8 @c This is *so* much nicer :)
9 @footnotestyle end
10
11 @c In the Tramp repository, the version number is auto-frobbed from
12 @c configure.ac, so you should edit that file and run
13 @c "autoconf && ./configure" to change the version number.
14
15 @c Additionally, flags are set with respect to the Emacs flavor; and
16 @c depending whether Tramp is packaged into (X)Emacs, or standalone.
17
18 @include trampver.texi
19
20 @c Macro for formatting a file name according to the respective syntax.
21 @c xxx and yyy are auxiliary macros in order to omit leading and
22 @c trailing whitespace. Not very elegant, but I don't know it better.
23
24 @c There are subtle differences between texinfo 4.13 and 5.0. We must
25 @c declare two versions of the macro. This will be improved, hopefully.
26
27 @c Texinfo 5.0.
28 @ifset txicommandconditionals
29 @macro xxx {one}
30 @set \one\
31 @end macro
32
33 @macro yyy {one, two}
34 @xxx{x\one\}@c
35 @ifclear x
36 \one\@w{}\two\@c
37 @end ifclear
38 @clear x\one\
39 @end macro
40
41 @macro trampfn {method, user, host, localname}
42 @value{prefix}@c
43 @yyy{\method\,@value{postfixhop}}@c
44 @yyy{\user\,@@}@c
45 \host\@value{postfix}\localname\
46 @end macro
47 @end ifset
48
49 @c Texinfo 4.13.
50 @ifclear txicommandconditionals
51 @macro xxx {one}@c
52 @set \one\@c
53 @end macro
54
55 @macro yyy {one, two}@c
56 @xxx{x\one\}@c
57 @ifclear x@c
58 \one\@w{}\two\@c
59 @end ifclear
60 @clear x\one\@c
61 @end macro
62
63 @macro trampfn {method, user, host, localname}@c
64 @value{prefix}@yyy{\method\,@value{postfixhop}}@yyy{\user\,@@}\host\@value{postfix}\localname\@c
65 @end macro
66 @end ifclear
67
68 @copying
69 Copyright @copyright{} 1999--2015 Free Software Foundation, Inc.
70
71 @quotation
72 Permission is granted to copy, distribute and/or modify this document
73 under the terms of the GNU Free Documentation License, Version 1.3 or
74 any later version published by the Free Software Foundation; with no
75 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
76 and with the Back-Cover Texts as in (a) below. A copy of the license
77 is included in the section entitled ``GNU Free Documentation License''.
78
79 (a) The FSF's Back-Cover Text is: ``You have the freedom to
80 copy and modify this GNU manual.''
81 @end quotation
82 @end copying
83
84 @c Entries for @command{install-info} to use
85 @dircategory @value{emacsname} network features
86 @direntry
87 * TRAMP: (tramp). Transparent Remote Access, Multiple Protocol
88 @value{emacsname} remote file access via ssh and scp.
89 @end direntry
90
91 @titlepage
92 @title @value{tramp} version @value{trampver} User Manual
93 @author by Daniel Pittman
94 @author based on documentation by Kai Großjohann
95 @page
96 @insertcopying
97 @end titlepage
98
99 @contents
100
101 @ifnottex
102 @node Top, Overview, (dir), (dir)
103 @top @value{tramp} version @value{trampver} User Manual
104
105 This file documents @value{tramp} version @value{trampver}, a remote file
106 editing package for @value{emacsname}.
107
108 @value{tramp} stands for ``Transparent Remote (file) Access, Multiple
109 Protocol''. This package provides remote file editing, similar to
110 @value{ftppackagename}.
111
112 The difference is that @value{ftppackagename} uses FTP to transfer
113 files between the local and the remote host, whereas @value{tramp} uses a
114 combination of @command{rsh} and @command{rcp} or other work-alike
115 programs, such as @command{ssh}/@command{scp}.
116
117 You can find the latest version of this document on the web at
118 @uref{http://www.gnu.org/software/tramp/}.
119
120 @c Pointer to the other Emacs flavor is necessary only in case of
121 @c standalone installation.
122 @ifset installchapter
123 The manual has been generated for @value{emacsname}.
124 @ifinfo
125 If you want to read the info pages for @value{emacsothername}, you
126 should read in @ref{Installation} how to create them.
127 @end ifinfo
128 @ifhtml
129 If you're using the other Emacs flavor, you should read the
130 @uref{@value{emacsotherfilename}, @value{emacsothername}} pages.
131 @end ifhtml
132 @end ifset
133
134 @ifhtml
135 The latest release of @value{tramp} is available for
136 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
137 @ref{Obtaining Tramp} for more details, including the Git server
138 details.
139
140 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
141 Savannah Project Page}.
142 @end ifhtml
143
144 There is a mailing list for @value{tramp}, available at
145 @email{tramp-devel@@gnu.org}, and archived at
146 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
147 @value{tramp} Mail Archive}.
148 @ifhtml
149 Older archives are located at
150 @uref{http://sourceforge.net/mailarchive/forum.php?forum=tramp-devel,
151 SourceForge Mail Archive} and
152 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/,
153 The Mail Archive}.
154 @c in HTML output, there's no new paragraph.
155 @*@*
156 @end ifhtml
157
158 @insertcopying
159
160 @end ifnottex
161
162 @menu
163 * Overview:: What @value{tramp} can and cannot do.
164
165 For the end user:
166
167 * Obtaining Tramp:: How to obtain @value{tramp}.
168 * History:: History of @value{tramp}.
169 @ifset installchapter
170 * Installation:: Installing @value{tramp} with your @value{emacsname}.
171 @end ifset
172 * Configuration:: Configuring @value{tramp} for use.
173 * Usage:: An overview of the operation of @value{tramp}.
174 * Bug Reports:: Reporting Bugs and Problems.
175 * Frequently Asked Questions:: Questions and answers from the mailing list.
176
177 For the developer:
178
179 * Files directories and localnames:: How file names, directories and localnames are mangled and managed.
180 * Traces and Profiles:: How to Customize Traces.
181 * Issues:: Debatable Issues and What Was Decided.
182
183 * GNU Free Documentation License:: The license for this documentation.
184 * Function Index:: @value{tramp} functions.
185 * Variable Index:: User options and variables.
186 * Concept Index:: An item for each concept.
187
188 @detailmenu
189 --- The Detailed Node Listing ---
190 @c
191 @ifset installchapter
192 Installing @value{tramp} with your @value{emacsname}
193
194 * Installation parameters:: Parameters in order to control installation.
195 * Load paths:: How to plug-in @value{tramp} into your environment.
196
197 @end ifset
198
199 Configuring @value{tramp} for use
200
201 * Connection types:: Types of connections made to remote hosts.
202 * Inline methods:: Inline methods.
203 * External methods:: External methods.
204 @ifset emacsgvfs
205 * GVFS based methods:: GVFS based external methods.
206 @end ifset
207 @ifset emacsgw
208 * Gateway methods:: Gateway methods.
209 @end ifset
210 * Default Method:: Selecting a default method.
211 * Default User:: Selecting a default user.
212 * Default Host:: Selecting a default host.
213 * Multi-hops:: Connecting to a remote host using multiple hops.
214 * Customizing Methods:: Using Non-Standard Methods.
215 * Customizing Completion:: Selecting config files for user/host name completion.
216 * Password handling:: Reusing passwords for several connections.
217 * Connection caching:: Reusing connection related information.
218 * Predefined connection information::
219 Setting own connection related information.
220 * Remote programs:: How @value{tramp} finds and uses programs on the remote host.
221 * Remote shell setup:: Remote shell setup hints.
222 * Android shell setup:: Android shell setup hints.
223 * Auto-save and Backup:: Auto-save and Backup.
224 * Windows setup hints:: Issues with Cygwin ssh.
225
226 Using @value{tramp}
227
228 * File name Syntax:: @value{tramp} file name conventions.
229 * File name completion:: File name completion.
230 * Ad-hoc multi-hops:: Declaring multiple hops in the file name.
231 * Remote processes:: Integration with other @value{emacsname} packages.
232 * Cleanup remote connections:: Cleanup remote connections.
233
234 How file names, directories and localnames are mangled and managed
235
236 * Localname deconstruction:: Breaking a localname into its components.
237 @ifset emacs
238 * External packages:: Integration with external Lisp packages.
239 @end ifset
240
241 @end detailmenu
242 @end menu
243
244
245 @node Overview
246 @chapter An overview of @value{tramp}
247 @cindex overview
248
249 After the installation of @value{tramp} into your @value{emacsname}, you
250 will be able to access files on remote hosts as though they were
251 local. Access to the remote file system for editing files, version
252 control, and @code{dired} are transparently enabled.
253
254 Your access to the remote host can be with the @command{rsh},
255 @command{rlogin}, @command{telnet} programs or with any similar
256 connection method. This connection must pass @acronym{ASCII}
257 successfully to be usable but need not be 8-bit clean.
258
259 The package provides support for @command{ssh} connections out of the
260 box, one of the more common uses of the package. This allows
261 relatively secure access to hosts, especially if @command{ftp}
262 access is disabled.
263
264 Under Windows, @value{tramp} is integrated with the PuTTY package,
265 using the @command{plink} program.
266
267 The majority of activity carried out by @value{tramp} requires only that
268 the remote login is possible and is carried out at the terminal. In
269 order to access remote files @value{tramp} needs to transfer their content
270 to the local host temporarily.
271
272 @value{tramp} can transfer files between the hosts in a variety of ways.
273 The details are easy to select, depending on your needs and the
274 hosts in question.
275
276 The fastest transfer methods for large files rely on a remote file
277 transfer package such as @command{rcp}, @command{scp}, @command{rsync}
278 or (under Windows) @command{pscp}.
279
280 If the remote copy methods are not suitable for you, @value{tramp} also
281 supports the use of encoded transfers directly through the shell.
282 This requires that the @command{mimencode} or @command{uuencode} tools
283 are available on the remote host. These methods are generally
284 faster for small files.
285
286 @value{tramp} is still under active development and any problems you encounter,
287 trivial or major, should be reported to the @value{tramp} developers.
288 @xref{Bug Reports}.
289
290
291 @subsubheading Behind the scenes
292 @cindex behind the scenes
293 @cindex details of operation
294 @cindex how it works
295
296 This section tries to explain what goes on behind the scenes when you
297 access a remote file through @value{tramp}.
298
299 Suppose you type @kbd{C-x C-f} and enter part of an @value{tramp} file name,
300 then hit @kbd{@key{TAB}} for completion. Suppose further that this is
301 the first time that @value{tramp} is invoked for the host in question. Here's
302 what happens:
303
304 @itemize
305 @item
306 @value{tramp} discovers that it needs a connection to the host. So it
307 invokes @samp{telnet @var{host}} or @samp{rsh @var{host} -l
308 @var{user}} or a similar tool to connect to the remote host.
309 Communication with this process happens through an
310 @value{emacsname} buffer, that is, the output from the remote end
311 goes into a buffer.
312
313 @item
314 The remote host may prompt for a login name (for @command{telnet}).
315 The login name is given in the file name, so @value{tramp} sends the
316 login name and a newline.
317
318 @item
319 The remote host may prompt for a password or pass phrase (for
320 @command{rsh} or for @command{telnet} after sending the login name).
321 @value{tramp} displays the prompt in the minibuffer, asking you for the
322 password or pass phrase.
323
324 You enter the password or pass phrase. @value{tramp} sends it to the remote
325 host, followed by a newline.
326
327 @item
328 @value{tramp} now waits for the shell prompt or for a message that the login
329 failed.
330
331 If @value{tramp} sees neither of them after a certain period of time
332 (a minute, say), then it issues an error message saying that it
333 couldn't find the remote shell prompt and shows you what the remote
334 host has sent.
335
336 If @value{tramp} sees a @samp{login failed} message, it tells you so,
337 aborts the login attempt and allows you to try again.
338
339 @item
340 Suppose that the login was successful and @value{tramp} sees the shell prompt
341 from the remote host. Now @value{tramp} invokes @command{/bin/sh} because
342 Bourne shells and C shells have different command
343 syntaxes.@footnote{Invoking @command{/bin/sh} will fail if your login
344 shell doesn't recognize @samp{exec /bin/sh} as a valid command.
345 Maybe you use the Scheme shell @command{scsh}@dots{}}
346
347 After the Bourne shell has come up, @value{tramp} sends a few commands to
348 ensure a good working environment. It turns off echoing, it sets the
349 shell prompt, and a few other things.
350
351 @item
352 Now the remote shell is up and it good working order. Remember, what
353 was supposed to happen is that @value{tramp} tries to find out what files exist
354 on the remote host so that it can do file name completion.
355
356 So, @value{tramp} basically issues @command{cd} and @command{ls} commands and
357 also sometimes @command{echo} with globbing. Another command that is
358 often used is @command{test} to find out whether a file is writable or a
359 directory or the like. The output of each command is parsed for the
360 necessary operation.
361
362 @item
363 Suppose you are finished with file name completion, have entered @kbd{C-x
364 C-f}, a full file name and hit @kbd{@key{RET}}. Now comes the time to
365 transfer the file contents from the remote host to the local host so
366 that you can edit them.
367
368 See above for an explanation of how @value{tramp} transfers the file contents.
369
370 For inline transfers, @value{tramp} issues a command like @samp{mimencode -b
371 /path/to/remote/file}, waits until the output has accumulated in the
372 buffer that's used for communication, then decodes that output to
373 produce the file contents.
374
375 For external transfers, @value{tramp} issues a command like the
376 following:
377 @example
378 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
379 @end example
380 It then reads the local temporary file @file{/tmp/tramp.4711} into a
381 buffer and deletes the temporary file.
382
383 @item
384 You now edit the buffer contents, blithely unaware of what has happened
385 behind the scenes. (Unless you have read this section, that is.) When
386 you are finished, you type @kbd{C-x C-s} to save the buffer.
387
388 @item
389 Again, @value{tramp} transfers the file contents to the remote host
390 either inline or external. This is the reverse of what happens when
391 reading the file.
392 @end itemize
393
394 I hope this has provided you with a basic overview of what happens
395 behind the scenes when you open a file with @value{tramp}.
396
397
398 @c For the end user
399 @node Obtaining Tramp
400 @chapter Obtaining Tramp.
401 @cindex obtaining Tramp
402
403 @value{tramp} is freely available on the Internet and the latest
404 release may be downloaded from @uref{ftp://ftp.gnu.org/gnu/tramp/}.
405 This release includes the full documentation and code for
406 @value{tramp}, suitable for installation. But Emacs (22 or later)
407 includes @value{tramp} already, and there is a @value{tramp} package
408 for XEmacs, as well. So maybe it is easier to just use those. But if
409 you want the bleeding edge, read on@dots{}
410
411 For the especially brave, @value{tramp} is available from Git. The Git
412 version is the latest version of the code and may contain incomplete
413 features or new issues. Use these versions at your own risk.
414
415 Instructions for obtaining the latest development version of @value{tramp}
416 from Git can be found by going to the Savannah project page at the
417 following URL and then clicking on the Git link in the navigation bar
418 at the top.
419
420 @noindent
421 @uref{http://savannah.gnu.org/projects/tramp/}
422
423 @noindent
424 Or follow the example session below:
425
426 @example
427 ] @strong{cd ~/@value{emacsdir}}
428 ] @strong{git clone git://git.savannah.gnu.org/tramp.git}
429 @end example
430
431 @noindent
432 If you reside behind a firewall, you could use
433
434 @example
435 ] @strong{git config --global http.proxy http://user:pwd@@proxy.server.com:8080}
436 ] @strong{git clone http://git.savannah.gnu.org/r/tramp.git}
437 @end example
438
439 @noindent
440 Tramp developers use instead
441
442 @example
443 ] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git}
444 @end example
445
446 @noindent
447 You should now have a directory @file{~/@value{emacsdir}/tramp}
448 containing the latest version of @value{tramp}. You can fetch the latest
449 updates from the repository by issuing the command:
450
451 @example
452 ] @strong{cd ~/@value{emacsdir}/tramp}
453 ] @strong{git pull}
454 @end example
455
456 @noindent
457 Once you've got updated files from the Git repository, you need to run
458 @command{autoconf} in order to get an up-to-date @file{configure}
459 script:
460
461 @example
462 ] @strong{cd ~/@value{emacsdir}/tramp}
463 ] @strong{autoconf}
464 @end example
465
466
467 @node History
468 @chapter History of @value{tramp}
469 @cindex history
470 @cindex development history
471
472 Development was started end of November 1998. The package was called
473 @file{rssh.el}, back then. It only provided one method to access a
474 file, using @command{ssh} to log in to a remote host and using
475 @command{scp} to transfer the file contents. After a while, the name
476 was changed to @file{rcp.el}, and now it's @value{tramp}. Along the way,
477 many more methods for getting a remote shell and for transferring the
478 file contents were added. Support for VC was added.
479
480 After that, there were added the multi-hop methods in April 2000 and
481 the unification of @value{tramp} and Ange-FTP file names in July 2002.
482 In July 2004, multi-hop methods have been replaced by proxy hosts.
483 Running commands on remote hosts was introduced in December 2005.
484 @ifset emacsgw
485 Support of gateways exists since April 2007.
486 @end ifset
487 @ifset emacsgvfs
488 GVFS integration started in February 2009.
489 @end ifset
490 @ifset emacs
491 Remote commands on Windows hosts are available since September 2011.
492 @end ifset
493 Ad-hoc multi-hop methods (with a changed syntax) have been reenabled
494 in November 2011. In November 2012, Juergen Hoetzel's
495 @file{tramp-adb.el} has been added.
496
497 In December 2001, @value{tramp} has been added to the XEmacs package
498 repository. Being part of the Emacs repository happened in June 2002,
499 the first release including @value{tramp} was Emacs 22.1.
500
501 @value{tramp} is also a Debian GNU/Linux package since February 2001.
502
503
504 @c Installation chapter is necessary only in case of standalone
505 @c installation. Text taken from trampinst.texi.
506 @ifset installchapter
507 @include trampinst.texi
508 @end ifset
509
510
511 @node Configuration
512 @chapter Configuring @value{tramp} for use
513 @cindex configuration
514
515 @cindex default configuration
516 @value{tramp} is (normally) fully functional when it is initially
517 installed. It is initially configured to use the @command{scp}
518 program to connect to the remote host. So in the easiest case, you
519 just type @kbd{C-x C-f} and then enter the file name
520 @file{@trampfn{, user, host, /path/to.file}}.
521
522 On some hosts, there are problems with opening a connection. These are
523 related to the behavior of the remote shell. See @xref{Remote shell
524 setup}, for details on this.
525
526 If you do not wish to use these commands to connect to the remote
527 host, you should change the default connection and transfer method
528 that @value{tramp} uses. There are several different methods that @value{tramp}
529 can use to connect to remote hosts and transfer files
530 (@pxref{Connection types}).
531
532 If you don't know which method is right for you, see @xref{Default
533 Method}.
534
535 @strong{Note} that the following descriptions reference the setting of
536 user options or variables, not all of which are autoloaded by
537 @value{emacsname}. All examples assume that you have loaded
538 @value{tramp} first:
539
540 @lisp
541 (require 'tramp)
542 @end lisp
543
544
545 @menu
546 * Connection types:: Types of connections made to remote hosts.
547 * Inline methods:: Inline methods.
548 * External methods:: External methods.
549 @ifset emacsgvfs
550 * GVFS based methods:: GVFS based external methods.
551 @end ifset
552 @ifset emacsgw
553 * Gateway methods:: Gateway methods.
554 @end ifset
555 * Default Method:: Selecting a default method.
556 Here we also try to help those who
557 don't have the foggiest which method
558 is right for them.
559 * Default User:: Selecting a default user.
560 * Default Host:: Selecting a default host.
561 * Multi-hops:: Connecting to a remote host using multiple hops.
562 * Customizing Methods:: Using Non-Standard Methods.
563 * Customizing Completion:: Selecting config files for user/host name completion.
564 * Password handling:: Reusing passwords for several connections.
565 * Connection caching:: Reusing connection related information.
566 * Predefined connection information::
567 Setting own connection related information.
568 * Remote programs:: How @value{tramp} finds and uses programs on the remote host.
569 * Remote shell setup:: Remote shell setup hints.
570 * Android shell setup:: Android shell setup hints.
571 * Auto-save and Backup:: Auto-save and Backup.
572 * Windows setup hints:: Issues with Cygwin ssh.
573 @end menu
574
575
576 @node Connection types
577 @section Types of connections made to remote hosts
578 @cindex connection types, overview
579
580 There are two basic types of transfer methods, each with its own
581 advantages and limitations. Both types of connection make use of a
582 remote shell access program such as @command{rsh}, @command{ssh} or
583 @command{telnet} to connect to the remote host.
584
585 This connection is used to perform many of the operations that @value{tramp}
586 requires to make the remote file system transparently accessible from
587 the local host. It is only when visiting files that the methods
588 differ.
589
590 @cindex inline methods
591 @cindex external methods
592 @cindex methods, inline
593 @cindex methods, external
594 Loading or saving a remote file requires that the content of the file
595 be transferred between the two hosts. The content of the file can
596 be transferred using one of two methods: the @dfn{inline method} over
597 the same connection used to log in to the remote host, or the
598 @dfn{external method} through another connection using a remote copy
599 program such as @command{rcp}, @command{scp} or @command{rsync}.
600
601 The performance of the external methods is generally better than that
602 of the inline methods, at least for large files. This is caused by
603 the need to encode and decode the data when transferring inline.
604
605 The one exception to this rule are the @command{scp} based transfer
606 methods. While these methods do see better performance when actually
607 transferring files, the overhead of the cryptographic negotiation at
608 startup may drown out the improvement in file transfer times.
609
610 External methods should be configured such a way that they don't
611 require a password (with @command{ssh-agent}, or such alike). Modern
612 @command{scp} implementations offer options to reuse existing
613 @command{ssh} connections, which will be enabled by default if
614 available. If it isn't possible, you should consider @ref{Password
615 handling}, otherwise you will be prompted for a password every copy
616 action.
617
618
619 @node Inline methods
620 @section Inline methods
621 @cindex inline methods
622 @cindex methods, inline
623
624 The inline methods in @value{tramp} are quite powerful and can work in
625 situations where you cannot use an external transfer program to
626 connect. There are also strange inline methods which allow you to
627 transfer files between @emph{user identities} rather than hosts, see
628 below.
629
630 These methods depend on the existence of a suitable encoding and
631 decoding command on remote host. Locally, @value{tramp} may be able to
632 use features of @value{emacsname} to decode and encode the files or
633 it may require access to external commands to perform that task.
634
635 @cindex uuencode
636 @cindex mimencode
637 @cindex base-64 encoding
638 @value{tramp} checks the availability and usability of commands like
639 @command{mimencode} (part of the @command{metamail} package) or
640 @command{uuencode} on the remote host. The first reliable command
641 will be used. The search path can be customized, see @ref{Remote
642 programs}.
643
644 If both commands aren't available on the remote host, @value{tramp}
645 transfers a small piece of Perl code to the remote host, and tries to
646 apply it for encoding and decoding.
647
648 The variable @var{tramp-inline-compress-start-size} controls, whether
649 a file shall be compressed before encoding. This could increase
650 transfer speed for large text files.
651
652
653 @table @asis
654 @item @option{rsh}
655 @cindex method rsh
656 @cindex rsh method
657
658 Connect to the remote host with @command{rsh}. Due to the unsecure
659 connection it is recommended for very local host topology only.
660
661 On operating systems which provide the command @command{remsh} instead
662 of @command{rsh}, you can use the method @option{remsh}. This is true
663 for HP-UX or Cray UNICOS, for example.
664
665
666 @item @option{ssh}
667 @cindex method ssh
668 @cindex ssh method
669
670 Connect to the remote host with @command{ssh}. This is identical to
671 the previous option except that the @command{ssh} package is used,
672 making the connection more secure.
673
674 All the methods based on @command{ssh} have an additional feature: you
675 can specify a host name which looks like @file{host#42} (the real host
676 name, then a hash sign, then a port number). This means to connect to
677 the given host but to also pass @code{-p 42} as arguments to the
678 @command{ssh} command.
679
680
681 @item @option{telnet}
682 @cindex method telnet
683 @cindex telnet method
684
685 Connect to the remote host with @command{telnet}. This is as unsecure
686 as the @option{rsh} method.
687
688
689 @item @option{su}
690 @cindex method su
691 @cindex su method
692
693 This method does not connect to a remote host at all, rather it uses
694 the @command{su} program to allow you to edit files as another user.
695 That means, the specified host name in the file name must be either
696 @samp{localhost} or the host name as returned by the function
697 @command{(system-name)}. For an exception of this rule see
698 @ref{Multi-hops}.
699
700
701 @item @option{sudo}
702 @cindex method sudo
703 @cindex sudo method
704
705 This is similar to the @option{su} method, but it uses @command{sudo}
706 rather than @command{su} to become a different user.
707
708 Note that @command{sudo} must be configured to allow you to start a
709 shell as the user. It would be nice if it was sufficient if
710 @command{ls} and @command{mimencode} were allowed, but that is not
711 easy to implement, so I haven't got around to it, yet.
712
713
714 @item @option{sshx}
715 @cindex method sshx
716 @cindex sshx method
717
718 As you would expect, this is similar to @option{ssh}, only a little
719 different. Whereas @option{ssh} opens a normal interactive shell on
720 the remote host, this option uses @samp{ssh -t -t @var{host} -l
721 @var{user} /bin/sh} to open a connection. This is useful for users
722 where the normal login shell is set up to ask them a number of
723 questions when logging in. This procedure avoids these questions, and
724 just gives @value{tramp} a more-or-less ``standard'' login shell to work
725 with.
726
727 Note that this procedure does not eliminate questions asked by
728 @command{ssh} itself. For example, @command{ssh} might ask ``Are you
729 sure you want to continue connecting?'' if the host key of the remote
730 host is not known. @value{tramp} does not know how to deal with such a
731 question (yet), therefore you will need to make sure that you can log
732 in without such questions.
733
734 This is also useful for Windows users where @command{ssh}, when
735 invoked from an @value{emacsname} buffer, tells them that it is not
736 allocating a pseudo tty. When this happens, the login shell is wont
737 to not print any shell prompt, which confuses @value{tramp} mightily.
738
739 This supports the @samp{-p} argument.
740
741
742 @item @option{krlogin}
743 @cindex method krlogin
744 @cindex krlogin method
745 @cindex Kerberos (with krlogin method)
746
747 This method is also similar to @option{ssh}. It only uses the
748 @command{krlogin -x} command to log in to the remote host.
749
750
751 @item @option{ksu}
752 @cindex method ksu
753 @cindex ksu method
754 @cindex Kerberos (with ksu method)
755
756 This is another method from the Kerberos suite. It behaves like @option{su}.
757
758
759 @item @option{plink}
760 @cindex method plink
761 @cindex plink method
762
763 This method is mostly interesting for Windows users using the PuTTY
764 implementation of SSH@. It uses @samp{plink -ssh} to log in to the
765 remote host.
766
767 With a recent PuTTY, it is recommended to check the @samp{Share SSH
768 connections if possible} control for that session.
769
770 This method supports the @samp{-P} argument.
771
772
773 @item @option{plinkx}
774 @cindex method plinkx
775 @cindex plinkx method
776
777 Another method using PuTTY on Windows. Instead of host names, it
778 expects PuTTY session names, calling @samp{plink -load @var{session}
779 -t}. User names and port numbers must be defined in the session.
780
781 With a recent PuTTY, it is recommended to check the @samp{Share SSH
782 connections if possible} control for that session.
783
784 @end table
785
786
787 @node External methods
788 @section External methods
789 @cindex methods, external
790 @cindex external methods
791
792 The external methods operate through multiple channels, using the
793 remote shell connection for many actions while delegating file
794 transfers to an external transfer utility.
795
796 This saves the overhead of encoding and decoding that multiplexing the
797 transfer through the one connection has with the inline methods.
798
799 Since external methods need their own overhead opening a new channel,
800 all files which are smaller than @var{tramp-copy-size-limit} are still
801 transferred with the corresponding inline method. It should provide a
802 fair trade-off between both approaches.
803
804 @table @asis
805 @item @option{rcp}---@command{rsh} and @command{rcp}
806 @cindex method rcp
807 @cindex rcp method
808 @cindex rcp (with rcp method)
809 @cindex rsh (with rcp method)
810
811 This method uses the @command{rsh} and @command{rcp} commands to connect
812 to the remote host and transfer files. This is probably the fastest
813 connection method available.
814
815 The alternative method @option{remcp} uses the @command{remsh} and
816 @command{rcp} commands. It should be applied on hosts where
817 @command{remsh} is used instead of @command{rsh}.
818
819
820 @item @option{scp}---@command{ssh} and @command{scp}
821 @cindex method scp
822 @cindex scp method
823 @cindex scp (with scp method)
824 @cindex ssh (with scp method)
825
826 Using @command{ssh} to connect to the remote host and @command{scp} to
827 transfer files between the hosts is the best method for securely
828 connecting to a remote host and accessing files.
829
830 The performance of this option is also quite good. It may be slower than
831 the inline methods when you often open and close small files however.
832 The cost of the cryptographic handshake at the start of an @command{scp}
833 session can begin to absorb the advantage that the lack of encoding and
834 decoding presents.
835
836 All the @command{ssh} based methods support the @samp{-p} feature
837 where you can specify a port number to connect to in the host name.
838 For example, the host name @file{host#42} tells @value{tramp} to
839 specify @samp{-p 42} in the argument list for @command{ssh}, and to
840 specify @samp{-P 42} in the argument list for @command{scp}.
841
842
843 @item @option{rsync}---@command{ssh} and @command{rsync}
844 @cindex method rsync
845 @cindex rsync method
846 @cindex rsync (with rsync method)
847 @cindex ssh (with rsync method)
848
849 Using the @command{ssh} command to connect securely to the remote
850 host and the @command{rsync} command to transfer files is almost
851 identical to the @option{scp} method.
852
853 While @command{rsync} performs much better than @command{scp} when
854 transferring files that exist on both hosts, this advantage is lost if
855 the file exists only on one side of the connection. A file can exists
856 on both the remote and local host, when you copy a file from/to a
857 remote host. When you just open a file from the remote host (or write
858 a file there), a temporary file on the local side is kept as long as
859 the corresponding buffer, visiting this file, is alive.
860
861 This method supports the @samp{-p} argument.
862
863
864 @item @option{scpx}---@command{ssh} and @command{scp}
865 @cindex method scpx
866 @cindex scpx method
867 @cindex scp (with scpx method)
868 @cindex ssh (with scpx method)
869
870 As you would expect, this is similar to @option{scp}, only a little
871 different. Whereas @option{scp} opens a normal interactive shell on
872 the remote host, this option uses @samp{ssh -t -t @var{host} -l
873 @var{user} /bin/sh} to open a connection. This is useful for users
874 where the normal login shell is set up to ask them a number of
875 questions when logging in. This procedure avoids these questions, and
876 just gives @value{tramp} a more-or-less ``standard'' login shell to work
877 with.
878
879 This is also useful for Windows users where @command{ssh}, when
880 invoked from an @value{emacsname} buffer, tells them that it is not
881 allocating a pseudo tty. When this happens, the login shell is wont
882 to not print any shell prompt, which confuses @value{tramp} mightily.
883
884 This method supports the @samp{-p} argument.
885
886
887 @item @option{pscp}---@command{plink} and @command{pscp}
888 @item @option{psftp}---@command{plink} and @command{psftp}
889 @cindex method pscp
890 @cindex pscp method
891 @cindex pscp (with pscp method)
892 @cindex plink (with pscp method)
893 @cindex PuTTY (with pscp method)
894 @cindex method psftp
895 @cindex psftp method
896 @cindex pscp (with psftp method)
897 @cindex plink (with psftp method)
898 @cindex PuTTY (with psftp method)
899
900 These methods are similar to @option{scp} or @option{sftp}, but they
901 use the @command{plink} command to connect to the remote host, and
902 they use @command{pscp} or @command{psftp} for transferring the files.
903 These programs are part of PuTTY, an SSH implementation for Windows.
904
905 With a recent PuTTY, it is recommended to configure the @samp{Share
906 SSH connections if possible} control for that session.
907
908 These methods support the @samp{-P} argument.
909
910
911 @item @option{fcp}---@command{fsh} and @command{fcp}
912 @cindex method fcp
913 @cindex fcp method
914 @cindex fsh (with fcp method)
915 @cindex fcp (with fcp method)
916
917 This method is similar to @option{scp}, but it uses the @command{fsh}
918 command to connect to the remote host, and it uses @command{fcp} for
919 transferring the files. @command{fsh/fcp} are a front-end for
920 @command{ssh} which allow for reusing the same @command{ssh} session
921 for submitting several commands. This avoids the startup overhead of
922 @command{scp} (which has to establish a secure connection whenever it
923 is called). Note, however, that you can also use one of the inline
924 methods to achieve a similar effect.
925
926 This method uses the command @samp{fsh @var{host} -l @var{user}
927 /bin/sh -i} to establish the connection, it does not work to just say
928 @command{fsh @var{host} -l @var{user}}.
929
930 @cindex method fsh
931 @cindex fsh method
932
933 There is no inline method using @command{fsh} as the multiplexing
934 provided by the program is not very useful in our context. @value{tramp}
935 opens just one connection to the remote host and then keeps it open,
936 anyway.
937
938
939 @item @option{nc}---@command{telnet} and @command{nc}
940 @cindex method nc
941 @cindex nc method
942 @cindex nc (with nc method)
943 @cindex telnet (with nc method)
944
945 Using @command{telnet} to connect to the remote host and @command{nc}
946 for file transfer is often the only possibility to access dumb
947 devices, like routers or NAS hosts. Those hosts have just a
948 restricted @command{busybox} as local shell, and there is no program
949 to encode and decode files for transfer.
950
951
952 @item @option{ftp}
953 @cindex method ftp
954 @cindex ftp method
955
956 This is not a native @value{tramp} method. Instead, it forwards all
957 requests to @value{ftppackagename}.
958 @ifset xemacs
959 This works only for unified file names, see @ref{Issues}.
960 @end ifset
961
962
963 @item @option{smb}---@command{smbclient}
964 @cindex method smb
965 @cindex smb method
966
967 This is another not native @value{tramp} method. It uses the
968 @command{smbclient} command on different Unices in order to connect to
969 an SMB server. An SMB server might be a Samba (or CIFS) server on
970 another UNIX host or, more interesting, a host running MS Windows. So
971 far, it is tested against MS Windows NT, MS Windows 2000, MS Windows
972 XP, MS Windows Vista, and MS Windows 7.
973
974 The first directory in the localname must be a share name on the remote
975 host. Remember that the @code{$} character, in which default shares
976 usually end, must be written @code{$$} due to environment variable
977 substitution in file names. If no share name is given (i.e., remote
978 directory @code{/}), all available shares are listed.
979
980 Since authorization is done on share level, you will always be
981 prompted for a password if you access another share on the same host.
982 This can be suppressed by @ref{Password handling}.
983
984 For authorization, MS Windows uses both a user name and a domain name.
985 Because of this, the @value{tramp} syntax has been extended: you can
986 specify a user name which looks like @code{user%domain} (the real user
987 name, then a percent sign, then the domain name). So, to connect to
988 the host @code{melancholia} as user @code{daniel} of the domain
989 @code{BIZARRE}, and edit @file{.emacs} in the home directory (share
990 @code{daniel$}) I would specify the file name @file{@trampfn{smb,
991 daniel%BIZARRE, melancholia, /daniel$$/.emacs}}.
992
993 Depending on the Windows domain configuration, a Windows user might be
994 considered as domain user per default. In order to connect as local
995 user, the WINS name of that host must be given as domain name.
996 Usually, it is the host name in capital letters. In the example
997 above, the local user @code{daniel} would be specified as
998 @file{@trampfn{smb, daniel%MELANCHOLIA, melancholia, /daniel$$/.emacs}}.
999
1000 The domain name as well as the user name are optional. If no user
1001 name is specified at all, the anonymous user (without password
1002 prompting) is assumed. This is different from all other @value{tramp}
1003 methods, where in such a case the local user name is taken.
1004
1005 The @option{smb} method supports the @samp{-p} argument.
1006
1007 @strong{Please note:} If @value{emacsname} runs locally under MS
1008 Windows, this method isn't available. Instead, you can use UNC
1009 file names like @file{//melancholia/daniel$$/.emacs}. The only
1010 disadvantage is that there's no possibility to specify another user
1011 name.
1012
1013
1014 @item @option{adb}
1015 @cindex method adb
1016 @cindex adb method
1017
1018 This special method uses the Android Debug Bridge for accessing
1019 Android devices. The Android Debug Bridge must be installed locally.
1020 Some GNU/Linux distributions offer it for installation, otherwise it
1021 can be installed as part of the Android SDK@. If the @command{adb}
1022 program is not found via the @env{PATH} environment variable, the
1023 variable @var{tramp-adb-program} must point to its absolute path.
1024
1025 @value{tramp} does not connect Android devices to @command{adb},
1026 unless the custom option @option{tramp-adb-connect-if-not-connected}
1027 is non-@code{nil}. If there is exactly one Android device connected
1028 to @command{adb}, a host name is not needed in the remote file name.
1029 The default @value{tramp} name to be used is @file{@trampfn{adb, , ,}},
1030 therefore. Otherwise, one could find potential host names with the
1031 command @command{adb devices}.
1032
1033 Usually, the @command{adb} method does not need any user name. It
1034 runs under the permissions of the @command{adbd} process on the
1035 Android device. If a user name is specified, @value{tramp} applies an
1036 @command{su} on the device. This does not work with all Android
1037 devices, especially with unrooted ones. In that case, an error
1038 message is displayed.
1039
1040 If a device shall be connected via TCP/IP, it is possible to declare
1041 the port number to be used like @file{device#42}. Without a port
1042 number, the default value as declared in @command{adb} will be used.
1043 Port numbers are not applicable to Android devices connected via USB.
1044
1045 @end table
1046
1047
1048 @ifset emacsgvfs
1049 @node GVFS based methods
1050 @section GVFS based external methods
1051 @cindex methods, gvfs
1052 @cindex gvfs based methods
1053 @cindex dbus
1054
1055 The connection methods described in this section are based on GVFS
1056 @uref{http://en.wikipedia.org/wiki/GVFS}. Via GVFS, the remote
1057 filesystem is mounted locally through FUSE@. @value{tramp} uses
1058 this local mounted directory internally.
1059
1060 The communication with GVFS is implemented via D-Bus messages.
1061 Therefore, your @value{emacsname} must have D-Bus integration,
1062 @pxref{Top, , D-Bus, dbus}.
1063
1064 @table @asis
1065 @item @option{afp}
1066 @cindex method afp
1067 @cindex afp method
1068
1069 Access to Mac OS X volumes via the Apple Filing Protocol is offered by
1070 this method. The access must always be performed with a leading
1071 volume (share) name, like @file{@trampfn{afp, user, host, /volume}}.
1072
1073
1074
1075 @item @option{dav}
1076 @cindex method dav
1077 @cindex method davs
1078 @cindex dav method
1079 @cindex davs method
1080
1081 This method provides access to WebDAV files and directories. There
1082 exists also the external method @option{davs}, which uses SSL
1083 encryption for the access.
1084
1085 Both methods support the port number specification as discussed above.
1086
1087
1088 @item @option{obex}
1089 @cindex method obex
1090 @cindex obex method
1091
1092 OBEX is an FTP-like access protocol for simple devices, like cell
1093 phones. For the time being, @value{tramp} only supports OBEX over Bluetooth.
1094
1095
1096 @item @option{sftp}
1097 @cindex method sftp
1098 @cindex sftp method
1099
1100 As you might expect, this method uses @command{sftp} in order to
1101 access the remote host. Contrary to the @option{ssh} and @option{scp}
1102 methods, it doesn't open an @command{ssh} session for login.
1103 Therefore, it could be used to access to remote hosts which refuse
1104 @command{ssh} for security reasons.
1105
1106
1107 @item @option{synce}
1108 @cindex method synce
1109 @cindex synce method
1110
1111 The @option{synce} method allows communication with Windows Mobile
1112 devices. Beside GVFS for mounting remote files and directories via
1113 FUSE, it also needs the SYNCE-GVFS plugin.
1114
1115 @end table
1116
1117 @vindex tramp-gvfs-methods
1118 @defopt tramp-gvfs-methods
1119 This custom option, a list, defines the external methods which shall
1120 be used with GVFS@. Per default, these are @option{afp},
1121 @option{dav}, @option{davs}, @option{obex}, @option{sftp} and
1122 @option{synce}. Other possible values are @option{ftp} and
1123 @option{smb}.
1124 @end defopt
1125 @end ifset
1126
1127
1128 @ifset emacsgw
1129 @node Gateway methods
1130 @section Gateway methods
1131 @cindex methods, gateway
1132 @cindex gateway methods
1133
1134 Gateway methods are not methods to access a remote host directly.
1135 These methods are intended to pass firewalls or proxy servers.
1136 Therefore, they can be used for proxy host declarations
1137 (@pxref{Multi-hops}) only.
1138
1139 A gateway method must always come along with a method which supports
1140 port setting. This is because @value{tramp} targets the accompanied
1141 method to @file{localhost#random_port}, from where the firewall or
1142 proxy server is accessed.
1143
1144 Gateway methods support user name and password declarations. These
1145 are used to authenticate towards the corresponding firewall or proxy
1146 server. They can be passed only if your friendly administrator has
1147 granted your access.
1148
1149 @table @asis
1150 @item @option{tunnel}
1151 @cindex method tunnel
1152 @cindex tunnel method
1153
1154 This method implements an HTTP tunnel via the @command{CONNECT}
1155 command (see RFC 2616, 2817). Any HTTP 1.1 compliant (proxy) server
1156 shall support this command.
1157
1158 As authentication method, only @option{Basic Authentication} (see RFC
1159 2617) is implemented so far. If no port number is given in the
1160 declaration, port @option{8080} is used for the proxy server.
1161
1162
1163 @item @option{socks}
1164 @cindex method socks
1165 @cindex socks method
1166
1167 The @command{socks} method provides access to SOCKSv5 servers (see
1168 RFC 1928). @option{Username/Password Authentication} according to RFC
1169 1929 is supported.
1170
1171 The default port number of the socks server is @option{1080}, if not
1172 specified otherwise.
1173
1174 @end table
1175 @end ifset
1176
1177
1178 @node Default Method
1179 @section Selecting a default method
1180 @cindex default method
1181
1182 @vindex tramp-default-method
1183 When you select an appropriate transfer method for your typical usage
1184 you should set the variable @code{tramp-default-method} to reflect that
1185 choice. This variable controls which method will be used when a method
1186 is not specified in the @value{tramp} file name. For example:
1187
1188 @lisp
1189 (setq tramp-default-method "ssh")
1190 @end lisp
1191
1192 @vindex tramp-default-method-alist
1193 You can also specify different methods for certain user/host
1194 combinations, via the variable @code{tramp-default-method-alist}. For
1195 example, the following two lines specify to use the @option{ssh}
1196 method for all user names matching @samp{john} and the @option{rsync}
1197 method for all host names matching @samp{lily}. The third line
1198 specifies to use the @option{su} method for the user @samp{root} on
1199 the host @samp{localhost}.
1200
1201 @lisp
1202 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1203 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1204 (add-to-list 'tramp-default-method-alist
1205 '("\\`localhost\\'" "\\`root\\'" "su"))
1206 @end lisp
1207
1208 @noindent
1209 See the documentation for the variable
1210 @code{tramp-default-method-alist} for more details.
1211
1212 External methods are normally preferable to inline methods, giving
1213 better performance.
1214
1215 @xref{Inline methods}.
1216 @xref{External methods}.
1217
1218 Another consideration with the selection of transfer methods is the
1219 environment you will use them in and, especially when used over the
1220 Internet, the security implications of your preferred method.
1221
1222 The @option{rsh} and @option{telnet} methods send your password as
1223 plain text as you log in to the remote host, as well as
1224 transferring the files in such a way that the content can easily be
1225 read from other hosts.
1226
1227 If you need to connect to remote systems that are accessible from the
1228 Internet, you should give serious thought to using @option{ssh} based
1229 methods to connect. These provide a much higher level of security,
1230 making it a non-trivial exercise for someone to obtain your password
1231 or read the content of the files you are editing.
1232
1233
1234 @subsection Which method is the right one for me?
1235 @cindex choosing the right method
1236
1237 Given all of the above, you are probably thinking that this is all fine
1238 and good, but it's not helping you to choose a method! Right you are.
1239 As a developer, we don't want to boss our users around but give them
1240 maximum freedom instead. However, the reality is that some users would
1241 like to have some guidance, so here I'll try to give you this guidance
1242 without bossing you around. You tell me whether it works @dots{}
1243
1244 My suggestion is to use an inline method. For large files, external
1245 methods might be more efficient, but I guess that most people will
1246 want to edit mostly small files. And if you access large text files,
1247 compression (driven by @var{tramp-inline-compress-start-size}) shall
1248 still result in good performance.
1249
1250 I guess that these days, most people can access a remote host by
1251 using @command{ssh}. So I suggest that you use the @option{ssh}
1252 method. So, type @kbd{C-x C-f @trampfn{ssh, root, otherhost,
1253 /etc/motd} @key{RET}} to edit the @file{/etc/motd} file on the other
1254 host.
1255
1256 If you can't use @option{ssh} to log in to the remote host, then
1257 select a method that uses a program that works. For instance, Windows
1258 users might like the @option{plink} method which uses the PuTTY
1259 implementation of @command{ssh}. Or you use Kerberos and thus like
1260 @option{krlogin}.
1261
1262 For the special case of editing files on the local host as another
1263 user, see the @option{su} or @option{sudo} methods. They offer
1264 shortened syntax for the @samp{root} account, like
1265 @file{@trampfn{su, , , /etc/motd}}.
1266
1267 People who edit large files may want to consider @option{scp} instead
1268 of @option{ssh}, or @option{pscp} instead of @option{plink}. These
1269 external methods are faster than inline methods for large files.
1270 Note, however, that external methods suffer from some limitations.
1271 Please try first whether you really get a noticeable speed advantage
1272 from using an external method! Maybe even for large files, inline
1273 methods are fast enough.
1274
1275
1276 @node Default User
1277 @section Selecting a default user
1278 @cindex default user
1279
1280 The user part of a @value{tramp} file name can be omitted. Usually,
1281 it is replaced by the user name you are logged in. Often, this is not
1282 what you want. A typical use of @value{tramp} might be to edit some
1283 files with root permissions on the local host. This case, you should
1284 set the variable @code{tramp-default-user} to reflect that choice.
1285 For example:
1286
1287 @lisp
1288 (setq tramp-default-user "root")
1289 @end lisp
1290
1291 @code{tramp-default-user} is regarded as obsolete, and will be removed
1292 soon.
1293
1294 @vindex tramp-default-user-alist
1295 You can also specify different users for certain method/host
1296 combinations, via the variable @code{tramp-default-user-alist}. For
1297 example, if you always have to use the user @samp{john} in the domain
1298 @samp{somewhere.else}, you can specify the following:
1299
1300 @lisp
1301 (add-to-list 'tramp-default-user-alist
1302 '("ssh" ".*\\.somewhere\\.else\\'" "john"))
1303 @end lisp
1304
1305 @noindent
1306 See the documentation for the variable @code{tramp-default-user-alist}
1307 for more details.
1308
1309 One trap to fall in must be known. If @value{tramp} finds a default
1310 user, this user will be passed always to the connection command as
1311 parameter (for example @command{ssh here.somewhere.else -l john}. If
1312 you have specified another user for your command in its configuration
1313 files, @value{tramp} cannot know it, and the remote access will fail.
1314 If you have specified in the given example in @file{~/.ssh/config} the
1315 lines
1316
1317 @example
1318 Host here.somewhere.else
1319 User lily
1320 @end example
1321
1322 @noindent
1323 than you must discard selecting a default user by @value{tramp}. This
1324 will be done by setting it to @code{nil} (or @samp{lily}, likewise):
1325
1326 @lisp
1327 (add-to-list 'tramp-default-user-alist
1328 '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
1329 @end lisp
1330
1331 The last entry in @code{tramp-default-user-alist} could be your
1332 default user you'll apply predominantly. You shall @emph{append} it
1333 to that list at the end:
1334
1335 @lisp
1336 (add-to-list 'tramp-default-user-alist '(nil nil "jonas") t)
1337 @end lisp
1338
1339
1340 @node Default Host
1341 @section Selecting a default host
1342 @cindex default host
1343
1344 @vindex tramp-default-host
1345 Finally, it is even possible to omit the host name part of a
1346 @value{tramp} file name. This case, the value of the variable
1347 @code{tramp-default-host} is used. Per default, it is initialized
1348 with the host name your local @value{emacsname} is running.
1349
1350 If you, for example, use @value{tramp} mainly to contact the host
1351 @samp{target} as user @samp{john}, you can specify:
1352
1353 @lisp
1354 (setq tramp-default-user "john"
1355 tramp-default-host "target")
1356 @end lisp
1357
1358 Then the simple file name @samp{@trampfn{ssh, , ,}} will connect you
1359 to John's home directory on target.
1360 @ifset emacs
1361 Note, however, that the most simplification @samp{/::} won't work,
1362 because @samp{/:} is the prefix for quoted file names.
1363 @end ifset
1364
1365 @vindex tramp-default-host-alist
1366 Like with methods and users, you can also specify different default
1367 hosts for certain method/user combinations via the variable
1368 @code{tramp-default-host-alist}. Usually, this isn't necessary,
1369 because @code{tramp-default-host} should be sufficient. For some
1370 methods, like @option{adb}, that default value must be overwritten,
1371 which is already the initial value of @code{tramp-default-host-alist}.
1372
1373 @noindent
1374 See the documentation for the variable @code{tramp-default-host-alist}
1375 for more details.
1376
1377
1378 @node Multi-hops
1379 @section Connecting to a remote host using multiple hops
1380 @cindex multi-hop
1381 @cindex proxy hosts
1382
1383 Sometimes, the methods described before are not sufficient.
1384 Sometimes, it is not possible to connect to a remote host using a
1385 simple command. For example, if you are in a secured network, you
1386 might have to log in to a bastion host first before you can connect to
1387 the outside world. Of course, the target host may also require a
1388 bastion host.
1389
1390 @vindex tramp-default-proxies-alist
1391 @defopt tramp-default-proxies-alist
1392 In order to specify multiple hops, it is possible to define a proxy
1393 host to pass through, via the custom option
1394 @option{tramp-default-proxies-alist}. This variable keeps a list of
1395 triples (@var{host} @var{user} @var{proxy}).
1396
1397 The first matching item specifies the proxy host to be passed for a
1398 file name located on a remote target matching @var{user}@@@var{host}.
1399 @var{host} and @var{user} are regular expressions or @code{nil}, which
1400 is interpreted as a regular expression which always matches.
1401
1402 @var{proxy} must be a Tramp file name which localname part is ignored.
1403 Method and user name on @var{proxy} are optional, which is interpreted
1404 with the default values.
1405 @ifset emacsgw
1406 The method must be an inline or gateway method (@pxref{Inline
1407 methods}, @pxref{Gateway methods}).
1408 @end ifset
1409 @ifclear emacsgw
1410 The method must be an inline method (@pxref{Inline methods}).
1411 @end ifclear
1412 If @var{proxy} is @code{nil}, no additional hop is required reaching
1413 @var{user}@@@var{host}.
1414
1415 If you, for example, must pass the host @samp{bastion.your.domain} as
1416 user @samp{bird} for any remote host which is not located in your local
1417 domain, you can set
1418
1419 @lisp
1420 (add-to-list 'tramp-default-proxies-alist
1421 '("\\." nil "@trampfn{ssh, bird, bastion.your.domain,}"))
1422 (add-to-list 'tramp-default-proxies-alist
1423 '("\\.your\\.domain\\'" nil nil))
1424 @end lisp
1425
1426 Please note the order of the code. @code{add-to-list} adds elements at the
1427 beginning of a list. Therefore, most relevant rules must be added last.
1428
1429 Proxy hosts can be cascaded. If there is another host called
1430 @samp{jump.your.domain}, which is the only one in your local domain who
1431 is allowed connecting @samp{bastion.your.domain}, you can add another
1432 rule:
1433
1434 @lisp
1435 (add-to-list 'tramp-default-proxies-alist
1436 '("\\`bastion\\.your\\.domain\\'"
1437 "\\`bird\\'"
1438 "@trampfn{ssh, , jump.your.domain,}"))
1439 @end lisp
1440
1441 @var{proxy} can contain the patterns @code{%h} or @code{%u}. These
1442 patterns are replaced by the strings matching @var{host} or
1443 @var{user}, respectively.
1444
1445 If you, for example, wants to work as @samp{root} on hosts in the
1446 domain @samp{your.domain}, but login as @samp{root} is disabled for
1447 non-local access, you might add the following rule:
1448
1449 @lisp
1450 (add-to-list 'tramp-default-proxies-alist
1451 '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh, , %h,}"))
1452 @end lisp
1453
1454 Opening @file{@trampfn{sudo, , randomhost.your.domain,}} would connect
1455 first @samp{randomhost.your.domain} via @code{ssh} under your account
1456 name, and perform @code{sudo -u root} on that host afterwards. It is
1457 important to know that the given method is applied on the host which
1458 has been reached so far. @code{sudo -u root}, applied on your local
1459 host, wouldn't be useful here.
1460
1461 @var{host}, @var{user} and @var{proxy} can also be Lisp forms. These
1462 forms are evaluated, and must return a string, or @code{nil}. The
1463 previous example could be generalized then: For all hosts except my
1464 local one connect via @command{ssh} first, and apply @command{sudo -u
1465 root} afterwards:
1466
1467 @lisp
1468 (add-to-list 'tramp-default-proxies-alist
1469 '(nil "\\`root\\'" "@trampfn{ssh, , %h,}"))
1470 (add-to-list 'tramp-default-proxies-alist
1471 '((regexp-quote (system-name)) nil nil))
1472 @end lisp
1473
1474 This is the recommended configuration to work as @samp{root} on remote
1475 Ubuntu hosts.
1476
1477 @ifset emacsgw
1478 Finally, @code{tramp-default-proxies-alist} can be used to pass
1479 firewalls or proxy servers. Imagine your local network has a host
1480 @samp{proxy.your.domain} which is used on port 3128 as HTTP proxy to
1481 the outer world. Your friendly administrator has granted you access
1482 under your user name to @samp{host.other.domain} on that proxy
1483 server.@footnote{HTTP tunnels are intended for secure SSL/TLS
1484 communication. Therefore, many proxy server restrict the tunnels to
1485 related target ports. You might need to run your ssh server on your
1486 target host @samp{host.other.domain} on such a port, like 443 (https).
1487 See @uref{http://savannah.gnu.org/maintenance/CvsFromBehindFirewall}
1488 for discussion of ethical issues.} You would need to add the
1489 following rule:
1490
1491 @lisp
1492 (add-to-list 'tramp-default-proxies-alist
1493 '("\\`host\\.other\\.domain\\'" nil
1494 "@trampfn{tunnel, , proxy.your.domain#3128,}"))
1495 @end lisp
1496
1497 Gateway methods can be declared as first hop only in a multiple hop
1498 chain.
1499 @end ifset
1500 @end defopt
1501
1502 Hops to be passed tend to be restricted firewalls and alike.
1503 Sometimes they offer limited features only, like running @command{rbash}
1504 (restricted bash). This must be told to @value{tramp}.
1505
1506 @vindex tramp-restricted-shell-hosts-alist
1507 @defopt tramp-restricted-shell-hosts-alist
1508 This custom option keeps a list of regular expressions, which denote
1509 hosts running a registered shell like @command{rbash}. Those hosts
1510 can be used as proxies only.
1511
1512 If the bastion host from the example above runs a restricted shell,
1513 you shall apply
1514
1515 @lisp
1516 (add-to-list 'tramp-restricted-shell-hosts-alist
1517 "\\`bastion\\.your\\.domain\\'")
1518 @end lisp
1519 @end defopt
1520
1521
1522 @node Customizing Methods
1523 @section Using Non-Standard Methods
1524 @cindex customizing methods
1525 @cindex using non-standard methods
1526 @cindex create your own methods
1527
1528 There is a variable @code{tramp-methods} which you can change if the
1529 predefined methods don't seem right.
1530
1531 For the time being, I'll refer you to the Lisp documentation of that
1532 variable, accessible with @kbd{C-h v tramp-methods @key{RET}}.
1533
1534
1535 @node Customizing Completion
1536 @section Selecting config files for user/host name completion
1537 @cindex customizing completion
1538 @cindex selecting config files
1539 @vindex tramp-completion-function-alist
1540
1541 The variable @code{tramp-completion-function-alist} is intended to
1542 customize which files are taken into account for user and host name
1543 completion (@pxref{File name completion}). For every method, it keeps
1544 a set of configuration files, accompanied by a Lisp function able to
1545 parse that file. Entries in @code{tramp-completion-function-alist}
1546 have the form (@var{method} @var{pair1} @var{pair2} @dots{}).
1547
1548 Each @var{pair} is composed of (@var{function} @var{file}).
1549 @var{function} is responsible to extract user names and host names
1550 from @var{file} for completion. There are two functions which access
1551 this variable:
1552
1553 @defun tramp-get-completion-function method
1554 This function returns the list of completion functions for @var{method}.
1555
1556 Example:
1557 @example
1558 (tramp-get-completion-function "rsh")
1559
1560 @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1561 (tramp-parse-rhosts "~/.rhosts"))
1562 @end example
1563 @end defun
1564
1565 @defun tramp-set-completion-function method function-list
1566 This function sets @var{function-list} as list of completion functions
1567 for @var{method}.
1568
1569 Example:
1570 @example
1571 (tramp-set-completion-function "ssh"
1572 '((tramp-parse-sconfig "/etc/ssh_config")
1573 (tramp-parse-sconfig "~/.ssh/config")))
1574
1575 @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1576 (tramp-parse-sconfig "~/.ssh/config"))
1577 @end example
1578 @end defun
1579
1580 The following predefined functions parsing configuration files exist:
1581
1582 @table @asis
1583 @item @code{tramp-parse-rhosts}
1584 @findex tramp-parse-rhosts
1585
1586 This function parses files which are syntactical equivalent to
1587 @file{~/.rhosts}. It returns both host names and user names, if
1588 specified.
1589
1590 @item @code{tramp-parse-shosts}
1591 @findex tramp-parse-shosts
1592
1593 This function parses files which are syntactical equivalent to
1594 @file{~/.ssh/known_hosts}. Since there are no user names specified
1595 in such files, it can return host names only.
1596
1597 @item @code{tramp-parse-sconfig}
1598 @findex tramp-parse-shosts
1599
1600 This function returns the host nicknames defined by @code{Host} entries
1601 in @file{~/.ssh/config} style files.
1602
1603 @item @code{tramp-parse-shostkeys}
1604 @findex tramp-parse-shostkeys
1605
1606 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1607 @file{~/ssh2/hostkeys/*}. Hosts are coded in file names
1608 @file{hostkey_@var{portnumber}_@var{host-name}.pub}. User names
1609 are always @code{nil}.
1610
1611 @item @code{tramp-parse-sknownhosts}
1612 @findex tramp-parse-shostkeys
1613
1614 Another SSH2 style parsing of directories like
1615 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}. This
1616 case, hosts names are coded in file names
1617 @file{@var{host-name}.@var{algorithm}.pub}. User names are always @code{nil}.
1618
1619 @item @code{tramp-parse-hosts}
1620 @findex tramp-parse-hosts
1621
1622 A function dedicated to @file{/etc/hosts} style files. It returns
1623 host names only.
1624
1625 @item @code{tramp-parse-passwd}
1626 @findex tramp-parse-passwd
1627
1628 A function which parses @file{/etc/passwd} like files. Obviously, it
1629 can return user names only.
1630
1631 @item @code{tramp-parse-netrc}
1632 @findex tramp-parse-netrc
1633
1634 Finally, a function which parses @file{~/.netrc} like files. This
1635 includes also @file{~/.authinfo}-style files.
1636
1637 @end table
1638
1639 If you want to keep your own data in a file, with your own structure,
1640 you might provide such a function as well. This function must meet
1641 the following conventions:
1642
1643 @defun my-tramp-parse file
1644 @var{file} must be either a file name on your host, or @code{nil}.
1645 The function must return a list of (@var{user} @var{host}), which are
1646 taken as candidates for user and host name completion.
1647
1648 Example:
1649 @example
1650 (my-tramp-parse "~/.my-tramp-hosts")
1651
1652 @result{} ((nil "toto") ("daniel" "melancholia"))
1653 @end example
1654 @end defun
1655
1656
1657 @node Password handling
1658 @section Reusing passwords for several connections
1659 @cindex passwords
1660
1661 Sometimes it is necessary to connect to the same remote host several
1662 times. Reentering passwords again and again would be annoying, when
1663 the chosen method does not support access without password prompt
1664 through own configuration.
1665
1666 The best recommendation is to use the method's own mechanism for
1667 password handling. Consider @command{ssh-agent} for @option{ssh}-like
1668 methods, or @command{pageant} for @option{plink}-like methods.
1669
1670 However, if you cannot apply such native password handling,
1671 @value{tramp} offers alternatives.
1672
1673
1674 @anchor{Using an authentication file}
1675 @subsection Using an authentication file
1676
1677 @vindex auth-sources
1678 The package @file{auth-source.el}, originally developed in No Gnus,
1679 offers the possibility to read passwords from a file, like FTP does it
1680 from @file{~/.netrc}. The default authentication file is
1681 @file{~/.authinfo.gpg}, this can be changed via the variable
1682 @code{auth-sources}.
1683
1684 @noindent
1685 A typical entry in the authentication file would be
1686
1687 @example
1688 machine melancholia port scp login daniel password geheim
1689 @end example
1690
1691 The port can be any @value{tramp} method (@pxref{Inline methods},
1692 @pxref{External methods}), to match only this method. When you omit
1693 the port, you match all @value{tramp} methods.
1694
1695 In case of problems, setting @code{auth-source-debug} to @code{t}
1696 gives useful debug messages.
1697
1698
1699 @anchor{Caching passwords}
1700 @subsection Caching passwords
1701
1702 If there is no authentication file, @value{tramp} caches the passwords
1703 entered by you. They will be reused next time if a connection needs
1704 them for the same user name and host name, independently of the
1705 connection method.
1706
1707 @vindex password-cache-expiry
1708 Passwords are not saved permanently, that means the password caching
1709 is limited to the lifetime of your @value{emacsname} session. You
1710 can influence the lifetime of password caching by customizing the
1711 variable @code{password-cache-expiry}. The value is the number of
1712 seconds how long passwords are cached. Setting it to @code{nil}
1713 disables the expiration.
1714
1715 @vindex password-cache
1716 If you don't like this feature for security reasons, password caching
1717 can be disabled totally by customizing the variable
1718 @code{password-cache} (setting it to @code{nil}).
1719
1720 Implementation Note: password caching is based on the package
1721 @file{password-cache.el}. For the time being, it is activated only
1722 when this package is seen in the @code{load-path} while loading
1723 @value{tramp}.
1724 @ifset installchapter
1725 If you don't use No Gnus, you can take @file{password.el} from the
1726 @value{tramp} @file{contrib} directory, see @ref{Installation
1727 parameters}.
1728 @end ifset
1729
1730
1731 @node Connection caching
1732 @section Reusing connection related information
1733 @cindex caching
1734
1735 @vindex tramp-persistency-file-name
1736 In order to reduce initial connection time, @value{tramp} stores
1737 connection related information persistently. The variable
1738 @code{tramp-persistency-file-name} keeps the file name where these
1739 information are written. Its default value is
1740 @ifset emacs
1741 @file{~/.emacs.d/tramp}.
1742 @end ifset
1743 @ifset xemacs
1744 @file{~/.xemacs/tramp}.
1745 @end ifset
1746 It is recommended to choose a local file name.
1747
1748 @value{tramp} reads this file during startup, and writes it when
1749 exiting @value{emacsname}. You can simply remove this file if
1750 @value{tramp} shall be urged to recompute these information next
1751 @value{emacsname} startup time.
1752
1753 Using such persistent information can be disabled by setting
1754 @code{tramp-persistency-file-name} to @code{nil}.
1755
1756 Once consequence of reusing connection related information is that
1757 @value{tramp} needs to distinguish hosts. If you, for example, run a
1758 local @code{sshd} on port 3001, which tunnels @command{ssh} to another
1759 host, you could access both @file{@trampfn{ssh, , localhost,}} and
1760 @file{@trampfn{ssh, , localhost#3001,}}. @value{tramp} would use the
1761 same host related information (like paths, Perl variants, etc) for
1762 both connections, although the information is valid only for one of
1763 them.
1764
1765 In order to avoid trouble, you must use another host name for one of
1766 the connections, like introducing a @option{Host} section in
1767 @file{~/.ssh/config} (@pxref{Frequently Asked Questions}) or applying
1768 multiple hops (@pxref{Multi-hops}).
1769
1770 When @value{tramp} detects a changed operating system version on a
1771 remote host (via the command @command{uname -sr}), it flushes all
1772 connection related information for this host, and opens the
1773 connection again.
1774
1775
1776 @node Predefined connection information
1777 @section Setting own connection related information
1778
1779 Sometimes, method specific arguments in @code{tramp-methods} do not
1780 fit your needs. Sometimes, @value{tramp} is not able to detect
1781 correct connection related information. In such cases, you could tell
1782 @value{tramp} which value it has to take. Since this could result in
1783 errors, it has to be used with care.
1784
1785 @vindex tramp-connection-properties
1786 Such settings can be performed via the list
1787 @code{tramp-connection-properties}. An entry in this list has the
1788 form @code{(@var{regexp} @var{property} @var{value})}. @var{regexp}
1789 matches remote file names for which a property shall be predefined.
1790 It can be @code{nil}. @var{property} is a string, and @var{value} the
1791 corresponding value.
1792
1793 @var{property} could be any method specific parameter found in
1794 @code{tramp-methods}. The parameter key in @code{tramp-methods} is a
1795 symbol name @code{tramp-<foo>}. In order to overwrite it,
1796 @var{property} must be the string @samp{<foo>}. If you, for example,
1797 want to change the remote shell to be used on a remote machine, you
1798 could apply
1799
1800 @lisp
1801 (add-to-list 'tramp-connection-properties
1802 (list (regexp-quote "@trampfn{ssh, user, randomhost.your.domain,}")
1803 "remote-shell" "/bin/ksh"))
1804 (add-to-list 'tramp-connection-properties
1805 (list (regexp-quote "@trampfn{ssh, user, randomhost.your.domain,}")
1806 "remote-shell-login" '("-")))
1807 @end lisp
1808
1809 This would overwrite the @code{tramp-remote-shell} and
1810 @code{tramp-remote-shell-login} parameters in @code{tramp-methods}, to
1811 be used on that remote host.
1812
1813 @var{property} could also be any property found in the file
1814 @code{tramp-persistency-file-name}.
1815
1816 A special property is @samp{busybox}. This must be set, if the remote
1817 host runs a very restricted busybox as shell, which closes the
1818 connection at will. Since there is no reliable test for this,
1819 @value{tramp} must be indicated this way. Example:
1820
1821 @lisp
1822 (add-to-list 'tramp-connection-properties
1823 (list (regexp-quote "@trampfn{ssh, user, randomhost.your.domain,}")
1824 "busybox" t))
1825 @end lisp
1826
1827
1828 @node Remote programs
1829 @section How @value{tramp} finds and uses programs on the remote host
1830
1831 @value{tramp} depends on a number of programs on the remote host in order to
1832 function, including @command{ls}, @command{test}, @command{find} and
1833 @command{cat}.
1834
1835 In addition to these required tools, there are various tools that may be
1836 required based on the connection method. See @ref{Inline methods} and
1837 @ref{External methods} for details on these.
1838
1839 Certain other tools, such as @command{perl} (or @command{perl5}) and
1840 @command{grep} will be used if they can be found. When they are
1841 available, they are used to improve the performance and accuracy of
1842 remote file access.
1843
1844 @vindex tramp-remote-path
1845 @vindex tramp-default-remote-path
1846 @vindex tramp-own-remote-path
1847 @defopt tramp-remote-path
1848 When @value{tramp} connects to the remote host, it searches for the
1849 programs that it can use. The custom option
1850 @option{tramp-remote-path} controls the directories searched on the
1851 remote host.
1852
1853 By default, this is set to a reasonable set of defaults for most
1854 hosts. The symbol @code{tramp-default-remote-path} is a place
1855 holder, it is replaced by the list of directories received via the
1856 command @command{getconf PATH} on your remote host. For example,
1857 on Debian GNU/Linux this is @file{/bin:/usr/bin}, whereas on Solaris
1858 this is @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin}.
1859 It is recommended to apply this symbol on top of
1860 @option{tramp-remote-path}.
1861
1862 It is possible, however, that your local (or remote ;) system
1863 administrator has put the tools you want in some obscure local
1864 directory.
1865
1866 In this case, you can still use them with @value{tramp}. You simply
1867 need to add code to your @file{.emacs} to add the directory to the
1868 remote path. This will then be searched by @value{tramp} when you
1869 connect and the software found.
1870
1871 To add a directory to the remote search path, you could use code such
1872 as:
1873
1874 @lisp
1875 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1876 @end lisp
1877
1878 Another possibility is to reuse the path settings of your remote
1879 account when you log in. Usually, these settings are overwritten,
1880 because they might not be useful for @value{tramp}. The place holder
1881 @code{tramp-own-remote-path} preserves these settings. You can
1882 activate it via
1883
1884 @lisp
1885 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1886 @end lisp
1887 @end defopt
1888
1889 @value{tramp} caches several information, like the Perl binary
1890 location. The changed remote search path wouldn't affect these
1891 settings. In order to force @value{tramp} to recompute these values,
1892 you must exit @value{emacsname}, remove your persistency file
1893 (@pxref{Connection caching}), and restart @value{emacsname}.
1894
1895
1896 @node Remote shell setup
1897 @section Remote shell setup hints
1898 @cindex remote shell setup
1899 @cindex @file{.profile} file
1900 @cindex @file{.login} file
1901 @cindex shell init files
1902
1903 As explained in the @ref{Overview} section, @value{tramp} connects to the
1904 remote host and talks to the shell it finds there. Of course, when you
1905 log in, the shell executes its init files. Suppose your init file
1906 requires you to enter the birth date of your mother; clearly @value{tramp}
1907 does not know this and hence fails to log you in to that host.
1908
1909 There are different possible strategies for pursuing this problem. One
1910 strategy is to enable @value{tramp} to deal with all possible situations.
1911 This is a losing battle, since it is not possible to deal with
1912 @emph{all} situations. The other strategy is to require you to set up
1913 the remote host such that it behaves like @value{tramp} expects. This might
1914 be inconvenient because you have to invest a lot of effort into shell
1915 setup before you can begin to use @value{tramp}.
1916
1917 The package, therefore, pursues a combined approach. It tries to
1918 figure out some of the more common setups, and only requires you to
1919 avoid really exotic stuff. For example, it looks through a list of
1920 directories to find some programs on the remote host. And also, it
1921 knows that it is not obvious how to check whether a file exists, and
1922 therefore it tries different possibilities. (On some hosts and
1923 shells, the command @command{test -e} does the trick, on some hosts
1924 the shell builtin doesn't work but the program @command{/usr/bin/test
1925 -e} or @command{/bin/test -e} works. And on still other hosts,
1926 @command{ls -d} is the right way to do this.)
1927
1928 Below you find a discussion of a few things that @value{tramp} does not deal
1929 with, and that you therefore have to set up correctly.
1930
1931 @table @asis
1932 @item @var{shell-prompt-pattern}
1933 @vindex shell-prompt-pattern
1934
1935 After logging in to the remote host, @value{tramp} has to wait for the remote
1936 shell startup to finish before it can send commands to the remote
1937 shell. The strategy here is to wait for the shell prompt. In order to
1938 recognize the shell prompt, the variable @code{shell-prompt-pattern} has
1939 to be set correctly to recognize the shell prompt on the remote host.
1940
1941 Note that @value{tramp} requires the match for @code{shell-prompt-pattern}
1942 to be at the end of the buffer. Many people have something like the
1943 following as the value for the variable: @samp{^[^>$][>$] *}. Now
1944 suppose your shell prompt is @code{a <b> c $ }. In this case,
1945 @value{tramp} recognizes the @code{>} character as the end of the prompt,
1946 but it is not at the end of the buffer.
1947
1948 @item @var{tramp-shell-prompt-pattern}
1949 @vindex tramp-shell-prompt-pattern
1950
1951 This regular expression is used by @value{tramp} in the same way as
1952 @code{shell-prompt-pattern}, to match prompts from the remote shell.
1953 This second variable exists because the prompt from the remote shell
1954 might be different from the prompt from a local shell---after all,
1955 the whole point of @value{tramp} is to log in to remote hosts as a
1956 different user. The default value of
1957 @code{tramp-shell-prompt-pattern} is the same as the default value of
1958 @code{shell-prompt-pattern}, which is reported to work well in many
1959 circumstances.
1960
1961 @item @var{tramp-password-prompt-regexp}
1962 @vindex tramp-password-prompt-regexp
1963 @vindex tramp-wrong-passwd-regexp
1964
1965 During login, @value{tramp} might be forced to enter a password or a
1966 passphrase. The difference between both is that a password is
1967 requested from the shell on the remote host, while a passphrase is
1968 needed for accessing local authentication information, like your ssh
1969 key.
1970
1971 @var{tramp-password-prompt-regexp} handles the detection of such
1972 requests for English environments. When you use another localization
1973 of your (local or remote) host, you might need to adapt this. Example:
1974
1975 @lisp
1976 (setq
1977 tramp-password-prompt-regexp
1978 (concat
1979 "^.*"
1980 (regexp-opt
1981 '("passphrase" "Passphrase"
1982 ;; English
1983 "password" "Password"
1984 ;; Deutsch
1985 "passwort" "Passwort"
1986 ;; Français
1987 "mot de passe" "Mot de passe") t)
1988 ".*:\0? *"))
1989 @end lisp
1990
1991 In parallel, it might also be necessary to adapt
1992 @var{tramp-wrong-passwd-regexp}.
1993
1994 @item @command{tset} and other questions
1995 @cindex Unix command tset
1996 @cindex tset Unix command
1997
1998 Some people invoke the @command{tset} program from their shell startup
1999 scripts which asks the user about the terminal type of the shell.
2000 Maybe some shells ask other questions when they are started.
2001 @value{tramp} does not know how to answer these questions. There are
2002 two approaches for dealing with this problem. One approach is to take
2003 care that the shell does not ask any questions when invoked from
2004 @value{tramp}. You can do this by checking the @env{TERM}
2005 environment variable, it will be set to @code{dumb} when connecting.
2006
2007 @vindex tramp-terminal-type
2008 The variable @code{tramp-terminal-type} can be used to change this value
2009 to @code{dumb}.
2010
2011 @vindex tramp-actions-before-shell
2012 The other approach is to teach @value{tramp} about these questions. See
2013 the variable @code{tramp-actions-before-shell}. Example:
2014
2015 @lisp
2016 (defconst my-tramp-prompt-regexp
2017 (concat (regexp-opt '("Enter the birth date of your mother:") t)
2018 "\\s-*")
2019 "Regular expression matching my login prompt question.")
2020
2021 (defun my-tramp-action (proc vec)
2022 "Enter \"19000101\" in order to give a correct answer."
2023 (save-window-excursion
2024 (with-current-buffer (tramp-get-connection-buffer vec)
2025 (tramp-message vec 6 "\n%s" (buffer-string))
2026 (tramp-send-string vec "19000101"))))
2027
2028 (add-to-list 'tramp-actions-before-shell
2029 '(my-tramp-prompt-regexp my-tramp-action))
2030 @end lisp
2031
2032
2033 @item Environment variables named like users in @file{.profile}
2034
2035 If you have a user named frumple and set the variable @env{FRUMPLE} in
2036 your shell environment, then this might cause trouble. Maybe rename
2037 the variable to @env{FRUMPLE_DIR} or the like.
2038
2039 This weird effect was actually reported by a @value{tramp} user!
2040
2041
2042 @item Non-Bourne commands in @file{.profile}
2043
2044 After logging in to the remote host, @value{tramp} issues the command
2045 @command{exec /bin/sh}. (Actually, the command is slightly
2046 different.) When @command{/bin/sh} is executed, it reads some init
2047 files, such as @file{~/.shrc} or @file{~/.profile}.
2048
2049 Now, some people have a login shell which is not @code{/bin/sh} but a
2050 Bourne-ish shell such as bash or ksh. Some of these people might put
2051 their shell setup into the files @file{~/.shrc} or @file{~/.profile}.
2052 This way, it is possible for non-Bourne constructs to end up in those
2053 files. Then, @command{exec /bin/sh} might cause the Bourne shell to
2054 barf on those constructs.
2055
2056 As an example, imagine somebody putting @command{export FOO=bar} into
2057 the file @file{~/.profile}. The standard Bourne shell does not
2058 understand this syntax and will emit a syntax error when it reaches
2059 this line.
2060
2061 Another example is the tilde (@code{~}) character, say when adding
2062 @file{~/bin} to @env{PATH}. Many Bourne shells will not expand this
2063 character, and since there is usually no directory whose name consists
2064 of the single character tilde, strange things will happen.
2065
2066 What can you do about this?
2067
2068 Well, one possibility is to make sure that everything in
2069 @file{~/.shrc} and @file{~/.profile} on all remote hosts is
2070 Bourne-compatible. In the above example, instead of @command{export
2071 FOO=bar}, you might use @command{FOO=bar; export FOO} instead.
2072
2073 The other possibility is to put your non-Bourne shell setup into some
2074 other files. For example, bash reads the file @file{~/.bash_profile}
2075 instead of @file{~/.profile}, if the former exists. So bash
2076 aficionados just rename their @file{~/.profile} to
2077 @file{~/.bash_profile} on all remote hosts, and Bob's your uncle.
2078
2079 The @value{tramp} developers would like to circumvent this problem, so
2080 if you have an idea about it, please tell us. However, we are afraid
2081 it is not that simple: before saying @command{exec /bin/sh},
2082 @value{tramp} does not know which kind of shell it might be talking
2083 to. It could be a Bourne-ish shell like ksh or bash, or it could be a
2084 csh derivative like tcsh, or it could be zsh, or even rc. If the
2085 shell is Bourne-ish already, then it might be prudent to omit the
2086 @command{exec /bin/sh} step. But how to find out if the shell is
2087 Bourne-ish?
2088
2089
2090 @item Interactive shell prompt
2091
2092 @value{tramp} redefines the shell prompt in order to parse the shell's
2093 output robustly. When calling an interactive shell by @kbd{M-x
2094 shell}, this doesn't look nice.
2095
2096 You can redefine the shell prompt by checking the environment variable
2097 @env{INSIDE_EMACS}, which is set by @value{tramp}, in your startup
2098 script @file{~/.emacs_SHELLNAME}. @env{SHELLNAME} might be the string
2099 @code{bash} or similar, in case of doubt you could set it the
2100 environment variable @env{ESHELL} in your @file{.emacs}:
2101
2102 @lisp
2103 (setenv "ESHELL" "bash")
2104 @end lisp
2105
2106 Your file @file{~/.emacs_SHELLNAME} could contain code like
2107
2108 @example
2109 # Reset the prompt for remote Tramp shells.
2110 if [ "$@{INSIDE_EMACS/*tramp*/tramp@}" == "tramp" ] ; then
2111 PS1="[\u@@\h \w]$ "
2112 fi
2113 @end example
2114
2115 @ifinfo
2116 @ifset emacs
2117 @xref{Interactive Shell, , , @value{emacsdir}}.
2118 @end ifset
2119 @end ifinfo
2120
2121 @item @command{busybox} / @command{nc}
2122 @cindex Unix command nc
2123 @cindex nc Unix command
2124
2125 The @command{nc} command will be used with the @option{nc} method. On
2126 the remote host, a listener will be installed. Unfortunately, the
2127 command line syntax for this has been changed with the different
2128 @command{busybox} versions. @value{tramp} uses the following syntax
2129 (see @code{tramp-methods}):
2130
2131 @example
2132 # nc -l -p 42
2133 @end example
2134
2135 If your remote @command{nc} refuses to accept the @command{-p}
2136 parameter, you could overwrite the syntax with the following form:
2137
2138 @lisp
2139 (add-to-list
2140 'tramp-connection-properties
2141 `(,(regexp-quote "192.168.0.1") "remote-copy-args" (("-l") ("%r"))))
2142 @end lisp
2143
2144 @noindent
2145 with @samp{192.168.0.1} being the IP address of your remote host
2146 (@pxref{Predefined connection information}).
2147
2148 @end table
2149
2150
2151 @node Android shell setup
2152 @section Android shell setup hints
2153 @cindex android shell setup
2154
2155 Android devices use a restricted shell. They can be accessed via the
2156 @option{adb} method. However, this restricts the access to a USB
2157 connection, and it requires the installation of the Android SDK on the
2158 local host.
2159
2160 When an @command{sshd} process runs on the Android device, like
2161 provided by the @code{SSHDroid} app, any @option{ssh}-based method can
2162 be used. This requires some special settings.
2163
2164 The default shell @code{/bin/sh} does not exist. Instead, you shall
2165 use just @code{sh}, which invokes the shell installed on the device.
2166 You can instruct @value{tramp} by this form:
2167
2168 @lisp
2169 (add-to-list 'tramp-connection-properties
2170 (list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
2171 @end lisp
2172
2173 @noindent
2174 with @samp{192.168.0.26} being the IP address of your Android device
2175 (@pxref{Predefined connection information}).
2176
2177 The user settings for the @env{PATH} environment variable must be
2178 preserved. It has also been reported, that the commands in
2179 @file{/system/xbin} are better suited than the ones in
2180 @file{/system/bin}. Add these setting:
2181
2182 @lisp
2183 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
2184 (add-to-list 'tramp-remote-path "/system/xbin")
2185 @end lisp
2186
2187 @noindent
2188 If the Android device is not @samp{rooted}, you must give the shell a
2189 writable directory for temporary files:
2190
2191 @lisp
2192 (add-to-list 'tramp-remote-process-environment "TMPDIR=$HOME")
2193 @end lisp
2194
2195 @noindent
2196 Now you shall be able to open a remote connection with @kbd{C-x C-f
2197 @trampfn{ssh, , 192.168.0.26#2222, }}, given that @command{sshd}
2198 listens on port @samp{2222}.
2199
2200 It is also recommended to add a corresponding entry to your
2201 @file{~/.ssh/config} for that connection, like
2202
2203 @example
2204 Host android
2205 HostName 192.168.0.26
2206 User root
2207 Port 2222
2208 @end example
2209
2210 @noindent
2211 In this case, you must change the setting for the remote shell to
2212
2213 @lisp
2214 (add-to-list 'tramp-connection-properties
2215 (list (regexp-quote "android") "remote-shell" "sh"))
2216 @end lisp
2217
2218 @noindent
2219 You would open the connection with @kbd{C-x C-f @trampfn{ssh, ,
2220 android, }} then.
2221
2222
2223 @node Auto-save and Backup
2224 @section Auto-save and Backup configuration
2225 @cindex auto-save
2226 @cindex backup
2227 @ifset emacs
2228 @vindex backup-directory-alist
2229 @end ifset
2230 @ifset xemacs
2231 @vindex bkup-backup-directory-info
2232 @end ifset
2233
2234 Normally, @value{emacsname} writes backup files to the same directory
2235 as the original files, but this behavior can be changed via the
2236 variable
2237 @ifset emacs
2238 @code{backup-directory-alist}.
2239 @end ifset
2240 @ifset xemacs
2241 @code{bkup-backup-directory-info}.
2242 @end ifset
2243 In connection with @value{tramp}, this can have unexpected side
2244 effects. Suppose that you specify that all backups should go to the
2245 directory @file{~/.emacs.d/backups/}, and then you edit the file
2246 @file{@trampfn{su, root, localhost, /etc/secretfile}}. The effect is
2247 that the backup file will be owned by you and not by root, thus
2248 possibly enabling others to see it even if they were not intended to
2249 see it.
2250
2251 When
2252 @ifset emacs
2253 @code{backup-directory-alist}
2254 @end ifset
2255 @ifset xemacs
2256 @code{bkup-backup-directory-info}
2257 @end ifset
2258 is @code{nil} (the default), such problems do not occur.
2259
2260 Therefore, it is useful to set special values for @value{tramp}
2261 files. For example, the following statement effectively ``turns off''
2262 the effect of
2263 @ifset emacs
2264 @code{backup-directory-alist}
2265 @end ifset
2266 @ifset xemacs
2267 @code{bkup-backup-directory-info}
2268 @end ifset
2269 for @value{tramp} files:
2270
2271 @ifset emacs
2272 @lisp
2273 (add-to-list 'backup-directory-alist
2274 (cons tramp-file-name-regexp nil))
2275 @end lisp
2276 @end ifset
2277 @ifset xemacs
2278 @lisp
2279 (require 'backup-dir)
2280 (add-to-list 'bkup-backup-directory-info
2281 (list tramp-file-name-regexp ""))
2282 @end lisp
2283 @end ifset
2284
2285 @ifset emacs
2286 It is also possible to disable backups depending on the used method.
2287 The following code disables backups for the @option{su} and
2288 @option{sudo} methods:
2289
2290 @lisp
2291 (setq backup-enable-predicate
2292 (lambda (name)
2293 (and (normal-backup-enable-predicate name)
2294 (not
2295 (let ((method (file-remote-p name 'method)))
2296 (when (stringp method)
2297 (member method '("su" "sudo"))))))))
2298 @end lisp
2299 @end ifset
2300
2301
2302 Another possibility is to use the @value{tramp} variable
2303 @ifset emacs
2304 @code{tramp-backup-directory-alist}.
2305 @end ifset
2306 @ifset xemacs
2307 @code{tramp-bkup-backup-directory-info}.
2308 @end ifset
2309 This variable has the same meaning like
2310 @ifset emacs
2311 @code{backup-directory-alist}.
2312 @end ifset
2313 @ifset xemacs
2314 @code{bkup-backup-directory-info}.
2315 @end ifset
2316 If a @value{tramp} file is backed up, and DIRECTORY is an absolute
2317 local file name, DIRECTORY is prepended with the @value{tramp} file
2318 name prefix of the file to be backed up.
2319
2320 @noindent
2321 Example:
2322
2323 @ifset emacs
2324 @lisp
2325 (add-to-list 'backup-directory-alist
2326 (cons "." "~/.emacs.d/backups/"))
2327 (setq tramp-backup-directory-alist backup-directory-alist)
2328 @end lisp
2329 @end ifset
2330 @ifset xemacs
2331 @lisp
2332 (require 'backup-dir)
2333 (add-to-list 'bkup-backup-directory-info
2334 (list "." "~/.emacs.d/backups/" 'full-path))
2335 (setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
2336 @end lisp
2337 @end ifset
2338
2339 @noindent
2340 The backup file name of @file{@trampfn{su, root, localhost,
2341 /etc/secretfile}} would be
2342 @ifset emacs
2343 @file{@trampfn{su, root, localhost,
2344 ~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
2345 @end ifset
2346 @ifset xemacs
2347 @file{@trampfn{su, root, localhost,
2348 ~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
2349 @end ifset
2350
2351 The same problem can happen with auto-saving files.
2352 @ifset emacs
2353 The variable @code{auto-save-file-name-transforms} keeps information,
2354 on which directory an auto-saved file should go. By default, it is
2355 initialized for @value{tramp} files to the local temporary directory.
2356
2357 On some versions of @value{emacsname}, namely the version built for
2358 Debian GNU/Linux, the variable @code{auto-save-file-name-transforms}
2359 contains the directory where @value{emacsname} was built. A
2360 workaround is to manually set the variable to a sane value.
2361
2362 If auto-saved files should go into the same directory as the original
2363 files, @code{auto-save-file-name-transforms} should be set to @code{nil}.
2364
2365 Another possibility is to set the variable
2366 @code{tramp-auto-save-directory} to a proper value.
2367 @end ifset
2368 @ifset xemacs
2369 For this purpose you can set the variable @code{auto-save-directory}
2370 to a proper value.
2371 @end ifset
2372
2373
2374 @node Windows setup hints
2375 @section Issues with Cygwin ssh
2376 @cindex Cygwin, issues
2377
2378 This section needs a lot of work! Please help.
2379
2380 @cindex method sshx with Cygwin
2381 @cindex sshx method with Cygwin
2382 The recent Cygwin installation of @command{ssh} works only with a
2383 Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x
2384 eshell}, and starting @kbd{ssh test.host}. The problem is evident
2385 if you see a message like this:
2386
2387 @example
2388 Pseudo-terminal will not be allocated because stdin is not a terminal.
2389 @end example
2390
2391 Older @command{ssh} versions of Cygwin are told to cooperate with
2392 @value{tramp} selecting @option{sshx} as the connection method. You
2393 can find information about setting up Cygwin in their FAQ at
2394 @uref{http://cygwin.com/faq/}.
2395
2396 @cindex method scpx with Cygwin
2397 @cindex scpx method with Cygwin
2398 If you wish to use the @option{scpx} connection method, then you might
2399 have the problem that @value{emacsname} calls @command{scp} with a
2400 Windows file name such as @code{c:/foo}. The Cygwin version of
2401 @command{scp} does not know about Windows file names and interprets
2402 this as a remote file name on the host @code{c}.
2403
2404 One possible workaround is to write a wrapper script for @option{scp}
2405 which converts the Windows file name to a Cygwinized file name.
2406
2407 @cindex Cygwin and ssh-agent
2408 @cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
2409 If you want to use either @option{ssh} based method on Windows, then
2410 you might encounter problems with @command{ssh-agent}. Using this
2411 program, you can avoid typing the pass-phrase every time you log in.
2412 However, if you start @value{emacsname} from a desktop shortcut, then
2413 the environment variable @env{SSH_AUTH_SOCK} is not set and so
2414 @value{emacsname} and thus @value{tramp} and thus @command{ssh} and
2415 @command{scp} started from @value{tramp} cannot communicate with
2416 @command{ssh-agent}. It works better to start @value{emacsname} from
2417 the shell.
2418
2419 If anyone knows how to start @command{ssh-agent} under Windows in such a
2420 way that desktop shortcuts can profit, please holler. I don't really
2421 know anything at all about Windows@dots{}
2422
2423
2424 @node Usage
2425 @chapter Using @value{tramp}
2426 @cindex using @value{tramp}
2427
2428 Once you have installed @value{tramp} it will operate fairly
2429 transparently. You will be able to access files on any remote host
2430 that you can log in to as though they were local.
2431
2432 Files are specified to @value{tramp} using a formalized syntax specifying the
2433 details of the system to connect to. This is similar to the syntax used
2434 by the @value{ftppackagename} package.
2435
2436 @cindex type-ahead
2437 Something that might happen which surprises you is that
2438 @value{emacsname} remembers all your keystrokes, so if you see a
2439 password prompt from @value{emacsname}, say, and hit @kbd{@key{RET}}
2440 twice instead of once, then the second keystroke will be processed by
2441 @value{emacsname} after @value{tramp} has done its thing. Why, this
2442 type-ahead is normal behavior, you say. Right you are, but be aware
2443 that opening a remote file might take quite a while, maybe half a
2444 minute when a connection needs to be opened. Maybe after half a
2445 minute you have already forgotten that you hit that key!
2446
2447 @menu
2448 * File name Syntax:: @value{tramp} file name conventions.
2449 * File name completion:: File name completion.
2450 * Ad-hoc multi-hops:: Declaring multiple hops in the file name.
2451 * Remote processes:: Integration with other @value{emacsname} packages.
2452 * Cleanup remote connections:: Cleanup remote connections.
2453 @end menu
2454
2455
2456 @node File name Syntax
2457 @section @value{tramp} file name conventions
2458 @cindex file name syntax
2459 @cindex file name examples
2460
2461 To access the file @var{localname} on the remote host @var{host}
2462 you would specify the file name @file{@trampfn{, , host,
2463 localname}}. This will connect to @var{host} and transfer the file
2464 using the default method. @xref{Default Method}.
2465
2466 Some examples of @value{tramp} file names are shown below.
2467
2468 @table @file
2469 @item @value{prefix}melancholia@value{postfix}.emacs
2470 Edit the file @file{.emacs} in your home directory on the host
2471 @code{melancholia}.
2472
2473 @item @value{prefix}melancholia.danann.net@value{postfix}.emacs
2474 This edits the same file, using the fully qualified domain name of
2475 the host.
2476
2477 @item @value{prefix}melancholia@value{postfix}~/.emacs
2478 This also edits the same file; the @file{~} is expanded to your
2479 home directory on the remote host, just like it is locally.
2480
2481 @item @value{prefix}melancholia@value{postfix}~daniel/.emacs
2482 This edits the file @file{.emacs} in the home directory of the user
2483 @code{daniel} on the host @code{melancholia}. The @file{~<user>}
2484 construct is expanded to the home directory of that user on the remote
2485 host.
2486
2487 @item @value{prefix}melancholia@value{postfix}/etc/squid.conf
2488 This edits the file @file{/etc/squid.conf} on the host
2489 @code{melancholia}.
2490
2491 @end table
2492
2493 @var{host} can also be an IPv4 or IPv6 address, like in
2494 @file{@trampfn{, , 127.0.0.1, .emacs}} or @file{@trampfn{, ,
2495 @value{ipv6prefix}::1@value{ipv6postfix}, .emacs}}.
2496 @ifset emacs
2497 For syntactical reasons, IPv6 addresses must be embedded in square
2498 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
2499 @end ifset
2500
2501 Unless you specify a different name to use, @value{tramp} will use the
2502 current local user name as the remote user name to log in with. If you
2503 need to log in as a different user, you can specify the user name as
2504 part of the file name.
2505
2506 To log in to the remote host as a specific user, you use the syntax
2507 @file{@trampfn{, user, host, path/to.file}}. That means that
2508 connecting to @code{melancholia} as @code{daniel} and editing
2509 @file{.emacs} in your home directory you would specify
2510 @file{@trampfn{, daniel, melancholia, .emacs}}.
2511
2512 It is also possible to specify other file transfer methods
2513 (@pxref{Inline methods}, @pxref{External methods}) as part of the
2514 file name.
2515 @ifset emacs
2516 This is done by putting the method before the user and host name, as
2517 in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the
2518 trailing colon).
2519 @end ifset
2520 @ifset xemacs
2521 This is done by replacing the initial @file{@value{prefix}} with
2522 @file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing
2523 slash!).
2524 @end ifset
2525 The user, host and file specification remain the same.
2526
2527 So, to connect to the host @code{melancholia} as @code{daniel},
2528 using the @option{ssh} method to transfer files, and edit
2529 @file{.emacs} in my home directory I would specify the file name
2530 @file{@trampfn{ssh, daniel, melancholia, .emacs}}.
2531
2532 @ifset emacs
2533 A remote file name containing a host name only, which is equal to a
2534 method name, is not allowed. If such a host name is used, it must
2535 always be preceded by an explicit method name, like
2536 @file{@value{prefix}ssh@value{postfixhop}ssh@value{postfix}}.
2537 @end ifset
2538
2539 Finally, for some methods it is possible to specify a different port
2540 number than the default one, given by the method. This is specified
2541 by adding @file{#<port>} to the host name, like in @file{@trampfn{ssh,
2542 daniel, melancholia#42, .emacs}}.
2543
2544
2545 @node File name completion
2546 @section File name completion
2547 @cindex file name completion
2548
2549 File name completion works with @value{tramp} for completion of method
2550 names, of user names and of host names as well as for completion of
2551 file names on remote hosts.
2552 @ifset emacs
2553 In order to enable this, partial completion must be activated in your
2554 @file{.emacs}.
2555 @ifinfo
2556 @xref{Completion Options, , , @value{emacsdir}}.
2557 @end ifinfo
2558 @end ifset
2559
2560 If you, for example, type @kbd{C-x C-f @value{prefix}t
2561 @key{TAB}}, @value{tramp} might give you as result the choice for
2562
2563 @example
2564 @c @multitable {@trampfn{telnet, , melancholia.danann.net,}} {@trampfn{telnet, , 192.168.0.1,}}
2565 @multitable @columnfractions .5 .5
2566 @ifset emacs
2567 @item @value{prefixhop}telnet@value{postfixhop} @tab tmp/
2568 @item @value{prefixhop}toto@value{postfix} @tab
2569 @end ifset
2570 @ifset xemacs
2571 @item @value{prefixhop}telnet@value{postfixhop} @tab @value{prefixhop}toto@value{postfix}
2572 @end ifset
2573 @end multitable
2574 @end example
2575
2576 @samp{@value{prefixhop}telnet@value{postfixhop}}
2577 is a possible completion for the respective method,
2578 @ifset emacs
2579 @samp{tmp/} stands for the directory @file{/tmp} on your local host,
2580 @end ifset
2581 and @samp{@value{prefixhop}toto@value{postfix}}
2582 might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
2583 file (given you're using default method @option{ssh}).
2584
2585 If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
2586 @samp{@value{prefix}telnet@value{postfixhop}}.
2587 Next @kbd{@key{TAB}} brings you all host names @value{tramp} detects in
2588 your @file{/etc/hosts} file, let's say
2589
2590 @example
2591 @multitable @columnfractions .5 .5
2592 @c @multitable {@trampfn{telnet, , melancholia.danann.net,}} {@trampfn{telnet, , 192.168.0.1,}}
2593 @item @trampfn{telnet, , 127.0.0.1,} @tab @trampfn{telnet, , 192.168.0.1,}
2594 @item @trampfn{telnet, , @value{ipv6prefix}::1@value{ipv6postfix},} @tab @trampfn{telnet, , localhost,}
2595 @item @trampfn{telnet, , melancholia.danann.net,} @tab @trampfn{telnet, , melancholia,}
2596 @end multitable
2597 @end example
2598
2599 Now you can choose the desired host, and you can continue to
2600 complete file names on that host.
2601
2602 If the configuration files (@pxref{Customizing Completion}), which
2603 @value{tramp} uses for analysis of completion, offer user names, those user
2604 names will be taken into account as well.
2605
2606 Remote hosts which have been visited in the past and kept
2607 persistently (@pxref{Connection caching}) will be offered too.
2608
2609 Once the remote host identification is completed, it comes to
2610 file name completion on the remote host. This works pretty much like
2611 for files on the local host, with the exception that minibuffer
2612 killing via a double-slash works only on the file name part, except
2613 that file name part starts with @file{//}.
2614 @ifset emacs
2615 A triple-slash stands for the default behavior.
2616 @end ifset
2617 @ifinfo
2618 @xref{Minibuffer File, , , @value{emacsdir}}.
2619 @end ifinfo
2620
2621 @noindent
2622 Example:
2623
2624 @example
2625 @ifset emacs
2626 @kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//etc} @key{TAB}}
2627 @print{} @trampfn{telnet, , melancholia, /etc}
2628
2629 @kbd{C-x C-f @trampfn{telnet, , melancholia, //etc} @key{TAB}}
2630 @print{} /etc
2631
2632 @kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin///etc} @key{TAB}}
2633 @print{} /etc
2634 @end ifset
2635
2636 @ifset xemacs
2637 @kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//}}
2638 @print{} @trampfn{telnet, , melancholia, /}
2639
2640 @kbd{C-x C-f @trampfn{telnet, , melancholia, //}}
2641 @print{} /
2642 @end ifset
2643 @end example
2644
2645 A remote directory might have changed its contents out of
2646 @value{emacsname} control, for example by creation or deletion of
2647 files by other processes. Therefore, during file name completion, the
2648 remote directory contents are reread regularly in order to detect such
2649 changes, which would be invisible otherwise (@pxref{Connection caching}).
2650
2651 @vindex tramp-completion-reread-directory-timeout
2652 @defopt tramp-completion-reread-directory-timeout
2653 This custom option defines the number of seconds since last remote
2654 command before rereading a directory contents. A value of 0 would
2655 require an immediate reread during file name completion, @code{nil}
2656 means to use always cached values for the directory contents.
2657 @end defopt
2658
2659
2660 @node Ad-hoc multi-hops
2661 @section Declaring multiple hops in the file name
2662 @cindex multi-hop, ad-hoc
2663 @cindex proxy hosts, ad-hoc
2664
2665 Multiple hops are configured with the variable
2666 @code{tramp-default-proxies-alist} (@pxref{Multi-hops}). However,
2667 sometimes it is desirable to reach a remote host immediately, without
2668 configuration changes. This can be reached by an ad-hoc specification
2669 of the proxies.
2670
2671 A proxy looks like a remote file name specification without the local
2672 file name part. It is prepended to the target remote file name,
2673 separated by @samp{|}. As an example, a remote file on
2674 @samp{you@@remotehost}, passing the proxy @samp{bird@@bastion}, could
2675 be opened by
2676
2677 @example
2678 @c @kbd{C-x C-f @trampfn{ssh@value{postfixhop}bird@@bastion|ssh, you,
2679 @c remotehost, /path}}
2680 @kbd{C-x C-f @value{prefix}ssh@value{postfixhop}bird@@bastion|ssh@value{postfixhop}you@@remotehost@value{postfix}/path}
2681 @end example
2682
2683 Multiple hops can be cascaded, separating all proxies by @samp{|}.
2684 The proxies can also contain the patterns @code{%h} or @code{%u}.
2685
2686 The ad-hoc definition is added on the fly to
2687 @code{tramp-default-proxies-alist}. Therefore, during the lifetime of
2688 the @value{emacsname} session it is not necessary to enter this ad-hoc
2689 specification, again. The remote file name @samp{@trampfn{ssh, you,
2690 remotehost, /path}} would be sufficient from now on.
2691
2692 @vindex tramp-save-ad-hoc-proxies
2693 @defopt tramp-save-ad-hoc-proxies
2694 This custom option controls whether ad-hoc definitions are kept
2695 persistently in @option{tramp-default-proxies-alist}. That means,
2696 those definitions are available also for future @value{emacsname}
2697 sessions.
2698 @end defopt
2699
2700
2701 @node Remote processes
2702 @section Integration with other @value{emacsname} packages
2703 @cindex compile
2704 @cindex recompile
2705
2706 @value{tramp} supports running processes on a remote host. This
2707 allows to exploit @value{emacsname} packages without modification for
2708 remote file names. It does not work for the @option{ftp} method.
2709 Association of a pty, as specified in @code{start-file-process}, is
2710 not supported.
2711
2712 @code{process-file} and @code{start-file-process} work on the remote
2713 host when the variable @code{default-directory} is remote:
2714
2715 @lisp
2716 (let ((default-directory "/ssh:remote.host:"))
2717 (start-file-process "grep" (get-buffer-create "*grep*")
2718 "/bin/sh" "-c" "grep -e tramp *"))
2719 @end lisp
2720
2721 @ifset emacsgvfs
2722 If the remote host is mounted via GVFS (see @ref{GVFS based methods}),
2723 the remote filesystem is mounted locally. Therefore, there are no
2724 remote processes; all processes run still locally on your host with
2725 an adapted @code{default-directory}. This section does not apply for
2726 such connection methods.
2727 @end ifset
2728
2729 Remote processes are started when a corresponding command is executed
2730 from a buffer belonging to a remote file or directory. Up to now, the
2731 packages @file{compile.el} (commands like @code{compile} and
2732 @code{grep}) and @file{gud.el} (@code{gdb} or @code{perldb}) have been
2733 integrated. Integration of further packages is planned, any help for
2734 this is welcome!
2735
2736 When your program is not found in the default search path
2737 @value{tramp} sets on the remote host, you should either use an
2738 absolute path, or extend @code{tramp-remote-path} (see @ref{Remote
2739 programs}):
2740
2741 @lisp
2742 (add-to-list 'tramp-remote-path "~/bin")
2743 (add-to-list 'tramp-remote-path "/appli/pub/bin")
2744 @end lisp
2745
2746 The environment for your program can be adapted by customizing
2747 @code{tramp-remote-process-environment}. This variable is a list of
2748 strings. It is structured like @code{process-environment}. Each
2749 element is a string of the form @samp{ENVVARNAME=VALUE}. An entry
2750 @samp{ENVVARNAME=} disables the corresponding environment variable,
2751 which might have been set in your init file like @file{~/.profile}.
2752
2753 @noindent
2754 Adding an entry can be performed via @code{add-to-list}:
2755
2756 @lisp
2757 (add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
2758 @end lisp
2759
2760 Changing or removing an existing entry is not encouraged. The default
2761 values are chosen for proper @value{tramp} work. Nevertheless, if for
2762 example a paranoid system administrator disallows changing the
2763 @env{HISTORY} environment variable, you can customize
2764 @code{tramp-remote-process-environment}, or you can apply the
2765 following code in your @file{.emacs}:
2766
2767 @lisp
2768 (let ((process-environment tramp-remote-process-environment))
2769 (setenv "HISTORY" nil)
2770 (setq tramp-remote-process-environment process-environment))
2771 @end lisp
2772
2773 When running @code{process-file} or @code{start-file-process} on a
2774 remote @code{default-directory}, the default settings in
2775 @code{process-environment} are not used as it is the case for local
2776 processes. However, if you need environment variables other than set
2777 in @code{tramp-remote-process-environment}, you can let-bind them to
2778 @code{process-environment}. Only those variables will be set then:
2779
2780 @lisp
2781 (let ((process-environment (cons "HGPLAIN=1" process-environment)))
2782 (process-file @dots{}))
2783 @end lisp
2784
2785 This works only for environment variables which are not set already in
2786 @code{process-environment}.
2787
2788 If you use other @value{emacsname} packages which do not run
2789 out-of-the-box on a remote host, please let us know. We will try to
2790 integrate them as well. @xref{Bug Reports}.
2791
2792
2793 @subsection Running remote programs that create local X11 windows
2794
2795 If you want to run a remote program, which shall connect the X11
2796 server you are using with your local host, you can set the
2797 @env{DISPLAY} environment variable on the remote host:
2798
2799 @lisp
2800 (add-to-list 'tramp-remote-process-environment
2801 (format "DISPLAY=%s" (getenv "DISPLAY")))
2802 @end lisp
2803
2804 @noindent
2805 @code{(getenv "DISPLAY")} shall return a string containing a host
2806 name, which can be interpreted on the remote host; otherwise you might
2807 use a fixed host name. Strings like @code{:0} cannot be used properly
2808 on the remote host.
2809
2810 Another trick might be that you put @code{ForwardX11 yes} or
2811 @code{ForwardX11Trusted yes} to your @file{~/.ssh/config} file for
2812 that host.
2813
2814
2815 @subsection Running @code{shell} on a remote host
2816 @cindex shell
2817
2818 Calling @kbd{M-x shell} in a buffer related to a remote host runs the
2819 local shell as defined in @option{shell-file-name}. This might be
2820 also a valid file name for a shell to be applied on the remote host,
2821 but it will fail at least when your local and remote hosts belong to
2822 different system types, like @samp{windows-nt} and @samp{gnu/linux}.
2823
2824 You must set the variable @option{explicit-shell-file-name} to the
2825 shell file name on the remote host, in order to start that shell on
2826 the remote host.
2827
2828 @ifset emacs
2829 Starting with Emacs 24 this won't be necessary, if you call
2830 @code{shell} interactively. You will be asked for the remote shell
2831 file name, if you are on a remote buffer, and if
2832 @option{explicit-shell-file-name} is equal to @code{nil}.
2833 @end ifset
2834
2835
2836 @subsection Running @code{shell-command} on a remote host
2837 @cindex shell-command
2838
2839 @code{shell-command} allows to execute commands in a shell, either
2840 synchronously, either asynchronously. This works also on remote
2841 hosts. Example:
2842
2843 @example
2844 @kbd{C-x C-f @trampfn{sudo, , , } @key{RET}}
2845 @kbd{M-! tail -f /var/log/syslog.log & @key{RET}}
2846 @end example
2847
2848 You will see the buffer @file{*Async Shell Command*}, containing the
2849 continuous output of the @command{tail} command.
2850
2851 @ifset emacs
2852 A similar behavior can be reached by @kbd{M-x auto-revert-tail-mode},
2853 if available.
2854 @end ifset
2855
2856
2857 @subsection Running @code{eshell} on a remote host
2858 @cindex eshell
2859
2860 @value{tramp} is integrated into @file{eshell.el}. That is, you can
2861 open an interactive shell on your remote host, and run commands there.
2862 After you have started @kbd{M-x eshell}, you could perform commands
2863 like this:
2864
2865 @example
2866 @b{~ $} cd @trampfn{sudo, , , /etc} @key{RET}
2867 @b{@trampfn{sudo, root, host, /etc} $} hostname @key{RET}
2868 host
2869 @b{@trampfn{sudo, root, host, /etc} $} id @key{RET}
2870 uid=0(root) gid=0(root) groups=0(root)
2871 @b{@trampfn{sudo, root, host, /etc} $} find-file shadow @key{RET}
2872 #<buffer shadow>
2873 @b{@trampfn{sudo, root, host, /etc} $}
2874 @end example
2875
2876 @ifset emacs
2877 Since @value{emacsname} 23.2, @code{eshell} has also an own
2878 implementation of the @code{su} and @code{sudo} commands. Both
2879 commands change the default directory of the @file{*eshell*} buffer to
2880 the value related to the user the command has switched to. This works
2881 even on remote hosts, adding silently a corresponding entry to the
2882 variable @code{tramp-default-proxies-alist} (@pxref{Multi-hops}):
2883
2884 @example
2885 @b{~ $} cd @trampfn{ssh, user, remotehost, /etc} @key{RET}
2886 @b{@trampfn{ssh, user, remotehost, /etc} $} find-file shadow @key{RET}
2887 File is not readable: @trampfn{ssh, user, remotehost, /etc/shadow}
2888 @b{@trampfn{ssh, user, remotehost, /etc} $} sudo find-file shadow @key{RET}
2889 #<buffer shadow>
2890
2891 @b{@trampfn{ssh, user, remotehost, /etc} $} su - @key{RET}
2892 @b{@trampfn{su, root, remotehost, /root} $} id @key{RET}
2893 uid=0(root) gid=0(root) groups=0(root)
2894 @b{@trampfn{su, root, remotehost, /root} $}
2895 @end example
2896 @end ifset
2897
2898
2899 @anchor{Running a debugger on a remote host}
2900 @subsection Running a debugger on a remote host
2901 @cindex gud
2902 @cindex gdb
2903 @cindex perldb
2904
2905 @file{gud.el} offers a unified interface to several symbolic
2906 debuggers
2907 @ifset emacs
2908 @ifinfo
2909 (@ref{Debuggers, , , @value{emacsdir}}).
2910 @end ifinfo
2911 @end ifset
2912 With @value{tramp}, it is possible to debug programs on
2913 remote hosts. You can call @code{gdb} with a remote file name:
2914
2915 @example
2916 @kbd{M-x gdb @key{RET}}
2917 @b{Run gdb (like this):} gdb --annotate=3 @trampfn{ssh, , host, ~/myprog} @key{RET}
2918 @end example
2919
2920 The file name can also be relative to a remote default directory.
2921 Given you are in a buffer that belongs to the remote directory
2922 @trampfn{ssh, , host, /home/user}, you could call
2923
2924 @example
2925 @kbd{M-x perldb @key{RET}}
2926 @b{Run perldb (like this):} perl -d myprog.pl @key{RET}
2927 @end example
2928
2929 It is not possible to use just the absolute local part of a remote
2930 file name as program to debug, like @kbd{perl -d
2931 /home/user/myprog.pl}, though.
2932
2933 Arguments of the program to be debugged are taken literally. That
2934 means, file names as arguments must be given as ordinary relative or
2935 absolute file names, without any remote specification.
2936
2937
2938 @subsection Running remote processes on Windows hosts
2939 @cindex winexe
2940 @cindex powershell
2941
2942 With the help of the @command{winexe} it is possible tu run processes
2943 on a remote Windows host. @value{tramp} has implemented this for
2944 @code{process-file} and @code{start-file-process}.
2945
2946 The variable @code{tramp-smb-winexe-program} must contain the file
2947 name of your local @command{winexe} command. On the remote host,
2948 Powershell V2.0 must be installed; it is used to run the remote
2949 process.
2950
2951 In order to open a remote shell on the Windows host via @kbd{M-x
2952 shell}, you must set the variables @option{explicit-shell-file-name}
2953 and @option{explicit-*-args}. If you want, for example, run
2954 @command{cmd}, you must set:
2955
2956 @lisp
2957 (setq explicit-shell-file-name "cmd"
2958 explicit-cmd-args '("/q"))
2959 @end lisp
2960
2961 @noindent
2962 In case of running @command{powershell} as remote shell, the settings are
2963
2964 @lisp
2965 (setq explicit-shell-file-name "powershell"
2966 explicit-powershell-args '("-file" "-"))
2967 @end lisp
2968
2969
2970 @node Cleanup remote connections
2971 @section Cleanup remote connections
2972 @cindex cleanup
2973
2974 Sometimes it is useful to cleanup remote connections. The following
2975 commands support this.
2976
2977 @deffn Command tramp-cleanup-connection vec
2978 This command flushes all connection related objects. @option{vec} is
2979 the internal representation of a remote connection. Called
2980 interactively, the command offers all active remote connections in the
2981 minibuffer as remote file name prefix like @file{@trampfn{method,
2982 user, host, }}. The cleanup includes password cache (@pxref{Password
2983 handling}), file cache, connection cache (@pxref{Connection caching}),
2984 connection buffers.
2985 @end deffn
2986
2987 @deffn Command tramp-cleanup-this-connection
2988 This command flushes all objects of the current buffer's remote
2989 connection. The same objects are removed as in
2990 @code{tramp-cleanup-connection}.
2991 @end deffn
2992
2993 @deffn Command tramp-cleanup-all-connections
2994 This command flushes objects for all active remote connections. The
2995 same objects are removed as in @code{tramp-cleanup-connection}.
2996 @end deffn
2997
2998 @deffn Command tramp-cleanup-all-buffers
2999 Like in @code{tramp-cleanup-all-connections}, all remote connections
3000 are cleaned up. Additionally all buffers, which are related to a
3001 remote connection, are killed.
3002 @end deffn
3003
3004
3005 @node Bug Reports
3006 @chapter Reporting Bugs and Problems
3007 @cindex bug reports
3008
3009 Bugs and problems with @value{tramp} are actively worked on by the
3010 development team. Feature requests and suggestions are also more than
3011 welcome.
3012
3013 The @value{tramp} mailing list is a great place to get information on
3014 working with @value{tramp}, solving problems and general discussion
3015 and advice on topics relating to the package. It is moderated so
3016 non-subscribers can post but messages will be delayed, possibly up to
3017 48 hours (or longer in case of holidays), until the moderator approves
3018 your message.
3019
3020 The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
3021 this address go to all the subscribers. This is @emph{not} the address
3022 to send subscription requests to.
3023
3024 Subscribing to the list is performed via
3025 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/,
3026 the @value{tramp} Mail Subscription Page}.
3027
3028 @ifset emacs
3029 @ifset installchapter
3030 Before sending a bug report, you could check whether @value{tramp}
3031 works at all. Run the test suite on your local host, @ref{Testing}.
3032 @end ifset
3033 @end ifset
3034
3035 @findex tramp-bug
3036 To report a bug in @value{tramp}, you should execute @kbd{M-x
3037 tramp-bug}. This will automatically generate a buffer with the details
3038 of your system and @value{tramp} version.
3039
3040 When submitting a bug report, please try to describe in excruciating
3041 detail the steps required to reproduce the problem, the setup of the
3042 remote host and any special conditions that exist. You should also
3043 check that your problem is not described already in @xref{Frequently
3044 Asked Questions}.
3045
3046 If you can identify a minimal test case that reproduces the problem,
3047 include that with your bug report. This will make it much easier for
3048 the development team to analyze and correct the problem.
3049
3050 Sometimes, there might be also problems due to Tramp caches. Flush
3051 all caches before running the test, @ref{Cleanup remote connections}.
3052
3053 Before reporting the bug, you should set the verbosity level to 6
3054 (@pxref{Traces and Profiles, Traces}) in the @file{~/.emacs} file and
3055 repeat the bug. Then, include the contents of the @file{*tramp/foo*}
3056 and @file{*debug tramp/foo*} buffers in your bug report. A verbosity
3057 level greater than 6 will produce a very huge debug buffer, which is
3058 mostly not necessary for the analysis.
3059
3060 Please be aware that, with a verbosity level of 6 or greater, the
3061 contents of files and directories will be included in the debug
3062 buffer. Passwords you've typed will never be included there.
3063
3064
3065 @node Frequently Asked Questions
3066 @chapter Frequently Asked Questions
3067 @cindex frequently asked questions
3068 @cindex FAQ
3069
3070 @itemize @bullet
3071 @item
3072 Where can I get the latest @value{tramp}?
3073
3074 @value{tramp} is available under the URL below.
3075
3076 @noindent
3077 @uref{ftp://ftp.gnu.org/gnu/tramp/}
3078
3079 @noindent
3080 There is also a Savannah project page.
3081
3082 @noindent
3083 @uref{http://savannah.gnu.org/projects/tramp/}
3084
3085
3086 @item
3087 Which systems does it work on?
3088
3089 The package has been used successfully on Emacs 22, Emacs 23, Emacs
3090 24, XEmacs 21 (starting with 21.4), and SXEmacs 22.
3091
3092 The package was intended to work on Unix, and it really expects a
3093 Unix-like system on the remote end (except the @option{smb} method),
3094 but some people seemed to have some success getting it to work on MS
3095 Windows XP/Vista/7 @value{emacsname}.
3096
3097
3098 @item
3099 How could I speed up @value{tramp}?
3100
3101 In the backstage, @value{tramp} needs a lot of operations on the
3102 remote host. The time for transferring data from and to the remote
3103 host as well as the time needed to perform the operations there count.
3104 In order to speed up @value{tramp}, one could either try to avoid some
3105 of the operations, or one could try to improve their performance.
3106
3107 Use an external method, like @option{scp}.
3108
3109 Use caching. This is already enabled by default. Information about
3110 the remote host as well as the remote files are cached for reuse. The
3111 information about remote hosts is kept in the file specified in
3112 @code{tramp-persistency-file-name}. Keep this file. If you are
3113 confident that files on remote hosts are not changed out of
3114 @value{emacsname}' control, set @code{remote-file-name-inhibit-cache}
3115 to @code{nil}. Set also @code{tramp-completion-reread-directory-timeout}
3116 to @code{nil}, @ref{File name completion}.
3117
3118 Disable version control. If you access remote files which are not
3119 under version control, a lot of check operations can be avoided by
3120 disabling VC@. This can be achieved by
3121
3122 @lisp
3123 (setq vc-ignore-dir-regexp
3124 (format "\\(%s\\)\\|\\(%s\\)"
3125 vc-ignore-dir-regexp
3126 tramp-file-name-regexp))
3127 @end lisp
3128
3129 Disable excessive traces. The default trace level of @value{tramp},
3130 defined in the variable @code{tramp-verbose}, is 3. You should
3131 increase this level only temporarily, hunting bugs.
3132
3133
3134 @item
3135 @value{tramp} does not connect to the remote host
3136
3137 When @value{tramp} does not connect to the remote host, there are three
3138 reasons heading the bug mailing list:
3139
3140 @itemize @minus
3141 @item
3142 Unknown characters in the prompt
3143
3144 @value{tramp} needs to recognize the prompt on the remote host
3145 after execution any command. This is not possible when the prompt
3146 contains unknown characters like escape sequences for coloring. This
3147 should be avoided on the remote side. @xref{Remote shell setup}. for
3148 setting the regular expression detecting the prompt.
3149
3150 You can check your settings after an unsuccessful connection by
3151 switching to the @value{tramp} connection buffer @file{*tramp/foo*},
3152 setting the cursor at the top of the buffer, and applying the expression
3153
3154 @example
3155 @kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
3156 @end example
3157
3158 If it fails, or the cursor is not moved at the end of the buffer, your
3159 prompt is not recognized correctly.
3160
3161 A special problem is the zsh shell, which uses left-hand side and
3162 right-hand side prompts in parallel. Therefore, it is necessary to
3163 disable the zsh line editor on the remote host. You shall add to
3164 @file{~/.zshrc} the following command:
3165
3166 @example
3167 [ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
3168 @end example
3169
3170 Similar fancy prompt settings are known from the fish shell. Here you
3171 must add in @file{~/.config/fish/config.fish}:
3172
3173 @example
3174 function fish_prompt
3175 if test $TERM = "dumb"
3176 echo "\$ "
3177 else
3178 @dots{}
3179 end
3180 end
3181 @end example
3182
3183 Furthermore it has been reported, that @value{tramp} (like sshfs,
3184 incidentally) doesn't work with WinSSHD due to strange prompt settings.
3185
3186 @item
3187 Echoed characters after login
3188
3189 When the remote host opens an echoing shell, there might be control
3190 characters in the welcome message. @value{tramp} tries to suppress
3191 such echoes via the @command{stty -echo} command, but sometimes this
3192 command is not reached, because the echoed output has confused
3193 @value{tramp} already. In such situations it might be helpful to use
3194 the @option{sshx} or @option{scpx} methods, which allocate a pseudo tty.
3195 @xref{Inline methods}.
3196
3197 @item
3198 @value{tramp} doesn't transfer strings with more than 500 characters
3199 correctly
3200
3201 On some few systems, the implementation of @code{process-send-string}
3202 seems to be broken for longer strings. It is reported for HP-UX,
3203 FreeBSD and Tru64 Unix, for example. This case, you should customize
3204 the variable @code{tramp-chunksize} to 500. For a description how to
3205 determine whether this is necessary see the documentation of
3206 @code{tramp-chunksize}.
3207
3208 Additionally, it will be useful to set @code{file-precious-flag} to
3209 @code{t} for @value{tramp} files. Then the file contents will be
3210 written into a temporary file first, which is checked for correct
3211 checksum.
3212 @ifinfo
3213 @pxref{Saving Buffers, , , elisp}
3214 @end ifinfo
3215
3216 @lisp
3217 (add-hook
3218 'find-file-hook
3219 (lambda ()
3220 (when (file-remote-p default-directory)
3221 (set (make-local-variable 'file-precious-flag) t))))
3222 @end lisp
3223 @end itemize
3224
3225
3226 @item
3227 @value{tramp} does not recognize hung @command{ssh} sessions
3228
3229 When your network connection is down, @command{ssh} sessions might
3230 hang. @value{tramp} cannot detect it safely, because it still sees a
3231 running @command{ssh} process. Timeouts cannot be used as well,
3232 because it cannot be predicted how long a remote command will last,
3233 for example when copying very large files.
3234
3235 Therefore, you must configure the @command{ssh} process to die
3236 in such a case. The following entry in @file{~/.ssh/config} would do
3237 the job:
3238
3239 @example
3240 Host *
3241 ServerAliveInterval 5
3242 @end example
3243
3244
3245 @item
3246 @value{tramp} does not use my @command{ssh} @code{ControlPath}
3247
3248 Your @code{ControlPath} setting will be overwritten by @command{ssh}
3249 sessions initiated by @value{tramp}. This is because a master
3250 session, initiated outside @value{emacsname}, could be closed, which
3251 would stall all other @command{ssh} sessions for that host inside
3252 @value{emacsname}.
3253
3254 Consequently, if you connect to a remote host via @value{tramp}, you
3255 might be prompted for a password again, even if you have established
3256 already an @command{ssh} connection to that host. Further
3257 @value{tramp} connections to that host, for example in order to run a
3258 process on that host, will reuse that initial @command{ssh}
3259 connection.
3260
3261 If your @command{ssh} version supports the @code{ControlPersist}
3262 option, you could customize the variable
3263 @code{tramp-ssh-controlmaster-options} to use your @code{ControlPath},
3264 for example:
3265
3266 @lisp
3267 (setq tramp-ssh-controlmaster-options
3268 (concat
3269 "-o ControlPath=/tmp/ssh-ControlPath-%%r@@%%h:%%p "
3270 "-o ControlMaster=auto -o ControlPersist=yes"))
3271 @end lisp
3272
3273 Note, that "%r", "%h" and "%p" must be encoded as "%%r", "%%h" and
3274 "%%p", respectively.
3275
3276 These settings can be suppressed, if they are configured properly in
3277 your @file{~/.ssh/config}:
3278
3279 @lisp
3280 (setq tramp-use-ssh-controlmaster-options nil)
3281 @end lisp
3282
3283
3284 @item
3285 File name completion does not work with @value{tramp}
3286
3287 When you log in to the remote host, do you see the output of
3288 @command{ls} in color? If so, this may be the cause of your problems.
3289
3290 @command{ls} outputs @acronym{ANSI} escape sequences that your terminal
3291 emulator interprets to set the colors. These escape sequences will
3292 confuse @value{tramp} however.
3293
3294 In your @file{.bashrc}, @file{.profile} or equivalent on the remote
3295 host you probably have an alias configured that adds the option
3296 @option{--color=yes} or @option{--color=auto}.
3297
3298 You should remove that alias and ensure that a new login @emph{does not}
3299 display the output of @command{ls} in color. If you still cannot use
3300 file name completion, report a bug to the @value{tramp} developers.
3301
3302
3303 @item
3304 File name completion does not work in large directories
3305
3306 @value{tramp} uses globbing for some operations. (Globbing means to use the
3307 shell to expand wildcards such as @samp{*.c}.) This might create long
3308 command lines, especially in directories with many files. Some shells
3309 choke on long command lines, or don't cope well with the globbing
3310 itself.
3311
3312 If you have a large directory on the remote end, you may wish to execute
3313 a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
3314 Note that you must first start the right shell, which might be
3315 @command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
3316 of those supports tilde expansion.
3317
3318
3319 @item
3320 How can I get notified when @value{tramp} file transfers are complete?
3321
3322 The following snippet can be put in your @file{~/.emacs} file. It
3323 makes @value{emacsname} beep after reading from or writing to the
3324 remote host.
3325
3326 @lisp
3327 (defadvice tramp-handle-write-region
3328 (after tramp-write-beep-advice activate)
3329 "Make tramp beep after writing a file."
3330 (interactive)
3331 (beep))
3332
3333 (defadvice tramp-handle-do-copy-or-rename-file
3334 (after tramp-copy-beep-advice activate)
3335 "Make tramp beep after copying a file."
3336 (interactive)
3337 (beep))
3338
3339 (defadvice tramp-handle-insert-file-contents
3340 (after tramp-insert-beep-advice activate)
3341 "Make tramp beep after inserting a file."
3342 (interactive)
3343 (beep))
3344 @end lisp
3345
3346
3347 @ifset emacs
3348 @item
3349 I'ld like to get a Visual Warning when working in a sudo:ed context
3350
3351 When you are working with @samp{root} privileges, it might be useful
3352 to get an indication in the buffer's modeline. The following code,
3353 tested with @value{emacsname} 22.1, does the job. You should put it
3354 into your @file{~/.emacs}:
3355
3356 @lisp
3357 (defun my-mode-line-function ()
3358 (when (string-match "^/su\\(do\\)?:" default-directory)
3359 (setq mode-line-format
3360 (format-mode-line mode-line-format 'font-lock-warning-face))))
3361
3362 (add-hook 'find-file-hook 'my-mode-line-function)
3363 (add-hook 'dired-mode-hook 'my-mode-line-function)
3364 @end lisp
3365 @end ifset
3366
3367
3368 @ifset emacs
3369 @item
3370 I'ld like to see a host indication in the mode line when I'm remote
3371
3372 The following code has been tested with @value{emacsname} 22.1. You
3373 should put it into your @file{~/.emacs}:
3374
3375 @lisp
3376 (defconst my-mode-line-buffer-identification
3377 (list
3378 '(:eval
3379 (let ((host-name
3380 (if (file-remote-p default-directory)
3381 (tramp-file-name-host
3382 (tramp-dissect-file-name default-directory))
3383 (system-name))))
3384 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
3385 (substring host-name 0 (match-beginning 1))
3386 host-name)))
3387 ": %12b"))
3388
3389 (setq-default
3390 mode-line-buffer-identification
3391 my-mode-line-buffer-identification)
3392
3393 (add-hook
3394 'dired-mode-hook
3395 (lambda ()
3396 (setq
3397 mode-line-buffer-identification
3398 my-mode-line-buffer-identification)))
3399 @end lisp
3400
3401 Since @value{emacsname} 23.1, the mode line contains an indication if
3402 @code{default-directory} for the current buffer is on a remote host.
3403 The corresponding tooltip includes the name of that host. If you
3404 still want the host name as part of the mode line, you can use the
3405 example above, but the @code{:eval} clause can be simplified:
3406
3407 @lisp
3408 '(:eval
3409 (let ((host-name
3410 (or (file-remote-p default-directory 'host)
3411 (system-name))))
3412 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
3413 (substring host-name 0 (match-beginning 1))
3414 host-name)))
3415 @end lisp
3416 @end ifset
3417
3418
3419 @ifset emacs
3420 @item
3421 My remote host does not understand default directory listing options
3422
3423 @value{emacsname} computes the @command{dired} options depending on
3424 the local host you are working. If your @command{ls} command on the
3425 remote host does not understand those options, you can change them
3426 like this:
3427
3428 @lisp
3429 (add-hook
3430 'dired-before-readin-hook
3431 (lambda ()
3432 (when (file-remote-p default-directory)
3433 (setq dired-actual-switches "-al"))))
3434 @end lisp
3435 @end ifset
3436
3437
3438 @item
3439 There's this @file{~/.sh_history} file on the remote host which keeps
3440 growing and growing. What's that?
3441
3442 Sometimes, @value{tramp} starts @command{ksh} on the remote host for
3443 tilde expansion. Maybe @command{ksh} saves the history by default.
3444 @value{tramp} tries to turn off saving the history, but maybe you have
3445 to help. For example, you could put this in your @file{.kshrc}:
3446
3447 @example
3448 if [ -f $HOME/.sh_history ] ; then
3449 /bin/rm $HOME/.sh_history
3450 fi
3451 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
3452 unset HISTFILE
3453 fi
3454 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
3455 unset HISTSIZE
3456 fi
3457 @end example
3458
3459 Furthermore, if you use an @option{ssh}-based method, you could add
3460 the following line to your @file{~/.ssh/environment} file:
3461
3462 @example
3463 HISTFILE=/dev/null
3464 @end example
3465
3466
3467 @item There are longish file names to type. How to shorten this?
3468
3469 Let's say you need regularly access to @file{@trampfn{ssh, news,
3470 news.my.domain, /opt/news/etc}}, which is boring to type again and
3471 again. The following approaches can be mixed:
3472
3473 @enumerate
3474
3475 @item Use default values for method and user name:
3476
3477 You can define default methods and user names for hosts,
3478 (@pxref{Default Method}, @pxref{Default User}):
3479
3480 @lisp
3481 (setq tramp-default-method "ssh"
3482 tramp-default-user "news")
3483 @end lisp
3484
3485 The file name left to type would be
3486 @kbd{C-x C-f @trampfn{, , news.my.domain, /opt/news/etc}}.
3487
3488 Note that there are some useful settings already. Accessing your
3489 local host as @samp{root} user, is possible just by @kbd{C-x C-f
3490 @trampfn{su, , ,}}.
3491
3492 @item Use configuration possibilities of your method:
3493
3494 Several connection methods (i.e., the programs used) offer powerful
3495 configuration possibilities (@pxref{Customizing Completion}). In the
3496 given case, this could be @file{~/.ssh/config}:
3497
3498 @example
3499 Host xy
3500 HostName news.my.domain
3501 User news
3502 @end example
3503
3504 The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
3505 /opt/news/etc}}. Depending on files in your directories, it is even
3506 possible to complete the host name with @kbd{C-x C-f
3507 @value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3508
3509 @item Use environment variables:
3510
3511 File names typed in the minibuffer can be expanded by environment
3512 variables. You can set them outside @value{emacsname}, or even with
3513 Lisp:
3514
3515 @lisp
3516 (setenv "xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")
3517 @end lisp
3518
3519 Then you need simply to type @kbd{C-x C-f $xy @key{RET}}, and here you
3520 are. The disadvantage is that you cannot edit the file name, because
3521 environment variables are not expanded during editing in the
3522 minibuffer.
3523
3524 @item Define own keys:
3525
3526 You can define your own key sequences in @value{emacsname}, which can
3527 be used instead of @kbd{C-x C-f}:
3528
3529 @lisp
3530 (global-set-key
3531 [(control x) (control y)]
3532 (lambda ()
3533 (interactive)
3534 (find-file
3535 (read-file-name
3536 "Find Tramp file: "
3537 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))))
3538 @end lisp
3539
3540 Simply typing @kbd{C-x C-y} would initialize the minibuffer for
3541 editing with your beloved file name.
3542
3543 See also @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the
3544 Emacs Wiki} for a more comprehensive example.
3545
3546 @item Define own abbreviation (1):
3547
3548 It is possible to define an own abbreviation list for expanding file
3549 names:
3550
3551 @lisp
3552 (add-to-list
3553 'directory-abbrev-alist
3554 '("^/xy" . "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3555 @end lisp
3556
3557 This shortens the file opening command to @kbd{C-x C-f /xy
3558 @key{RET}}. The disadvantage is, again, that you cannot edit the file
3559 name, because the expansion happens after entering the file name only.
3560
3561 @item Define own abbreviation (2):
3562
3563 The @code{abbrev-mode} gives more flexibility for editing the
3564 minibuffer:
3565
3566 @lisp
3567 (define-abbrev-table 'my-tramp-abbrev-table
3568 '(("xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")))
3569
3570 (add-hook
3571 'minibuffer-setup-hook
3572 (lambda ()
3573 (abbrev-mode 1)
3574 (setq local-abbrev-table my-tramp-abbrev-table)))
3575
3576 (defadvice minibuffer-complete
3577 (before my-minibuffer-complete activate)
3578 (expand-abbrev))
3579
3580 ;; If you use partial-completion-mode
3581 (defadvice PC-do-completion
3582 (before my-PC-do-completion activate)
3583 (expand-abbrev))
3584 @end lisp
3585
3586 After entering @kbd{C-x C-f xy @key{TAB}}, the minibuffer is
3587 expanded, and you can continue editing.
3588
3589 @item Use bookmarks:
3590
3591 Bookmarks can be used to visit Tramp files or directories.
3592 @ifinfo
3593 @pxref{Bookmarks, , , @value{emacsdir}}
3594 @end ifinfo
3595
3596 When you have opened @file{@trampfn{ssh, news, news.my.domain,
3597 /opt/news/etc/}}, you should save the bookmark via
3598 @ifset emacs
3599 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3600 @end ifset
3601 @ifset xemacs
3602 @kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
3603 @end ifset
3604
3605 Later on, you can always navigate to that bookmark via
3606 @ifset emacs
3607 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3608 @end ifset
3609 @ifset xemacs
3610 @kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
3611 @end ifset
3612
3613 @item Use recent files:
3614
3615 @ifset emacs
3616 @file{recentf}
3617 @end ifset
3618 @ifset xemacs
3619 @file{recent-files}
3620 @end ifset
3621 remembers visited places.
3622 @ifinfo
3623 @ifset emacs
3624 @pxref{File Conveniences, , , @value{emacsdir}}
3625 @end ifset
3626 @ifset xemacs
3627 @pxref{recent-files, , , edit-utils}
3628 @end ifset
3629 @end ifinfo
3630
3631 You could keep remote file names in the recent list without checking
3632 their readability through a remote access:
3633
3634 @lisp
3635 @ifset emacs
3636 (recentf-mode 1)
3637 @end ifset
3638 @ifset xemacs
3639 (recent-files-initialize)
3640 (add-hook
3641 'find-file-hook
3642 (lambda ()
3643 (when (file-remote-p (buffer-file-name))
3644 (recent-files-make-permanent)))
3645 'append)
3646 @end ifset
3647 @end lisp
3648
3649 The list of files opened recently is reachable via
3650 @ifset emacs
3651 @kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
3652 @end ifset
3653 @ifset xemacs
3654 @kbd{@key{menu-bar} @key{Recent Files}}.
3655 @end ifset
3656
3657 @ifset emacs
3658 @item Use filecache:
3659
3660 @file{filecache} remembers visited places. Add the directory into
3661 the cache:
3662
3663 @lisp
3664 (eval-after-load "filecache"
3665 '(file-cache-add-directory
3666 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3667 @end lisp
3668
3669 Whenever you want to load a file, you can enter @kbd{C-x C-f
3670 C-@key{TAB}} in the minibuffer. The completion is done for the given
3671 directory.
3672 @end ifset
3673
3674 @ifset emacs
3675 @item Use bbdb:
3676
3677 @file{bbdb} has a built-in feature for @value{ftppackagename} files,
3678 which works also for @value{tramp}.
3679 @ifinfo
3680 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}
3681 @end ifinfo
3682
3683 You need to load @file{bbdb}:
3684
3685 @lisp
3686 (require 'bbdb)
3687 (bbdb-initialize)
3688 @end lisp
3689
3690 Then you can create a BBDB entry via @kbd{M-x bbdb-create-ftp-site}.
3691 Because BBDB is not prepared for @value{tramp} syntax, you must
3692 specify a method together with the user name when needed. Example:
3693
3694 @example
3695 @kbd{M-x bbdb-create-ftp-site @key{RET}}
3696 @b{Ftp Site:} news.my.domain @key{RET}
3697 @b{Ftp Directory:} /opt/news/etc/ @key{RET}
3698 @b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3699 @b{Company:} @key{RET}
3700 @b{Additional Comments:} @key{RET}
3701 @end example
3702
3703 When you have opened your BBDB buffer, you can access such an entry by
3704 pressing the key @key{F}.
3705 @end ifset
3706
3707 @end enumerate
3708
3709 I would like to thank all @value{tramp} users who have contributed to
3710 the different recipes!
3711
3712
3713 @item I have saved @value{tramp} file names as indicated. But it
3714 doesn't work in a new @value{emacsname} session!
3715
3716 If you have saved an ad-hoc multi-hop @value{tramp} file name
3717 (@pxref{Ad-hoc multi-hops}) via bookmarks, recent files,
3718 @ifset emacs
3719 filecache, bbdb,
3720 @end ifset
3721 or another package, you must use the full ad-hoc file name including
3722 all hops, like @file{@trampfn{ssh, bird,
3723 bastion|ssh@value{postfixhop}news.my.domain, /opt/news/etc}}.
3724
3725 Alternatively, if you save only the abbreviated multi-hop file name
3726 @file{@trampfn{ssh, news, news.my.domain, /opt/news/etc}}, the custom
3727 option @code{tramp-save-ad-hoc-proxies} must be set to a to a
3728 non-@code{nil} value.
3729
3730
3731 @ifset emacs
3732 @item
3733 How can I use @value{tramp} to connect to a remote @value{emacsname}
3734 session?
3735
3736 You can configure Emacs Client doing this.
3737 @ifinfo
3738 @xref{Emacs Server, , , @value{emacsdir}}.
3739 @end ifinfo
3740
3741 On the remote host, you start the Emacs Server:
3742
3743 @lisp
3744 (require 'server)
3745 (setq server-host (system-name)
3746 server-use-tcp t)
3747 (server-start)
3748 @end lisp
3749
3750 Make sure that the result of @code{(system-name)} can be resolved on
3751 your local host; otherwise you might use a hard coded IP address.
3752
3753 The resulting file @file{~/.emacs.d/server/server} must be copied to
3754 your local host, at the same location. You can call then the Emacs
3755 Client from the command line:
3756
3757 @example
3758 emacsclient @trampfn{ssh, user, host, /file/to/edit}
3759 @end example
3760
3761 @code{user} and @code{host} shall be related to your local host.
3762
3763 If you want to use Emacs Client also as editor for other programs, you
3764 could write a script @file{emacsclient.sh}:
3765
3766 @example
3767 #!/bin/sh
3768 emacsclient @trampfn{ssh, $(whoami), $(hostname --fqdn), $1}
3769 @end example
3770
3771 Then you must set the environment variable @env{EDITOR} pointing to
3772 that script:
3773
3774 @example
3775 export EDITOR=/path/to/emacsclient.sh
3776 @end example
3777 @end ifset
3778
3779
3780 @item
3781 There are packages which call @value{tramp} although I haven't entered
3782 a remote file name ever. I dislike it, how could I disable it?
3783
3784 In general, @value{tramp} functions are used only when
3785 you apply remote file name syntax. However, some packages enable
3786 @value{tramp} on their own.
3787
3788 @itemize @minus
3789 @item
3790 @file{ido.el}
3791
3792 You could disable @value{tramp} file name completion:
3793
3794 @lisp
3795 (custom-set-variables
3796 '(ido-enable-tramp-completion nil))
3797 @end lisp
3798
3799 @item
3800 @file{rlogin.el}
3801
3802 You could disable remote directory tracking mode:
3803
3804 @lisp
3805 (rlogin-directory-tracking-mode -1)
3806 @end lisp
3807 @end itemize
3808
3809
3810 @item
3811 How can I disable @value{tramp} at all?
3812
3813 Shame on you, why did you read until now?
3814
3815 @itemize @minus
3816 @ifset emacs
3817 @item
3818 If you just want to have @value{ftppackagename} as default remote
3819 files access package, you should apply the following code:
3820
3821 @lisp
3822 (setq tramp-default-method "ftp")
3823 @end lisp
3824 @end ifset
3825
3826 @item
3827 In order to disable
3828 @ifset emacs
3829 @value{tramp} (and @value{ftppackagename}),
3830 @end ifset
3831 @ifset xemacs
3832 @value{tramp},
3833 @end ifset
3834 you must set @code{tramp-mode} to @code{nil}:
3835
3836 @lisp
3837 (setq tramp-mode nil)
3838 @end lisp
3839
3840 @item
3841 Unloading @value{tramp} can be achieved by applying @kbd{M-x
3842 tramp-unload-tramp}.
3843 @ifset emacs
3844 This resets also the @value{ftppackagename} plugins.
3845 @end ifset
3846 @end itemize
3847 @end itemize
3848
3849
3850 @c For the developer
3851 @node Files directories and localnames
3852 @chapter How file names, directories and localnames are mangled and managed.
3853
3854 @menu
3855 * Localname deconstruction:: Breaking a localname into its components.
3856 @ifset emacs
3857 * External packages:: Integration with external Lisp packages.
3858 @end ifset
3859 @end menu
3860
3861
3862 @node Localname deconstruction
3863 @section Breaking a localname into its components
3864
3865 @value{tramp} file names are somewhat different, obviously, to ordinary file
3866 names. As such, the lisp functions @code{file-name-directory} and
3867 @code{file-name-nondirectory} are overridden within the @value{tramp}
3868 package.
3869
3870 Their replacements are reasonably simplistic in their approach. They
3871 dissect the file name, call the original handler on the localname and
3872 then rebuild the @value{tramp} file name with the result.
3873
3874 This allows the platform specific hacks in the original handlers to take
3875 effect while preserving the @value{tramp} file name information.
3876
3877
3878 @ifset emacs
3879 @node External packages
3880 @section Integration with external Lisp packages
3881 @subsection File name completion.
3882
3883 While reading file names in the minibuffer, @value{tramp} must decide
3884 whether it completes possible incomplete file names, or not. Imagine
3885 there is the following situation: You have typed @kbd{C-x C-f
3886 @value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot
3887 know, whether @option{ssh} is a method or a host name. It checks
3888 therefore the last input character you have typed. If this is
3889 @key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are
3890 still in file name completion, and it does not connect to the possible
3891 remote host @option{ssh}.
3892
3893 External packages, which use other characters for completing file names
3894 in the minibuffer, must signal this to @value{tramp}. For this case,
3895 the variable @code{non-essential} can be bound temporarily to
3896 a non-@code{nil} value.
3897
3898 @lisp
3899 (let ((non-essential t))
3900 @dots{})
3901 @end lisp
3902
3903
3904 @subsection File attributes cache.
3905
3906 When @value{tramp} runs remote processes, files on the remote host
3907 could change their attributes. Consequently, @value{tramp} must flush
3908 its complete cache keeping attributes for all files of the remote host
3909 it has seen so far.
3910
3911 This is a performance degradation, because the lost file attributes
3912 must be recomputed when needed again. In cases where the caller of
3913 @code{process-file} knows that there are no file attribute changes, it
3914 should let-bind the variable @code{process-file-side-effects} to
3915 @code{nil}. Then @value{tramp} won't flush the file attributes cache.
3916
3917 @lisp
3918 (let (process-file-side-effects)
3919 @dots{})
3920 @end lisp
3921
3922 For asynchronous processes, @value{tramp} flushes the file attributes
3923 cache via a process sentinel. If the caller of
3924 @code{start-file-process} knows that there are no file attribute
3925 changes, it should set the process sentinel to the default. In cases
3926 where the caller defines its own process sentinel, @value{tramp}'s process
3927 sentinel is overwritten. The caller can still flush the file
3928 attributes cache in its process sentinel with this code:
3929
3930 @lisp
3931 (unless (memq (process-status proc) '(run open))
3932 (dired-uncache remote-directory))
3933 @end lisp
3934
3935 @code{remote-directory} shall be the root directory, where file
3936 attribute changes can happen during the process lifetime.
3937 @value{tramp} traverses all subdirectories, starting at this
3938 directory. Often, it is sufficient to use @code{default-directory} of
3939 the process buffer as root directory.
3940 @end ifset
3941
3942
3943 @node Traces and Profiles
3944 @chapter How to Customize Traces
3945
3946 All @value{tramp} messages are raised with a verbosity level. The
3947 verbosity level can be any number between 0 and 10. Only messages with
3948 a verbosity level less than or equal to @code{tramp-verbose} are
3949 displayed.
3950
3951 The verbosity levels are
3952
3953 @w{ 0} silent (no @value{tramp} messages at all)
3954 @*@indent @w{ 1} errors
3955 @*@indent @w{ 2} warnings
3956 @*@indent @w{ 3} connection to remote hosts (default verbosity)
3957 @*@indent @w{ 4} activities
3958 @*@indent @w{ 5} internal
3959 @*@indent @w{ 6} sent and received strings
3960 @*@indent @w{ 7} file caching
3961 @*@indent @w{ 8} connection properties
3962 @*@indent @w{ 9} test commands
3963 @*@indent @w{10} traces (huge)
3964
3965 When @code{tramp-verbose} is greater than or equal to 4, the messages
3966 are also written into a @value{tramp} debug buffer. This debug buffer
3967 is useful for analyzing problems; sending a @value{tramp} bug report
3968 should be done with @code{tramp-verbose} set to a verbosity level of at
3969 least 6 (@pxref{Bug Reports}).
3970
3971 The debug buffer is in
3972 @ifinfo
3973 @ref{Outline Mode, , , @value{emacsdir}}.
3974 @end ifinfo
3975 @ifnotinfo
3976 Outline Mode.
3977 @end ifnotinfo
3978 That means, you can change the level of messages to be viewed. If you
3979 want, for example, see only messages up to verbosity level 5, you must
3980 enter @kbd{C-u 6 C-c C-q}.
3981 @ifinfo
3982 Other keys for navigating are described in
3983 @ref{Outline Visibility, , , @value{emacsdir}}.
3984 @end ifinfo
3985
3986 @value{tramp} errors are handled internally in order to raise the
3987 verbosity level 1 messages. When you want to get a Lisp backtrace in
3988 case of an error, you need to set both
3989
3990 @lisp
3991 (setq debug-on-error t
3992 debug-on-signal t)
3993 @end lisp
3994
3995 Sometimes, it might be even necessary to step through @value{tramp}
3996 function call traces. Such traces are enabled by the following code:
3997
3998 @lisp
3999 (require 'trace)
4000 (dolist (elt (all-completions "tramp-" obarray 'functionp))
4001 (trace-function-background (intern elt)))
4002 (untrace-function 'tramp-read-passwd)
4003 (untrace-function 'tramp-gw-basic-authentication)
4004 @end lisp
4005
4006 The function call traces are inserted in the buffer
4007 @file{*trace-output*}. @code{tramp-read-passwd} and
4008 @code{tramp-gw-basic-authentication} shall be disabled when the
4009 function call traces are added to @value{tramp}, because both
4010 functions return password strings, which should not be distributed.
4011
4012
4013 @node Issues
4014 @chapter Debatable Issues and What Was Decided
4015
4016 @itemize @bullet
4017 @item The uuencode method does not always work.
4018
4019 Due to the design of @value{tramp}, the encoding and decoding programs
4020 need to read from stdin and write to stdout. On some systems,
4021 @command{uudecode -o -} will read stdin and write the decoded file to
4022 stdout, on other systems @command{uudecode -p} does the same thing.
4023 But some systems have uudecode implementations which cannot do this at
4024 all---it is not possible to call these uudecode implementations with
4025 suitable parameters so that they write to stdout.
4026
4027 Of course, this could be circumvented: the @code{begin foo 644} line
4028 could be rewritten to put in some temporary file name, then
4029 @command{uudecode} could be called, then the temp file could be
4030 printed and deleted.
4031
4032 But I have decided that this is too fragile to reliably work, so on some
4033 systems you'll have to do without the uuencode methods.
4034
4035 @item The @value{tramp} file name syntax differs between Emacs and XEmacs.
4036
4037 The Emacs maintainers wish to use a unified file name syntax for
4038 Ange-FTP and @value{tramp} so that users don't have to learn a new
4039 syntax. It is sufficient to learn some extensions to the old syntax.
4040
4041 For the XEmacs maintainers, the problems caused from using a unified
4042 file name syntax are greater than the gains. The XEmacs package system
4043 uses EFS for downloading new packages. So, obviously, EFS has to be
4044 installed from the start. If the file names were unified, @value{tramp}
4045 would have to be installed from the start, too.
4046
4047 @ifset xemacs
4048 @strong{Note:} If you'd like to use a similar syntax like
4049 @value{ftppackagename}, you need the following settings in your init
4050 file:
4051
4052 @lisp
4053 (setq tramp-unified-filenames t)
4054 (require 'tramp)
4055 @end lisp
4056
4057 The autoload of the @value{emacsname} @value{tramp} package must be
4058 disabled. This can be achieved by setting file permissions @code{000}
4059 to the files @file{@dots{}/xemacs-packages/lisp/tramp/auto-autoloads.el*}.
4060
4061 In case of unified file names, all @value{emacsname} download sites are
4062 added to @code{tramp-default-method-alist} with default method
4063 @option{ftp} @xref{Default Method}. These settings shouldn't be
4064 touched for proper working of the @value{emacsname} package system.
4065
4066 The syntax for unified file names is described in the @value{tramp} manual
4067 for @value{emacsothername}.
4068 @end ifset
4069 @end itemize
4070
4071
4072 @node GNU Free Documentation License
4073 @appendix GNU Free Documentation License
4074 @include doclicense.texi
4075
4076
4077 @node Function Index
4078 @unnumbered Function Index
4079 @printindex fn
4080
4081
4082 @node Variable Index
4083 @unnumbered Variable Index
4084 @printindex vr
4085
4086
4087 @node Concept Index
4088 @unnumbered Concept Index
4089 @printindex cp
4090
4091 @bye
4092
4093 @c TODO
4094 @c
4095 @c * Say something about the .login and .profile files of the remote
4096 @c shells.
4097 @c * Explain how tramp.el works in principle: open a shell on a remote
4098 @c host and then send commands to it.
4099 @c * Consistent small or capitalized words especially in menus.
4100 @c * Make a unique declaration of @trampfn.