Update texinfo.tex
[emacs.git] / doc / misc / tramp.texi
blob894ccbe9c9c38d5d1e48b9acafef63bb5c41d627
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
8 @c This is *so* much nicer :)
9 @footnotestyle end
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.
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.
18 @include trampver.texi
20 @c Macro for formatting a file name according to the respective
21 @c syntax.  Macro arguments should not have any leading or trailing
22 @c whitespace.  Not very elegant, but I don't know it better.
24 @macro trampfn {method, userhost, localname}
25 @value{prefix}@c
26 \method\@value{postfixhop}@c
27 \userhost\@value{postfix}\localname\
28 @end macro
30 @c Similar, but without a method prefix.
32 @macro trampf {userhost, localname}
33 @value{prefix}@c
34 \userhost\@value{postfix}\localname\
35 @end macro
37 @copying
38 Copyright @copyright{} 1999--2016 Free Software Foundation, Inc.
40 @quotation
41 Permission is granted to copy, distribute and/or modify this document
42 under the terms of the GNU Free Documentation License, Version 1.3 or
43 any later version published by the Free Software Foundation; with no
44 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
45 and with the Back-Cover Texts as in (a) below.  A copy of the license
46 is included in the section entitled ``GNU Free Documentation License''.
48 (a) The FSF's Back-Cover Text is: ``You have the freedom to
49 copy and modify this GNU manual.''
50 @end quotation
51 @end copying
53 @c Entries for @command{install-info} to use
54 @dircategory Emacs network features
55 @direntry
56 * TRAMP: (tramp).               Transparent Remote Access, Multiple Protocol
57                                   Emacs remote file access via ssh and scp.
58 @end direntry
60 @titlepage
61 @title @value{tramp} version @value{trampver} User Manual
62 @author by Daniel Pittman
63 @author based on documentation by Kai Großjohann
64 @page
65 @insertcopying
66 @end titlepage
68 @contents
71 @node Top, Overview, (dir), (dir)
72 @top @value{tramp} version @value{trampver} User Manual
74 @ifnottex
75 This file documents @value{tramp} version @value{trampver}, a remote file
76 editing package for Emacs.
78 @value{tramp} stands for ``Transparent Remote (file) Access, Multiple
79 Protocol''.  This package provides remote file editing, similar to
80 Ange FTP.
82 The difference is that Ange FTP uses FTP to transfer files between the
83 local and the remote host, whereas @value{tramp} uses a combination of
84 @command{rsh} and @command{rcp} or other work-alike programs, such as
85 @command{ssh}/@command{scp}.
87 You can find the latest version of this document on the web at
88 @uref{http://www.gnu.org/software/tramp/}.
90 @ifhtml
91 The latest release of @value{tramp} is available for
92 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
93 @ref{Obtaining Tramp} for more details, including the Git server
94 details.
96 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
97 Savannah Project Page}.
98 @end ifhtml
100 There is a mailing list for @value{tramp}, available at
101 @email{tramp-devel@@gnu.org}, and archived at
102 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
103 @value{tramp} Mail Archive}.
104 @ifhtml
105 Older archives are located at
106 @uref{http://sourceforge.net/mailarchive/forum.php?forum=tramp-devel,
107 SourceForge Mail Archive} and
108 @uref{http://www.mail-archive.com/emacs-rcp@@ls6.cs.uni-dortmund.de/,
109 The Mail Archive}.
110 @c in HTML output, there's no new paragraph.
111 @*@*
112 @end ifhtml
114 @insertcopying
115 @end ifnottex
117 @menu
118 * Overview::                    What @value{tramp} can and cannot do.
120 For the end user:
122 * Obtaining Tramp::             How to obtain @value{tramp}.
123 * History::                     History of @value{tramp}.
124 @ifset installchapter
125 * Installation::                Installing @value{tramp} with your Emacs.
126 @end ifset
127 * Configuration::               Configuring @value{tramp} for use.
128 * Usage::                       An overview of the operation of @value{tramp}.
129 * Bug Reports::                 Reporting Bugs and Problems.
130 * Frequently Asked Questions::  Questions and answers from the mailing list.
132 For the developer:
134 * Files directories and localnames::
135                                 How file names, directories and localnames
136                                   are mangled and managed.
137 * Traces and Profiles::         How to Customize Traces.
139 * GNU Free Documentation License:: The license for this documentation.
140 * Function Index::              @value{tramp} functions.
141 * Variable Index::              User options and variables.
142 * Concept Index::               An item for each concept.
144 @detailmenu
145  --- The Detailed Node Listing ---
147 @ifset installchapter
148 Installing @value{tramp} with your Emacs
150 * Installation parameters::     Parameters in order to control installation.
151 * Load paths::                  How to plug-in @value{tramp} into your environment.
153 @end ifset
155 Configuring @value{tramp} for use
157 * Connection types::            Types of connections to remote hosts.
158 * Inline methods::              Inline methods.
159 * External methods::            External methods.
160 * GVFS based methods::          GVFS based external methods.
161 * Gateway methods::             Gateway methods.
162 * Default Method::              Selecting a default method.
163 * Default User::                Selecting a default user.
164 * Default Host::                Selecting a default host.
165 * Multi-hops::                  Connecting to a remote host using multiple hops.
166 * Customizing Methods::         Using Non-Standard Methods.
167 * Customizing Completion::      Selecting config files for user/host name completion.
168 * Password handling::           Reusing passwords for several connections.
169 * Connection caching::          Reusing connection related information.
170 * Predefined connection information::
171                                 Setting own connection related information.
172 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
173 * Remote shell setup::          Remote shell setup hints.
174 * Android shell setup::         Android shell setup hints.
175 * Auto-save and Backup::        Auto-save and Backup.
176 * Windows setup hints::         Issues with Cygwin ssh.
178 Using @value{tramp}
180 * File name Syntax::            @value{tramp} file name conventions.
181 * File name completion::        File name completion.
182 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
183 * Remote processes::            Integration with other Emacs packages.
184 * Cleanup remote connections::  Cleanup remote connections.
186 How file names, directories and localnames are mangled and managed
188 * Localname deconstruction::    Breaking a localname into its components.
189 * External packages::           Integration with external Lisp packages.
191 @end detailmenu
192 @end menu
195 @node Overview
196 @chapter An overview of @value{tramp}
197 @cindex overview
199 @value{tramp} is for transparently accessing remote files from within
200 Emacs.  @value{tramp} enables an easy, convenient, and consistent
201 interface to remote files as if they are local files.  @value{tramp}'s
202 transparency extends to editing, version control, and @code{dired}.
204 @value{tramp} can access remote hosts using any number of access
205 methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
206 and related programs.  If these programs can successfully pass
207 @acronym{ASCII]} characters, @value{tramp} can use them.
208 @value{tramp} does not require or mandate 8-bit clean connections.
210 @value{tramp}'s most common access method is through @command{ssh}, a
211 more secure alternative to @command{ftp} and other older access
212 methods.
214 @value{tramp} on Windows operating systems is integrated with the
215 PuTTY package, and uses the @command{plink} program.
217 @value{tramp} mostly operates transparently in the background using
218 the connection programs.  As long as these programs enable remote login
219 and can use the terminal, @value{tramp} can adapt them for seamless
220 and transparent access.
222 @value{tramp} temporarily transfers a remote file's contents to the
223 local host editing and related operations.  @value{tramp} can also
224 transfer files between hosts using standard Emacs interfaces, a
225 benefit of direct integration of @value{tramp} in Emacs.
227 @value{tramp} can transfer files using any number of available host
228 programs for remote files, such as @command{rcp}, @command{scp},
229 @command{rsync} or (under Windows) @command{pscp}.  @value{tramp}
230 provides easy ways to specify these programs and customize them to
231 specific files, hosts, or access methods.
233 For faster small-size file transfers, @value{tramp} supports encoded
234 transfers directly through the shell using @command{mimencode} or
235 @command{uuencode} provided such tools are available on the remote
236 host.
239 @subsubheading @value{tramp} behind the scenes
240 @cindex behind the scenes
241 @cindex details of operation
242 @cindex how it works
244 Accessing a remote file through @value{tramp} entails a series of
245 actions, many of which are transparent to the user.  Yet some actions
246 may require user response (such as entering passwords or completing
247 file names).  One typical scenario, opening a file on a remote host, is
248 presented here to illustrate the steps involved:
250 @kbd{C-x C-f} to initiate find-file, enter part of the @value{tramp}
251 file name, then hit @kbd{@key{TAB}} for completion.  If this is the
252 first time connection to that host, here's what happens:
254 @itemize
255 @item
256 @value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
257 -l @var{user}} and establishes an external process to connect to the
258 remote host.  @value{tramp} communicates with the process through an
259 Emacs buffer, which also shows output from the remote host.
261 @item
262 The remote host may prompt for a login name (for @command{telnet}, for
263 example) in the buffer.  If on the other hand, the login name was
264 included in the file name portion, @value{tramp} sends the login name
265 followed by a newline.
267 @item
268 The remote host may then prompt for a password or pass phrase (for
269 @command{rsh} or for @command{telnet}).  @value{tramp} displays the
270 password prompt in the minibuffer.  @value{tramp} then sends whatever
271 is entered to the remote host, followed by a newline.
273 @item
274 @value{tramp} now waits for either the shell prompt or a failed login
275 message.
277 If @value{tramp} does not receive any messages within a timeout period
278 (a minute, for example), then @value{tramp} responds with an error
279 message about not finding the remote shell prompt.  If any messages
280 from the remote host, @value{tramp} displays them in the buffer.
282 For any @samp{login failed} message from the remote host,
283 @value{tramp} aborts the login attempt, and repeats the login steps
284 again.
286 @item
287 Upon successful login and @value{tramp} recognizes the shell prompt
288 from the remote host, @value{tramp} prepares the shell environment by
289 turning off echoing, setting shell prompt, and other housekeeping
290 chores.
292 @strong{Note} that for the remote shell, @value{tramp} invokes
293 @command{/bin/sh}.  The remote host must recognize @samp{exec /bin/sh}
294 and execute the appropriate shell.  This shell must support Bourne
295 shell syntax.
297 @item
298 @value{tramp} executes @command{cd} and @command{ls} commands to find
299 which files exist on the remote host.  @value{tramp} sometimes uses
300 @command{echo} with globbing.  @value{tramp} checks if a file or
301 directory is writable with @command{test}.  After each command,
302 @value{tramp} parses the output from the remote host for completing
303 the next operation.
305 @item
306 After remote file name completion, @value{tramp} transfers the file
307 contents from the remote host.
309 For inline transfers, @value{tramp} sends a command, such as
310 @samp{mimencode -b /path/to/remote/file}, waits until the output has
311 accumulated in the buffer, decodes that output to produce the file's
312 contents.
314 For external transfers, @value{tramp} sends a command as follows:
315 @example
316 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
317 @end example
318 @value{tramp} reads the local temporary file @file{/tmp/tramp.4711}
319 into a buffer, and then deletes the temporary file.
321 @item
322 Edit, modify, change the buffer contents as normal, and then save the
323 buffer wth @kbd{C-x C-s}.
325 @item
326 @value{tramp} transfers the buffer contents to the remote host in
327 a reverse of the process using the appropriate inline or external
328 program.
329 @end itemize
331 I hope this has provided you with a basic overview of what happens
332 behind the scenes when you open a file with @value{tramp}.
335 @c For the end user
336 @node Obtaining Tramp
337 @chapter Obtaining @value{tramp}
338 @cindex obtaining Tramp
340 @value{tramp} is included as part of Emacs (since Emacs version 22.1).
342 @value{tramp} is also freely packaged for download on the Internet at
343 @uref{ftp://ftp.gnu.org/gnu/tramp/}.
345 @value{tramp} development versions are available on Git servers.
346 Development versions contain new and incomplete features.
348 One way to obtain from Git server is to visit the Savannah project
349 page at the following URL and then clicking on the Git link in the
350 navigation bar at the top.
352 @noindent
353 @uref{http://savannah.gnu.org/projects/tramp/}
355 @noindent
356 Another way is to follow the terminal session below:
358 @example
359 ] @strong{cd ~/emacs}
360 ] @strong{git clone git://git.savannah.gnu.org/tramp.git}
361 @end example
363 @noindent
364 From behind a firewall:
366 @example
367 ] @strong{git config --global http.proxy http://user:pwd@@proxy.server.com:8080}
368 ] @strong{git clone http://git.savannah.gnu.org/r/tramp.git}
369 @end example
371 @noindent
372 Tramp developers:
374 @example
375 ] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git}
376 @end example
378 @noindent
379 After one of the above commands, @file{~/emacs/tramp} will
380 containing the latest version of @value{tramp}.
382 @noindent
383 To fetch updates from the repository, use git pull:
385 @example
386 ] @strong{cd ~/emacs/tramp}
387 ] @strong{git pull}
388 @end example
390 @noindent
391 Run @command{autoconf} as follows to generate an up-to-date
392 @file{configure} script:
394 @example
395 ] @strong{cd ~/emacs/tramp}
396 ] @strong{autoconf}
397 @end example
400 @node History
401 @chapter History of @value{tramp}
402 @cindex history
403 @cindex development history
405 @value{tramp} development started at the end of November 1998 as
406 @file{rssh.el}.  It provided only one method of access.  It used
407 @command{ssh} for login and @command{scp} to transfer file contents.
408 The name was changed to @file{rcp.el} before it got its preset name
409 @value{tramp}.  New methods of remote access were added, so was support
410 for version control.
412 April 2000 was the first time when multi-hop methods were added.  In
413 July 2002, @value{tramp} unified file names with Ange-FTP@.  In July
414 2004, proxy hosts replaced multi-hop methods.  Running commands on
415 remote hosts was introduced in December 2005.  Support for gateways
416 since April 2007.  GVFS integration started in February 2009.  Remote
417 commands on Windows hosts since September 2011.  Ad-hoc multi-hop
418 methods (with a changed syntax) re-enabled in November 2011.  In
419 November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
421 XEmacs support has been stopped in January 2016.
423 @c Installation chapter is necessary only in case of standalone
424 @c installation.  Text taken from trampinst.texi.
425 @ifset installchapter
426 @include trampinst.texi
427 @end ifset
430 @node Configuration
431 @chapter Configuring @value{tramp}
432 @cindex configuration
433 @cindex default configuration
435 @value{tramp} is initially configured to use the @command{scp} program
436 to connect to the remote host.  Just type @kbd{C-x C-f} and then enter
437 file name @file{@trampf{user@@host,/path/to.file}}.  For details, see
438 @xref{Default Method}.
440 For problems related to the behavior of remote shell, see @ref{Remote
441 shell setup} for details.
443 For changing the connection type and file access method from the
444 defaults to one of several other options, see (@pxref{Connection
445 types}).
447 @strong{Note} that some user options and variables described in these
448 examples are not auto loaded by Emacs.  All examples require
449 @value{tramp} is installed and loaded:
451 @lisp
452 (require 'tramp)
453 @end lisp
456 @menu
457 * Connection types::            Types of connections to remote hosts.
458 * Inline methods::              Inline methods.
459 * External methods::            External methods.
460 * GVFS based methods::          GVFS based external methods.
461 * Gateway methods::             Gateway methods.
462 * Default Method::              Selecting a default method.
463                                   Here we also try to help those who
464                                   don't have the foggiest which method
465                                   is right for them.
466 * Default User::                Selecting a default user.
467 * Default Host::                Selecting a default host.
468 * Multi-hops::                  Connecting to a remote host using multiple hops.
469 * Customizing Methods::         Using Non-Standard Methods.
470 * Customizing Completion::      Selecting config files for user/host name completion.
471 * Password handling::           Reusing passwords for several connections.
472 * Connection caching::          Reusing connection related information.
473 * Predefined connection information::
474                                 Setting own connection related information.
475 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
476 * Remote shell setup::          Remote shell setup hints.
477 * Android shell setup::         Android shell setup hints.
478 * Auto-save and Backup::        Auto-save and Backup.
479 * Windows setup hints::         Issues with Cygwin ssh.
480 @end menu
483 @node Connection types
484 @section Types of connections to remote hosts
485 @cindex connection types, overview
487 @dfn{Inline method} and @dfn{external method} are the two basic types
488 of access methods.  While they both use the same remote shell access
489 programs, such as @command{rsh}, @command{ssh}, or @command{telnet},
490 they differ in the file access methods.  Choosing the right method
491 becomes important for editing files, transferring large files, or
492 operating on a large number of files.
494 @cindex inline methods
495 @cindex external methods
496 @cindex methods, inline
497 @cindex methods, external
499 The performance of the external methods is generally better than that
500 of the inline methods, at least for large files.  This is caused by
501 the need to encode and decode the data when transferring inline.
503 The one exception to this rule are the @option{scp}-based access
504 methods.  While these methods do see better performance when actually
505 transferring files, the overhead of the cryptographic negotiation at
506 startup may drown out the improvement in file transfer times.
508 External methods should be configured such a way that they don't
509 require a password (with @command{ssh-agent}, or such alike).  Modern
510 @command{scp} implementations offer options to reuse existing
511 @command{ssh} connections, which will be enabled by default if
512 available.  If it isn't possible, you should consider @ref{Password
513 handling}, otherwise you will be prompted for a password every copy
514 action.
517 @node Inline methods
518 @section Inline methods
519 @cindex inline methods
520 @cindex methods, inline
522 Inline methods use the same login connection to transfer file
523 contents.  Inline methods are quick and easy for small files.  They
524 depend on the availability of suitable encoding and decoding programs
525 on the remote host.  For local source and destination, @value{tramp}
526 may use built-in equivalents of such programs in Emacs.
528 Inline methods can work in situations where an external transfer
529 program is unavailable.  Inline methods also work when transferring
530 files between different @emph{user identities} on the same host.
532 @cindex uuencode
533 @cindex mimencode
534 @cindex base-64 encoding
536 @value{tramp} checks the remote host for the availability and
537 usability of @command{mimencode} (part of the @command{metamail}
538 package) or @command{uuencode}.  @value{tramp} uses the first reliable
539 command it finds.  @value{tramp}'s search path can be customized, see
540 @ref{Remote programs}.
542 In case both @command{mimencode} and @command{uuencode} are
543 unavailable, @value{tramp} first transfers a small Perl program to the
544 remote host, and then tries that program for encoding and decoding.
546 To increase transfer speeds for large text files, use compression
547 before encoding.  The variable @var{tramp-inline-compress-start-size}
548 specifies the file size for such optimization.
550 @table @asis
551 @item @option{rsh}
552 @cindex method rsh
553 @cindex rsh method
555 @command{rsh} is an option for connecting to hosts within local
556 networks since @command{rsh} is not as secure as other methods.
558 @item @option{ssh}
559 @cindex method ssh
560 @cindex ssh method
562 @command{ssh} is a more secure option than others to connect to a
563 remote host.
565 @command{ssh} can also take extra parameters as port numbers.  For
566 example, a host on port 42 is specified as @file{host#42} (the real
567 host name, a hash sign, then a port number).  It is the same as passing
568 @code{-p 42} to the @command{ssh} command.
570 @item @option{telnet}
571 @cindex method telnet
572 @cindex telnet method
574 Connecting to a remote host with @command{telnet} is as insecure
575 as the @option{rsh} method.
577 @item @option{su}
578 @cindex method su
579 @cindex su method
581 Instead of connecting to a remote host, @command{su} program allows
582 editing as another user.  The host can be either @samp{localhost} or
583 the host returned by the function @command{(system-name)}.  See
584 @ref{Multi-hops} for an exception to this behavior.
586 @item @option{sudo}
587 @cindex method sudo
588 @cindex sudo method
590 Similar to @option{su} method, @option{sudo} uses @command{sudo}.
591 @command{sudo} must have sufficient rights to start a shell.
593 @item @option{doas}
594 @cindex method doas
595 @cindex doas method
597 This method is used on OpenBSD like the @command{sudo} command.
599 @item @option{sg}
600 @cindex method sg
601 @cindex sg method
603 The @command{sg} program allows editing as different group.  The host
604 can be either @samp{localhost} or the host returned by the function
605 @command{(system-name)}.  The user name must be specified, but it
606 denotes a group name.  See @ref{Multi-hops} for an exception to this
607 behavior.
609 @item @option{sshx}
610 @cindex method sshx
611 @cindex sshx method
613 Works like @option{ssh} but without the extra authentication prompts.
614 @option{sshx} uses @samp{ssh -t -t @var{host} -l @var{user} /bin/sh}
615 to open a connection with a ``standard'' login shell.
617 @strong{Note} that @option{sshx} does not bypass authentication
618 questions.  For example, if the host key of the remote host is not
619 known, @option{sshx} will still ask ``Are you sure you want to
620 continue connecting?''.  @value{tramp} cannot handle such questions.
621 Connections will have to be setup where logins can proceed without
622 such questions.
624 @option{sshx} is useful for Windows users when @command{ssh} triggers
625 an error about allocating a pseudo tty.  This happens due to missing
626 shell prompts that confuses @value{tramp}.
628 @option{sshx} supports the @samp{-p} argument.
630 @item @option{krlogin}
631 @cindex method krlogin
632 @cindex krlogin method
633 @cindex Kerberos (with krlogin method)
635 This method is also similar to @option{ssh}.  It uses the
636 @command{krlogin -x} command only for remote host login.
638 @item @option{ksu}
639 @cindex method ksu
640 @cindex ksu method
641 @cindex Kerberos (with ksu method)
643 This is another method from the Kerberos suite.  It behaves like @option{su}.
645 @item @option{plink}
646 @cindex method plink
647 @cindex plink method
649 @option{plink} method is for Windows users with the PuTTY
650 implementation of SSH@.  It uses @samp{plink -ssh} to log in to the
651 remote host.
653 Check the @samp{Share SSH connections if possible} control for that
654 session.
656 @option{plink} method supports the @samp{-P} argument.
658 @item @option{plinkx}
659 @cindex method plinkx
660 @cindex plinkx method
662 Another method using PuTTY on Windows with session names instead of
663 host names.  @option{plinkx} calls @samp{plink -load @var{session} -t}.
664 User names and port numbers must be defined in the session.
666 Check the @samp{Share SSH connections if possible} control for that
667 session.
669 @end table
672 @node External methods
673 @section External methods
674 @cindex methods, external
675 @cindex external methods
677 External methods operate over multiple channels, using the remote
678 shell connection for some actions while delegating file transfers to
679 an external transfer program.
681 External methods save on the overhead of encoding and decoding of
682 inline methods.
684 Since external methods have the overhead of opening a new channel,
685 files smaller than @var{tramp-copy-size-limit} still use inline
686 methods.
688 @table @asis
689 @item @option{rcp}---@command{rsh} and @command{rcp}
690 @cindex method rcp
691 @cindex rcp method
692 @cindex rcp (with rcp method)
693 @cindex rsh (with rcp method)
695 This method uses the @command{rsh} and @command{rcp} commands to
696 connect to the remote host and transfer files.  This is the fastest
697 access method available.
699 The alternative method @option{remcp} uses the @command{remsh} and
700 @command{rcp} commands.
702 @item @option{scp}---@command{ssh} and @command{scp}
703 @cindex method scp
704 @cindex scp method
705 @cindex scp (with scp method)
706 @cindex ssh (with scp method)
708 Using a combination of @command{ssh} to connect and @command{scp} to
709 transfer is the most secure.  While the performance is good, it is
710 slower than the inline methods for smaller files.  Though there is no
711 overhead of encoding and decoding of the inline methods,
712 @command{scp}'s cryptographic handshake negates those speed gains.
714 @option{ssh}-based methods support @samp{-p} feature for specifying
715 port numbers.  For example, @file{host#42} passes @samp{-p 42} in the
716 argument list to @command{ssh}, and @samp{-P 42} in the argument list
717 to @command{scp}.
719 @item @option{rsync}---@command{ssh} and @command{rsync}
720 @cindex method rsync
721 @cindex rsync method
722 @cindex rsync (with rsync method)
723 @cindex ssh (with rsync method)
725 @command{ssh} command to connect in combination with @command{rsync}
726 command to transfer is similar to the @option{scp} method.
728 @command{rsync} performs much better than @command{scp} when
729 transferring files that exist on both hosts.  However, this advantage
730 is lost if the file exists only on one side of the connection.
732 This method supports the @samp{-p} argument.
734 @item @option{scpx}---@command{ssh} and @command{scp}
735 @cindex method scpx
736 @cindex scpx method
737 @cindex scp (with scpx method)
738 @cindex ssh (with scpx method)
740 @option{scpx} is useful to avoid login shell questions.  It is similar
741 in performance to @option{scp}.  @option{scpx} uses @samp{ssh -t -t
742 @var{host} -l @var{user} /bin/sh} to open a connection.
744 @option{sshx} is useful for Windows users when @command{ssh} triggers
745 an error about allocating a pseudo tty.  This happens due to missing
746 shell prompts that confuses @value{tramp}.
748 This method supports the @samp{-p} argument.
750 @item @option{pscp}---@command{plink} and @command{pscp}
751 @item @option{psftp}---@command{plink} and @command{psftp}
752 @cindex method pscp
753 @cindex pscp method
754 @cindex pscp (with pscp method)
755 @cindex plink (with pscp method)
756 @cindex PuTTY (with pscp method)
757 @cindex method psftp
758 @cindex psftp method
759 @cindex pscp (with psftp method)
760 @cindex plink (with psftp method)
761 @cindex PuTTY (with psftp method)
763 These methods are similar to @option{scp} or @option{sftp}, but they
764 use the @command{plink} command to connect to the remote host, and
765 they use @command{pscp} or @command{psftp} for transferring the files.
766 These programs are part of PuTTY, an SSH implementation for Windows.
768 Check the @samp{Share SSH connections if possible} control for that
769 session.
771 These methods support the @samp{-P} argument.
773 @item @option{fcp}---@command{fsh} and @command{fcp}
774 @cindex method fcp
775 @cindex fcp method
776 @cindex fsh (with fcp method)
777 @cindex fcp (with fcp method)
779 This method is similar to @option{scp}, but uses @command{fsh} to
780 connect and @command{fcp} to transfer files.  @command{fsh/fcp}, a
781 front-end for @command{ssh}, reuse @command{ssh} session by
782 submitting several commands.  This avoids the startup overhead due to
783 @command{scp}'s secure connection.  Inline methods have similar
784 benefits.
786 The command used for this connection is: @samp{fsh @var{host} -l
787 @var{user} /bin/sh -i}
789 @cindex method fsh
790 @cindex fsh method
792 @option{fsh} has no inline method since the multiplexing it offers is
793 not useful for @value{tramp}.  @command{fsh} connects to remote host
794 and @value{tramp} keeps that one connection open.
796 @item @option{nc}---@command{telnet} and @command{nc}
797 @cindex method nc
798 @cindex nc method
799 @cindex nc (with nc method)
800 @cindex telnet (with nc method)
802 Using @command{telnet} to connect and @command{nc} to transfer files
803 is sometimes the only combination suitable for accessing routers or
804 NAS hosts.  These dumb devices have severely restricted local shells,
805 such as the @command{busybox} and do not host any other encode or
806 decode programs.
808 @item @option{ftp}
809 @cindex method ftp
810 @cindex ftp method
812 When @value{tramp} uses @option{ftp}, it forwards requests to whatever
813 ftp program is specified by Ange FTP.  This external program must be
814 capable of servicing requests from @value{tramp}.
816 @item @option{smb}---@command{smbclient}
817 @cindex method smb
818 @cindex smb method
820 This non-native @value{tramp} method connects via the Server Message
821 Block (SMB) networking protocol to hosts running file servers that are
822 typically based on @url{https://www.samba.org/,,Samba} or MS Windows.
824 Using @command{smbclient} requires a few tweaks when working with
825 @value{tramp}:
827 The first directory in the localname must be a share name on the
828 remote host.
830 Since SMB shares end in the @code{$} character, @value{tramp} must use
831 @code{$$} when specifying those shares to avoid environment variable
832 substitutions.
834 When @value{tramp} is not specific about the share name or uses the
835 generic remote directory @code{/}, @command{smbclient} returns all
836 available shares.
838 Since SMB authentication is based on each SMB share, @value{tramp}
839 prompts for a password even when accessing a different share on the
840 same SMB host.  This prompting can be suppressed by @ref{Password
841 handling}.
843 To accommodate user name/domain name syntax required by MS Windows
844 authorization, @value{tramp} provides for an extended syntax in
845 @code{user%domain} format (where user is username, @code{%} is the
846 percent symbol, and domain is the windows domain name).  An example:
848 @example
849 @trampfn{smb,daniel%BIZARRE@@melancholia,/daniel$$/.emacs}
850 @end example
852 where user @code{daniel} connects as a domain user to the SMB host
853 @code{melancholia} in the windows domain @code{BIZARRE} to edit
854 @file{.emacs} located in the home directory (share @code{daniel$}).
856 Alternatively, for local WINS users (as opposed to domain users),
857 substitute the domain name with the name of the local host in
858 UPPERCASE as shown here:
860 @example
861 @trampfn{smb,daniel%MELANCHOLIA@@melancholia,/daniel$$/.emacs}
862 @end example
864 where user @code{daniel} connects as local user to the SMB host
865 @code{melancholia} in the local domain @code{MELANCHOLIA} to edit
866 @file{.emacs} located in the home directory (share @code{daniel$}).
868 The domain name and user name are optional for @command{smbclient}
869 authentication.  When user name is not specified, @command{smbclient}
870 uses the anonymous user (without prompting for password).  This
871 behavior is unlike other @value{tramp} methods, where local user name
872 is substituted.
874 The @option{smb} method is unavailable if Emacs is run under a local
875 user authentication context in MS Windows.  However such users can
876 still access remote files using UNC file names instead of @value{tramp}:
878 @example
879 //melancholia/daniel$$/.emacs
880 @end example
882 UNC file name specification does not allow the specification of a
883 different user name for authentication like the @command{smbclient}
884 can.
887 @item @option{adb}
888 @cindex method adb
889 @cindex adb method
891 This method uses Android Debug Bridge program for accessing Android
892 devices.  The Android Debug Bridge must be installed locally for
893 @value{tramp} to work.  Some GNU/Linux distributions provide Android
894 Debug Bridge as an installation package.  Alternatively, the program is
895 installed as part of the Android SDK@.  @value{tramp} finds the
896 @command{adb} program either via the @env{PATH} environment variable
897 or the absolute path set in the variable @var{tramp-adb-program}.
899 @value{tramp} connects to Android devices with @option{adb} only when
900 the custom option @option{tramp-adb-connect-if-not-connected} is not
901 @code{nil}.  Otherwise, the connection must be established outside
902 Emacs.
904 @value{tramp} does not require a host name part of the remote file
905 name when a single Android device is connected to @command{adb}.
906 @value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
907 @command{adb devices} shows available host names.
909 @option{adb} method normally does not need user name to authenticate
910 on the Android device because it runs under the @command{adbd}
911 process.  But when a user name is specified, however, @value{tramp}
912 applies an @command{su} in the syntax.  When authentication does not
913 succeed, especially on un-rooted Android devices, @value{tramp}
914 displays login errors.
916 For Android devices connected through TCP/IP, a port number can be
917 specified using @file{device#42} host name syntax or @value{tramp} can
918 use the default value as declared in @command{adb} command.  Port
919 numbers are not applicable to Android devices connected through USB@.
921 @end table
924 @node GVFS based methods
925 @section GVFS based external methods
926 @cindex methods, gvfs
927 @cindex gvfs based methods
928 @cindex dbus
930 GVFS is the virtual file system for the Gnome Desktop,
931 @uref{http://en.wikipedia.org/wiki/GVFS}.  Remote files on GVFS are
932 mounted locally through FUSE and @value{tramp} uses this locally
933 mounted directory internally.
935 Emacs uses the D-Bus mechanism to communicate with GVFS@.  Emacs must
936 have the message bus system, D-Bus integration active, @pxref{Top, ,
937 D-Bus, dbus}.
939 @table @asis
940 @item @option{afp}
941 @cindex method afp
942 @cindex afp method
944 This method is for connecting to remote hosts with the Apple Filing
945 Protocol for accessing files on Mac OS X volumes.  @value{tramp} access
946 syntax requires a leading volume (share) name, for example:
947 @file{@trampfn{afp,user@@host,/volume}}.
949 @item @option{dav}
950 @item @option{davs}
951 @cindex method dav
952 @cindex method davs
953 @cindex dav method
954 @cindex davs method
956 @option{dav} method provides access to WebDAV files and directories
957 based on standard protocols, such as HTTP@.  @option{davs} does the same
958 but with SSL encryption.  Both methods support the port numbers.
960 @item @option{obex}
961 @cindex method obex
962 @cindex obex method
964 OBEX is an FTP-like access protocol for cell phones and similar simple
965 devices.  @value{tramp} supports OBEX over Bluetooth.
967 @item @option{sftp}
968 @cindex method sftp
969 @cindex sftp method
971 This method uses @command{sftp} in order to securely access remote
972 hosts.  @command{sftp} is a more secure option for connecting to hosts
973 that for security reasons refuse @command{ssh} connections.
975 @item @option{synce}
976 @cindex method synce
977 @cindex synce method
979 @option{synce} method allows connecting to Windows Mobile devices.  It
980 uses GVFS for mounting remote files and directories via FUSE and
981 requires the SYNCE-GVFS plugin.
983 @end table
985 @defopt tramp-gvfs-methods
986 @vindex tramp-gvfs-methods
987 This custom option is a list of external methods for GVFS@.  By
988 default, this list includes @option{afp}, @option{dav}, @option{davs},
989 @option{obex}, @option{sftp} and @option{synce}.  Other methods to
990 include are: @option{ftp} and @option{smb}.
991 @end defopt
994 @node Gateway methods
995 @section Gateway methods
996 @cindex methods, gateway
997 @cindex gateway methods
999 Gateway methods are for proxy host declarations (@pxref{Multi-hops})
1000 so as to pass through firewalls and proxy servers.  They are not like
1001 the other methods that declare direct connections to a remote host.
1003 A gateway method always comes with a port setting.  @value{tramp}
1004 targets the port number with the gateway method
1005 @file{localhost#random_port} from where the firewall or proxy server
1006 is accessed.
1008 Gateway methods support user name and password declarations for
1009 authenticating the corresponding firewall or proxy server.  Such
1010 authentication can be passed through only if granted access by system
1011 administrators.
1013 @table @asis
1014 @item @option{tunnel}
1015 @cindex method tunnel
1016 @cindex tunnel method
1018 This method implements an HTTP tunnel via the @command{CONNECT}
1019 command (conforming to RFC 2616, 2817 specifications).  Proxy servers
1020 using HTTP version 1.1 or later protocol support this command.
1022 For authentication, this protocol uses only @option{Basic
1023 Authentication} (see RFC 2617).  When no port number is specified, this
1024 protocol defaults to @option{8080}.
1026 @item @option{socks}
1027 @cindex method socks
1028 @cindex socks method
1030 The @option{socks} method connects to SOCKSv5 servers (see RFC 1928)
1031 and supports @option{Username/Password Authentication}.
1033 The default port number for the socks server is @option{1080}, if not
1034 specified otherwise.
1036 @end table
1039 @node Default Method
1040 @section Selecting a default method
1041 @cindex default method
1042 @vindex tramp-default-method
1043 @vindex tramp-default-method-alist
1045 Default method is for transferring files.  The variable
1046 @code{tramp-default-method} sets it.  @value{tramp} uses this variable
1047 to determine the default method for tramp file names that do not have
1048 one specified.
1050 @lisp
1051 (setq tramp-default-method "ssh")
1052 @end lisp
1054 Default methods for transferring files can be customized for specific
1055 user and host combinations through the alist variable
1056 @code{tramp-default-method-alist}.
1058 For example, the following two lines specify to use the @option{ssh}
1059 method for all user names matching @samp{john} and the @option{rsync}
1060 method for all host names matching @samp{lily}.  The third line
1061 specifies to use the @option{su} method for the user @samp{root} on
1062 the host @samp{localhost}.
1064 @lisp
1065 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1066 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1067 (add-to-list 'tramp-default-method-alist
1068              '("\\`localhost\\'" "\\`root\\'" "su"))
1069 @end lisp
1071 @noindent
1072 See the documentation for the variable
1073 @code{tramp-default-method-alist} for details.
1075 @noindent
1076 External methods performance faster for large files.
1078 @noindent
1079 @xref{Inline methods}.
1080 @xref{External methods}.
1082 Choosing the access method also depends on the security environment.
1083 For example, @option{rsh} and @option{telnet} methods that use clear
1084 text password transfers are inappropriate for over the Internet
1085 connections.  Secure remote connections should use @option{ssh} that
1086 provide encryption.
1089 @subsection Which method to use?
1090 @cindex choosing the right method
1092 @value{tramp} provides maximum number of choices for maximum
1093 flexibility.  Choosing which method depends on the hosts, clients,
1094 network speeds, and the security context.
1096 Start by using an inline method.
1098 External methods might be more efficient for large files, but most
1099 @value{tramp} users edit small files more often than large files.
1101 Enable compression, @var{tramp-inline-compress-start-size}, for a
1102 performance boost for large files.
1104 Since @command{ssh} has become the most common method of remote host
1105 access and it has the most reasonable security protocols, use
1106 @option{ssh} method.  Typical @option{ssh} usage to edit the
1107 @file{/etc/motd} file on the otherhost:
1109 @example
1110 @kbd{C-x C-f @trampfn{ssh,root@@otherhost,/etc/motd} @key{RET}}
1111 @end example
1113 If @option{ssh} is unavailable for whatever reason, look for other
1114 obvious options.  For Windows, try the @option{plink} method.  For
1115 Kerberos, try @option{krlogin}.
1117 For editing local files as @option{su} or @option{sudo} methods, try
1118 the shortened syntax of @samp{root}:
1120 @example
1121 @kbd{C-x C-f @trampfn{su,,/etc/motd} @key{RET}}
1122 @end example
1124 For editing large files, @option{scp} is faster than @option{ssh}.
1125 @option{pscp} is faster than @option{plink}.  But this speed
1126 improvement is not always true.
1129 @node Default User
1130 @section Selecting a default user
1131 @cindex default user
1132 @vindex tramp-default-user
1133 @vindex tramp-default-user-alist
1135 @value{tramp} file name can omit the user name part since
1136 @value{tramp} substitutes the currently logged-in user name.  However
1137 this substitution can be overridden with @code{tramp-default-user}.
1138 For example:
1140 @lisp
1141 (setq tramp-default-user "root")
1142 @end lisp
1144 Instead of a single default user, @code{tramp-default-user-alist}
1145 allows multiple default user values based on access method or host
1146 name combinations.  The alist can hold multiple values.  For example, to
1147 use the @samp{john} as the default user for the domain
1148 @samp{somewhere.else} only:
1150 @lisp
1151 (add-to-list 'tramp-default-user-alist
1152              '("ssh" ".*\\.somewhere\\.else\\'" "john"))
1153 @end lisp
1155 @noindent
1156 See the documentation for the variable @code{tramp-default-user-alist}
1157 for more details.
1159 A Caution: @value{tramp} will override any default user specified in
1160 the configuration files outside Emacs, such as @file{~/.ssh/config}.
1161 To stop @value{tramp} from applying the default value, set the
1162 corresponding alist entry to nil:
1164 @lisp
1165 (add-to-list 'tramp-default-user-alist
1166              '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
1167 @end lisp
1169 The last entry in @code{tramp-default-user-alist} should be reserved
1170 for catch-all or most often used login.
1172 @lisp
1173 (add-to-list 'tramp-default-user-alist
1174              '(nil nil "jonas") t)
1175 @end lisp
1178 @node Default Host
1179 @section Selecting a default host
1180 @cindex default host
1181 @vindex tramp-default-host
1182 @vindex tramp-default-host-alist
1184 When host name is omitted, @value{tramp} substitutes the value from
1185 the @code{tramp-default-host} variable.  It is initially populated
1186 with the local hostname where Emacs is running.  Both the default user
1187 and default host can be overridden as follows:
1189 @lisp
1190 (setq tramp-default-user "john"
1191       tramp-default-host "target")
1192 @end lisp
1194 With both defaults set, @samp{@trampfn{ssh,,}} will connect
1195 @value{tramp} to John's home directory on target.
1197 @strong{Note} @samp{/::} won't work, because @samp{/:} is the prefix
1198 for quoted file names.
1200 Instead of a single default host, @code{tramp-default-host-alist}
1201 allows multiple default host values based on access method or user
1202 name combinations.  The alist can hold multiple values.  While
1203 @code{tramp-default-host} is sufficient in most cases, some methods,
1204 like @option{adb}, require defaults overwritten.
1206 @noindent
1207 See the documentation for the variable @code{tramp-default-host-alist}
1208 for more details.
1211 @node Multi-hops
1212 @section Connecting to a remote host using multiple hops
1213 @cindex multi-hop
1214 @cindex proxy hosts
1216 Multi-hops are methods to reach hosts behind firewalls or to reach the
1217 outside world from inside a bastion host.  With multi-hops,
1218 @value{tramp} can negotiate these hops with the appropriate user/host
1219 authentication at each hop.  All methods until now have been the single
1220 hop kind, where the start and end points of the connection did not
1221 have intermediate check points.
1223 @defopt tramp-default-proxies-alist
1224 @vindex tramp-default-proxies-alist
1225 @option{tramp-default-proxies-alist} specifies proxy hosts to pass
1226 through.  This variable is list of triples consisting of (@var{host}
1227 @var{user} @var{proxy}).
1229 The first match is the proxy host through which passes the file name
1230 and the target host matching @var{user}@@@var{host}.  @var{host} and
1231 @var{user} are regular expressions or @code{nil}, interpreted as a
1232 regular expression which always matches.
1234 @var{proxy} is a literal @value{tramp} file name whose local name part
1235 is ignored, and the method and user name parts are optional.
1237 The method must be an inline or gateway method (@pxref{Inline
1238 methods}, @pxref{Gateway methods}).
1239 If @var{proxy} is @code{nil}, no additional hop is required reaching
1240 @var{user}@@@var{host}.
1242 For example, to pass through the host @samp{bastion.your.domain} as
1243 user @samp{bird} to reach remote hosts outside the local domain:
1245 @lisp
1246 (add-to-list 'tramp-default-proxies-alist
1247              '("\\." nil "@trampfn{ssh,bird@@bastion.your.domain,}"))
1248 (add-to-list 'tramp-default-proxies-alist
1249              '("\\.your\\.domain\\'" nil nil))
1250 @end lisp
1252 @strong{Note}: @code{add-to-list} adds elements at the beginning of a
1253 list.  Therefore, most relevant rules must come last in the list.
1255 Proxy hosts can be cascaded in the alist.  If there is another host
1256 called @samp{jump.your.domain}, which is the only host allowed to
1257 connect to @samp{bastion.your.domain}, then:
1259 @lisp
1260 (add-to-list 'tramp-default-proxies-alist
1261              '("\\`bastion\\.your\\.domain\\'"
1262                "\\`bird\\'"
1263                "@trampfn{ssh,jump.your.domain,}"))
1264 @end lisp
1266 @var{proxy} can take patterns @code{%h} or @code{%u} for @var{host} or
1267 @var{user} respectively.
1269 To login as @samp{root} on remote hosts in the domain
1270 @samp{your.domain}, but login as @samp{root} is disabled for non-local
1271 access, then use this alist entry:
1273 @lisp
1274 (add-to-list 'tramp-default-proxies-alist
1275              '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
1276 @end lisp
1278 Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
1279 to @samp{randomhost.your.domain} via @code{ssh} under your account
1280 name, and then perform @code{sudo -u root} on that host.
1282 It is key for the sudo method in the above example to be applied on
1283 the host after reaching it and not on the local host.
1285 @var{host}, @var{user} and @var{proxy} can also take Lisp forms.  These
1286 forms when evaluated must return either a string or @code{nil}.
1288 To generalize (from the previous example): For all hosts, except my
1289 local one, first connect via @command{ssh}, and then apply
1290 @command{sudo -u root}:
1292 @lisp
1293 (add-to-list 'tramp-default-proxies-alist
1294              '(nil "\\`root\\'" "@trampfn{ssh,%h,}"))
1295 (add-to-list 'tramp-default-proxies-alist
1296              '((regexp-quote (system-name)) nil nil))
1297 @end lisp
1299 The above configuration allows @value{tramp} connection as @samp{root}
1300 to remote Ubuntu hosts.
1302 @code{tramp-default-proxies-alist} is also used for passing through
1303 firewalls or proxy servers.
1305 For example, the local host @samp{proxy.your.domain} on port 3128
1306 serves as HTTP proxy to the outer world.  User has access rights to
1307 another proxy server on @samp{host.other.domain}.@footnote{HTTP tunnels
1308 are intended for secure SSL/TLS communication.  Therefore, many proxy
1309 servers restrict the tunnels to related target ports.  You might need
1310 to run your ssh server on your target host @samp{host.other.domain} on
1311 such a port, like 443 (https).  See
1312 @uref{http://savannah.gnu.org/maintenance/CvsFromBehindFirewall} for
1313 discussion of ethical issues.}  Then the configuration is:
1315 @lisp
1316 (add-to-list 'tramp-default-proxies-alist
1317              '("\\`host\\.other\\.domain\\'" nil
1318              "@trampfn{tunnel,proxy.your.domain#3128,}"))
1319 @end lisp
1321 Gateway methods in a multiple hop chain can be declared only as the first hop.
1322 @end defopt
1324 Passing through hops involves dealing with restricted shells, such as
1325 @command{rbash}.  If @value{tramp} is made aware, then it would use
1326 them for proxies only.
1328 @defopt tramp-restricted-shell-hosts-alist
1329 @vindex tramp-restricted-shell-hosts-alist
1330 An alist of regular expressions of hosts running restricted shells,
1331 such as @command{rbash}.  @value{tramp} will then use them only as
1332 proxies.
1334 To specify the bastion host from the example above as running a
1335 restricted shell:
1337 @lisp
1338 (add-to-list 'tramp-restricted-shell-hosts-alist
1339              "\\`bastion\\.your\\.domain\\'")
1340 @end lisp
1341 @end defopt
1344 @node Customizing Methods
1345 @section Using Non-Standard Methods
1346 @cindex customizing methods
1347 @cindex using non-standard methods
1348 @cindex create your own methods
1350 The @code{tramp-methods} variable currently has an exhaustive list of
1351 predefined methods.  Any part of this list can be modified with more
1352 suitable settings.  Refer to the Lisp documentation of that variable,
1353 accessible with @kbd{C-h v tramp-methods @key{RET}}.
1356 @node Customizing Completion
1357 @section Selecting config files for user/host name completion
1358 @cindex customizing completion
1359 @cindex selecting config files
1360 @vindex tramp-completion-function-alist
1362 @code{tramp-completion-function-alist} uses predefined files for user
1363 and host name completion (@pxref{File name completion}).  For each
1364 method, it keeps a set of configuration files and a function that can
1365 parse that file.  Each entry in @code{tramp-completion-function-alist}
1366 is of the form (@var{method} @var{pair1} @var{pair2} @dots{}).
1368 Each @var{pair} is composed of (@var{function} @var{file}).
1369 @var{function} is responsible for extracting user names and host names
1370 from @var{file} for completion.  There are two functions which access
1371 this variable:
1373 @defun tramp-get-completion-function method
1374 This function returns the list of completion functions for @var{method}.
1376 Example:
1377 @example
1378 (tramp-get-completion-function "rsh")
1380      @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1381          (tramp-parse-rhosts "~/.rhosts"))
1382 @end example
1383 @end defun
1385 @defun tramp-set-completion-function method function-list
1386 This function sets @var{function-list} as list of completion functions
1387 for @var{method}.
1389 Example:
1390 @example
1391 (tramp-set-completion-function "ssh"
1392  '((tramp-parse-sconfig "/etc/ssh_config")
1393    (tramp-parse-sconfig "~/.ssh/config")))
1395      @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1396          (tramp-parse-sconfig "~/.ssh/config"))
1397 @end example
1398 @end defun
1400 The following predefined functions parsing configuration files exist:
1402 @table @asis
1403 @item @code{tramp-parse-rhosts}
1404 @findex tramp-parse-rhosts
1406 This function parses files which are syntactical equivalent to
1407 @file{~/.rhosts}.  It returns both host names and user names, if
1408 specified.
1410 @item @code{tramp-parse-shosts}
1411 @findex tramp-parse-shosts
1413 This function parses files which are syntactical equivalent to
1414 @file{~/.ssh/known_hosts}.  Since there are no user names specified
1415 in such files, it can return host names only.
1417 @item @code{tramp-parse-sconfig}
1418 @findex tramp-parse-shosts
1420 This function returns the host nicknames defined by @code{Host} entries
1421 in @file{~/.ssh/config} style files.
1423 @item @code{tramp-parse-shostkeys}
1424 @findex tramp-parse-shostkeys
1426 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1427 @file{~/ssh2/hostkeys/*}.  Hosts are coded in file names
1428 @file{hostkey_@var{portnumber}_@var{host-name}.pub}.  User names
1429 are always @code{nil}.
1431 @item @code{tramp-parse-sknownhosts}
1432 @findex tramp-parse-shostkeys
1434 Another SSH2 style parsing of directories like
1435 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}.  This
1436 case, hosts names are coded in file names
1437 @file{@var{host-name}.@var{algorithm}.pub}.  User names are always @code{nil}.
1439 @item @code{tramp-parse-hosts}
1440 @findex tramp-parse-hosts
1442 A function dedicated to @file{/etc/hosts} for host names.
1444 @item @code{tramp-parse-passwd}
1445 @findex tramp-parse-passwd
1447 A function which parses @file{/etc/passwd} files for user names.
1449 @item @code{tramp-parse-etc-group}
1450 @findex tramp-parse-etc-group
1452 A function which parses @file{/etc/group} files for group names.
1454 @item @code{tramp-parse-netrc}
1455 @findex tramp-parse-netrc
1457 A function which parses @file{~/.netrc} and @file{~/.authinfo}-style files.
1459 @end table
1461 To keep a custom file with custom data in a custom structure, a custom
1462 function has to be provided.  This function must meet the following
1463 conventions:
1465 @defun my-tramp-parse file
1466 @var{file} must be either a file on the host, or @code{nil}.  The
1467 function must return a list of (@var{user} @var{host}), which are
1468 taken as candidates for completion for user and host names.
1470 Example:
1471 @example
1472 (my-tramp-parse "~/.my-tramp-hosts")
1474      @result{} ((nil "toto") ("daniel" "melancholia"))
1475 @end example
1476 @end defun
1479 @node Password handling
1480 @section Reusing passwords for several connections
1481 @cindex passwords
1483 To avoid repeated prompts for passwords, consider native caching
1484 mechanisms, such as @command{ssh-agent} for @option{ssh}-like
1485 methods, or @command{pageant} for @option{plink}-like methods.
1487 @value{tramp} offers alternatives when native solutions cannot meet
1488 the need.
1491 @anchor{Using an authentication file}
1492 @subsection Using an authentication file
1493 @vindex auth-sources
1495 The package @file{auth-source.el}, originally developed for No Gnus,
1496 reads passwords from different sources, @xref{Help for users, ,
1497 auth-source, auth}.  The default authentication file is
1498 @file{~/.authinfo.gpg}, but this can be changed via the variable
1499 @code{auth-sources}.
1501 @noindent
1502 A typical entry in the authentication file:
1504 @example
1505 machine melancholia port scp login daniel password geheim
1506 @end example
1508 The port can take any @value{tramp} method (@pxref{Inline methods},
1509 @pxref{External methods}).  Omitting port values matches all
1510 @value{tramp} methods.
1512 Setting @code{auth-source-debug} to @code{t} to debug messages.
1515 @anchor{Caching passwords}
1516 @subsection Caching passwords
1518 @value{tramp} can cache passwords as entered and reuse when needed for
1519 the same user or host name independent of the access method.
1521 @vindex password-cache-expiry
1523 @code{password-cache-expiry} sets the duration (in seconds) the
1524 passwords are remembered.  Passwords are never saved permanently nor
1525 can they extend beyond the lifetime of the current Emacs session.  Set
1526 @code{password-cache-expiry} to @code{nil} to disable expiration.
1528 @vindex password-cache
1530 Set @code{password-cache} to @code{nil} to disable password caching.
1533 @node Connection caching
1534 @section Reusing connection related information
1535 @cindex caching
1536 @vindex tramp-persistency-file-name
1538 For faster initial connection times, @value{tramp} stores previous
1539 connection properties in a file specified by the variable
1540 @code{tramp-persistency-file-name}.
1542 The default file name for @code{tramp-persistency-file-name} is
1543 @file{~/.emacs.d/tramp}.
1545 @value{tramp} reads this file during Emacs startup, and writes to it
1546 when exiting Emacs.  Delete this file for @value{tramp} to recreate a
1547 new one on next Emacs startup.
1549 Set @code{tramp-persistency-file-name} to @code{nil} to disable
1550 storing connections persistently.
1552 To reuse connection information from the persistent list,
1553 @value{tramp} needs to uniquely identify every host.  However in some
1554 cases, two different connections may result in the same persistent
1555 information.  For example, connecting to a host using @command{ssh} and
1556 connecting to the same host through @code{sshd} on port 3001.  Both
1557 access methods result in nearly identical persistent specifications
1558 @file{@trampfn{ssh,localhost,}} and @file{@trampfn{ssh,localhost#3001,}}.
1560 Changing host names could avoid duplicates.  One way is to add a
1561 @option{Host} section in @file{~/.ssh/config} (@pxref{Frequently Asked
1562 Questions}).  Another way is to apply multiple hops (@pxref{Multi-hops}).
1564 When @value{tramp} detects a change in the operating system version in
1565 a remote host (via the command @command{uname -sr}), it flushes all
1566 connection related information for that host and creates a new entry.
1569 @node Predefined connection information
1570 @section Setting own connection related information
1571 @vindex tramp-connection-properties
1573 For more precise customization, parameters specified by
1574 @code{tramp-methods} can be overwritten manually.
1576 Set @code{tramp-connection-properties} to manually override
1577 @code{tramp-methods}.  Properties in this list are in the form
1578 @code{(@var{regexp} @var{property} @var{value})}.  @var{regexp} matches
1579 remote file names.  Use @code{nil} to match all.  @var{property} is the
1580 property's name, and @var{value} is the property's value.
1582 @var{property} is any method specific parameter contained in
1583 @code{tramp-methods}.  The parameter key in @code{tramp-methods} is a
1584 symbol name @code{tramp-<foo>}.  To overwrite that property, use the
1585 string @samp{<foo>} for @var{property}.  For example, this changes the
1586 remote shell:
1588 @lisp
1589 (add-to-list 'tramp-connection-properties
1590              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1591                    "remote-shell" "/bin/ksh"))
1592 (add-to-list 'tramp-connection-properties
1593              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1594                    "remote-shell-login" '("-")))
1595 @end lisp
1597 The parameters @code{tramp-remote-shell} and
1598 @code{tramp-remote-shell-login} in @code{tramp-methods} now have new
1599 values for the remote host.
1601 @var{property} could also be any property found in
1602 @code{tramp-persistency-file-name}.
1604 To get around how restricted shells randomly drop connections, set the
1605 special property @samp{busybox}.  For example:
1607 @lisp
1608 (add-to-list 'tramp-connection-properties
1609              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1610                    "busybox" t))
1611 @end lisp
1614 @node Remote programs
1615 @section How @value{tramp} finds and uses programs on the remote host
1617 @value{tramp} requires access to and rights to several commands on
1618 remote hosts: @command{ls}, @command{test}, @command{find} and
1619 @command{cat}.
1621 Besides there are other required programs for @ref{Inline methods} and
1622 @ref{External methods} of connection.
1624 To improve performance and accuracy of remote file access,
1625 @value{tramp} uses @command{perl} (or @command{perl5}) and
1626 @command{grep} when available.
1628 @defopt tramp-remote-path
1629 @vindex tramp-remote-path
1630 @vindex tramp-default-remote-path
1631 @vindex tramp-own-remote-path
1632 @option{tramp-remote-path} specifies which remote directory paths
1633 @value{tramp} can search for @ref{Remote programs}.
1635 @value{tramp} uses standard defaults, such as @file{/bin} and
1636 @file{/usr/bin}, which are reasonable for most hosts.  To accommodate
1637 differences in hosts and paths, for example, @file{/bin:/usr/bin} on
1638 Debian GNU/Linux or
1639 @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin} on
1640 Solaris, @value{tramp} queries the remote host with @command{getconf
1641 PATH} and updates the symbol @code{tramp-default-remote-path}.
1643 For instances where hosts keep obscure locations for paths for
1644 security reasons, manually add such paths to local @file{.emacs} as
1645 shown below for @value{tramp} to use when connecting.
1647 @lisp
1648 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1649 @end lisp
1651 Another way to find the remote path is to use the path assigned to the
1652 remote user by the remote host.  @value{tramp} does not normally retain
1653 this remote path after logging.  However, @code{tramp-own-remote-path}
1654 preserves the path value, which can be used to update
1655 @code{tramp-remote-path}.
1657 @lisp
1658 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1659 @end lisp
1660 @end defopt
1662 When remote search paths are changed, local @value{tramp} caches must
1663 be recomputed.  To force @value{tramp} to recompute afresh, exit
1664 Emacs, remove the persistent file (@pxref{Connection caching}), and
1665 restart Emacs.
1668 @node Remote shell setup
1669 @section Remote shell setup hints
1670 @cindex remote shell setup
1671 @cindex @file{.profile} file
1672 @cindex @file{.login} file
1673 @cindex shell init files
1675 @value{tramp} checks for the availability of standard programs in the
1676 usual locations.  Common tactics include successively trying
1677 @command{test -e}, @command{/usr/bin/test -e}, and @command{/bin/test
1678 -e}.  @command{ls -d} is another approach.  But these approaches do not
1679 help with these new login patterns.
1681 When @value{tramp} encounters two-factor logins or additional challenge
1682 questions, such as entering birth date or security code or passphrase,
1683 @value{tramp} needs a few more configuration steps to accommodate
1684 them.
1686 The difference between a password prompt and a passphrase prompt is
1687 that the password for completing the login while the passphrase is
1688 for authorizing access to local authentication information, such as
1689 the ssh key.
1691 There is no one configuration to accommodate all the variations in
1692 login security, especially not the exotic ones.  However, @value{tramp}
1693 provides a few tweaks to address the most common ones.
1695 @table @asis
1696 @item @var{tramp-shell-prompt-pattern}
1697 @vindex tramp-shell-prompt-pattern
1699 @code{tramp-shell-prompt-pattern} is for remote login shell prompt,
1700 which may not be the same as the local login shell prompt,
1701 @code{shell-prompt-pattern}.  Since most hosts use identical prompts,
1702 @value{tramp} sets a similar default value for both prompts.
1704 @item @var{tramp-password-prompt-regexp}
1705 @item @var{tramp-wrong-passwd-regexp}
1706 @vindex tramp-password-prompt-regexp
1707 @vindex tramp-wrong-passwd-regexp
1709 @value{tramp} uses @var{tramp-password-prompt-regexp} to distinguish
1710 between prompts for passwords and prompts for passphrases.  By default,
1711 @var{tramp-password-prompt-regexp} handles the detection in English
1712 language environments.  See a localization example below:
1714 @lisp
1715 (setq
1716   tramp-password-prompt-regexp
1717     (concat
1718       "^.*"
1719       (regexp-opt
1720         '("passphrase" "Passphrase"
1721           ;; English
1722           "password" "Password"
1723           ;; Deutsch
1724           "passwort" "Passwort"
1725           ;; Français
1726           "mot de passe" "Mot de passe") t)
1727       ".*:\0? *"))
1728 @end lisp
1730 Similar localization may be necessary for handling wrong password
1731 prompts, for which @value{tramp} uses @var{tramp-wrong-passwd-regexp}.
1733 @item @command{tset} and other questions
1734 @cindex Unix command tset
1735 @cindex tset Unix command
1736 @vindex tramp-terminal-type
1738 To suppress inappropriate prompts for terminal type, @value{tramp}
1739 sets the @env{TERM} to @code{dumb} before the remote login process
1740 begins via the variable @code{tramp-terminal-type}.  This will silence
1741 common @command{tset} related prompts.
1743 @value{tramp}'s strategy for handling such prompts (commonly triggered
1744 from login scripts on remote hosts) is to set the environment
1745 variables so that no prompts interrupt the shell initialization
1746 process.
1748 @vindex tramp-actions-before-shell
1750 An alternative approach is to configure @value{tramp} with strings
1751 that can identify such questions using
1752 @code{tramp-actions-before-shell}.  Example:
1754 @lisp
1755 (defconst my-tramp-prompt-regexp
1756   (concat (regexp-opt '("Enter the birth date of your mother:") t)
1757           "\\s-*")
1758   "Regular expression matching my login prompt question.")
1760 (defun my-tramp-action (proc vec)
1761   "Enter \"19000101\" in order to give a correct answer."
1762   (save-window-excursion
1763     (with-current-buffer (tramp-get-connection-buffer vec)
1764       (tramp-message vec 6 "\n%s" (buffer-string))
1765       (tramp-send-string vec "19000101"))))
1767 (add-to-list 'tramp-actions-before-shell
1768              '(my-tramp-prompt-regexp my-tramp-action))
1769 @end lisp
1772 @item Conflicting names for users and variables in @file{.profile}
1774 When a user name is the same as a variable name in a local file, such
1775 as @file{.profile}, then @value{tramp} may send incorrect values for
1776 environment variables.  To avoid incorrect values, change the local
1777 variable name to something different from the user name.  For example,
1778 if the user name is @env{FRUMPLE}, then change the variable name to
1779 @env{FRUMPLE_DIR}.
1782 @item Non-Bourne commands in @file{.profile}
1784 When the remote host's @file{.profile} is also used for shells other
1785 than Bourne shell, then some incompatible syntaxes for commands in
1786 @file{.profile} may trigger errors in Bourne shell on the host and may
1787 not complete client's @value{tramp} connections.
1789 One example of a Bourne shell incompatible syntax in @file{.profile}:
1790 using @command{export FOO=bar} instead of @command{FOO=bar; export
1791 FOO}.  After remote login, @value{tramp} will trigger an error during
1792 its execution of @command{/bin/sh} on the remote host because Bourne
1793 shell does not recognize the export command as entered in
1794 @file{.profile}.
1796 Likewise, (@code{~}) character in paths will cause errors because
1797 Bourne shell does not do (@code{~}) character expansions.
1799 One approach to avoiding these incompatibilities is to make all
1800 commands in @file{~/.shrc} and @file{~/.profile} Bourne shell
1801 compatible so @value{tramp} can complete connections to that remote.
1802 To accommodate using non-Bourne shells on that remote, use other
1803 shell-specific config files.  For example, bash can use
1804 @file{~/.bash_profile} and ignore @file{.profile}.
1807 @item Interactive shell prompt
1809 @value{tramp} redefines the remote shell prompt internally for robust
1810 parsing.  This redefinition affects the looks of a prompt in an
1811 interactive remote shell through commands, such as @kbd{M-x
1812 shell}.  Such prompts, however, can be reset to something more readable
1813 and recognizable using these @value{tramp} variables.
1815 @value{tramp} sets the @env{INSIDE_EMACS} variable in the startup
1816 script file @file{~/.emacs_SHELLNAME}.
1818 @env{SHELLNAME} is @code{bash} or equivalent shell names.  Change it by
1819 setting the environment variable @env{ESHELL} in the @file{.emacs} as
1820 follows:
1822 @lisp
1823 (setenv "ESHELL" "bash")
1824 @end lisp
1826 Then re-set the prompt string in @file{~/.emacs_SHELLNAME} as follows:
1828 @example
1829 # Reset the prompt for remote Tramp shells.
1830 if [ "$@{INSIDE_EMACS/*tramp*/tramp@}" == "tramp" ] ; then
1831    PS1="[\u@@\h \w]$ "
1833 @end example
1835 @ifinfo
1836 @xref{Interactive Shell, , , emacs}.
1837 @end ifinfo
1839 @item @command{busybox} / @command{nc}
1840 @cindex Unix command nc
1841 @cindex nc Unix command
1843 @value{tramp}'s @option{nc} method uses the @command{nc} command to
1844 install and execute a listener as follows (see @code{tramp-methods}):
1846 @example
1847 # nc -l -p 42
1848 @end example
1850 The above command-line syntax has changed with @command{busybox}
1851 versions.  If @command{nc} refuses the @command{-p} parameter, then
1852 overwrite as follows:
1854 @lisp
1855 (add-to-list
1856  'tramp-connection-properties
1857  `(,(regexp-quote "192.168.0.1") "remote-copy-args" (("-l") ("%r"))))
1858 @end lisp
1860 @noindent
1861 where @samp{192.168.0.1} is the remote host IP address
1862 (@pxref{Predefined connection information}).
1864 @end table
1867 @node Android shell setup
1868 @section Android shell setup hints
1869 @cindex android shell setup
1871 @value{tramp} uses the @option{adb} method to access Android
1872 devices.  Android devices provide a restricted shell access through an
1873 USB connection.  The local host must have the Android SDK installed.
1875 Applications such as @code{SSHDroid} that run @command{sshd} process
1876 on the Android device can accept any @option{ssh}-based methods
1877 provided these settings are adjusted:
1879 @code{sh} must be specified for remote shell since Android devices do
1880 not provide @code{/bin/sh}.  @code{sh} will then invoke whatever shell is
1881 installed on the device with this setting:
1883 @lisp
1884 (add-to-list 'tramp-connection-properties
1885              (list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
1886 @end lisp
1888 @noindent
1889 where @samp{192.168.0.26} is the Android device's IP address.
1890 (@pxref{Predefined connection information}).
1892 @value{tramp} requires preserving @env{PATH} environment variable from
1893 user settings.  Android devices prefer @file{/system/xbin} path over
1894 @file{/system/bin}.  Both of these are set as follows:
1896 @lisp
1897 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1898 (add-to-list 'tramp-remote-path "/system/xbin")
1899 @end lisp
1901 @noindent
1902 When the Android device is not @samp{rooted}, specify a writable
1903 directory for temporary files:
1905 @lisp
1906 (add-to-list 'tramp-remote-process-environment "TMPDIR=$HOME")
1907 @end lisp
1909 @noindent
1910 Open a remote connection with the command @kbd{C-x C-f
1911 @trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
1912 on port @samp{2222}.
1914 To add a corresponding entry to the @file{~/.ssh/config} file
1915 (recommended), use this:
1917 @example
1918 Host android
1919      HostName 192.168.0.26
1920      User root
1921      Port 2222
1922 @end example
1924 @noindent
1925 To use the host name @samp{android} instead of the IP address shown in
1926 the previous example, fix the connection properties as follows:
1928 @lisp
1929 (add-to-list 'tramp-connection-properties
1930              (list (regexp-quote "android") "remote-shell" "sh"))
1931 @end lisp
1933 @noindent
1934 Open a remote connection with a more concise command @kbd{C-x C-f
1935 @trampfn{ssh,android,}}.
1938 @node Auto-save and Backup
1939 @section Auto-save and Backup configuration
1940 @cindex auto-save
1941 @cindex backup
1942 @vindex backup-directory-alist
1944 To avoid @value{tramp} from saving backup files owned by @samp{root}
1945 to locations accessible to others, default backup settings in
1946 @code{backup-directory-alist} have to be altered.
1948 Here's a scenario where files could be inadvertently exposed.  Emacs
1949 by default writes backup files to the same directory as the original
1950 files unless changed to another location, such as
1951 @file{~/.emacs.d/backups/}.  Such a directory will also be used by
1952 default by @value{tramp} when using, say, a restricted file
1953 @file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup file
1954 of the secretfile is now owned by the user logged in from
1955 @value{tramp} and not @samp{root}.
1957 When @code{backup-directory-alist} is @code{nil} (the default), such
1958 problems do not occur.
1960 To ``turn off'' the backup feature for @value{tramp} files and stop
1961 @value{tramp} from saving to the backup directory, use this:
1963 @lisp
1964 (add-to-list 'backup-directory-alist
1965              (cons tramp-file-name-regexp nil))
1966 @end lisp
1968 @noindent
1969 Disabling backups can be targeted to just the @option{su} and
1970 @option{sudo} methods:
1972 @lisp
1973 (setq backup-enable-predicate
1974       (lambda (name)
1975         (and (normal-backup-enable-predicate name)
1976              (not
1977               (let ((method (file-remote-p name 'method)))
1978                 (when (stringp method)
1979                   (member method '("su" "sudo"))))))))
1980 @end lisp
1982 Another option is to create better backup file naming with user and
1983 host names prefixed to the file name.  For example, transforming
1984 @file{/etc/secretfile} to
1985 @file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
1986 @value{tramp} variable @code{tramp-backup-directory-alist} from the
1987 existing variable @code{backup-directory-alist}.
1989 Then @value{tramp} backs up to a file name that is transformed with a
1990 prefix consisting of the DIRECTORY name.  This file name prefixing
1991 happens only when the DIRECTORY is an absolute local file name.
1993 @noindent
1994 Example:
1996 @lisp
1997 (add-to-list 'backup-directory-alist
1998              (cons "." "~/.emacs.d/backups/"))
1999 (setq tramp-backup-directory-alist backup-directory-alist)
2000 @end lisp
2002 @noindent
2003 The backup file name of
2004 @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
2005 @ifset unified
2006 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
2007 @end ifset
2008 @ifset separate
2009 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
2010 @end ifset
2012 Just as for backup files, similar issues of file naming affect
2013 auto-saving @value{tramp} files.  Auto-saved files are saved in the
2014 directory specified by the variable
2015 @code{auto-save-file-name-transforms}.  By default this is set to the
2016 local temporary directory.  But in some versions of Debian GNU/Linux,
2017 this points to the source directory where the Emacs was compiled.
2018 Reset such values to a valid directory.
2020 Set @code{auto-save-file-name-transforms} to @code{nil} to save
2021 auto-saved files to the same directory as the original file.
2023 Alternatively, set the variable @code{tramp-auto-save-directory} to
2024 direct all auto saves to that location.
2026 @node Windows setup hints
2027 @section Issues with Cygwin ssh
2028 @cindex Cygwin, issues
2030 This section is incomplete.  Please share your solutions.
2032 @cindex method sshx with Cygwin
2033 @cindex sshx method with Cygwin
2035 Cygwin's @command{ssh} works only with a Cygwin version of Emacs.  To
2036 check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
2037 test.host}.  Incompatibilities trigger this message:
2039 @example
2040 Pseudo-terminal will not be allocated because stdin is not a terminal.
2041 @end example
2043 Some older versions of Cygwin's @command{ssh} work with the
2044 @option{sshx} access method.  Consult Cygwin's FAQ at
2045 @uref{http://cygwin.com/faq/} for details.
2048 @cindex method scpx with Cygwin
2049 @cindex scpx method with Cygwin
2051 When using the @option{scpx} access method, Emacs may call
2052 @command{scp} with Windows file naming, such as @code{c:/foo}.  But
2053 the version of @command{scp} that is installed with Cygwin does not
2054 know about Windows file naming, which causes it to incorrectly look
2055 for a host named @code{c}.
2057 A workaround: write a wrapper script for @option{scp} to convert
2058 Windows file names to Cygwin file names.
2060 @cindex Cygwin and ssh-agent
2061 @cindex SSH_AUTH_SOCK and Emacs on Windows
2063 When using the @command{ssh-agent} on Windows for password-less
2064 interaction, @option{ssh} methods depend on the environment variable
2065 @env{SSH_AUTH_SOCK}.  But this variable is not set when Emacs is
2066 started from a Desktop shortcut and authentication fails.
2068 One workaround is to use a Windows based SSH Agent, such as
2069 Pageant.  It is part of the Putty Suite of tools.
2071 The fallback is to start Emacs from a shell.
2074 @node Usage
2075 @chapter Using @value{tramp}
2076 @cindex using @value{tramp}
2078 @value{tramp} operates transparently, accessing remote files as if
2079 they are local.  However, @value{tramp} employs a formalized remote
2080 file naming syntax to perform its functions transparently.  This
2081 syntax consists of many parts specifying access methods,
2082 authentication, host names, and file names.  Ange FTP uses a similar
2083 syntax.
2085 @cindex type-ahead
2087 Unlike opening local files in Emacs, which are instantaneous, opening
2088 remote files in @value{tramp} is slower at first.  Sometimes there is
2089 a noticeable delay before the prompts for passwords or authentication
2090 appear in the minibuffer.  Hitting @kbd{@key{RET}} or other keys
2091 during this gap will be processed by Emacs.  This type-ahead facility
2092 is a feature of Emacs that may cause missed prompts when using
2093 @value{tramp}.
2095 @menu
2096 * File name Syntax::            @value{tramp} file name conventions.
2097 * File name completion::        File name completion.
2098 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
2099 * Remote processes::            Integration with other Emacs packages.
2100 * Cleanup remote connections::  Cleanup remote connections.
2101 @end menu
2104 @node File name Syntax
2105 @section @value{tramp} file name conventions
2106 @cindex file name syntax
2107 @cindex file name examples
2109 @file{@trampf{host,localfilename}} opens file @var{localfilename} on
2110 the remote host @var{host}, using the default method.  @xref{Default
2111 Method}.
2113 @table @file
2114 @item @value{prefix}melancholia@value{postfix}.emacs
2115 For the file @file{.emacs} located in the home directory, on the host
2116 @code{melancholia}.
2118 @item @value{prefix}melancholia.danann.net@value{postfix}.emacs
2119 For the file @file{.emacs} specified using the fully qualified domain name of
2120 the host.
2122 @item @value{prefix}melancholia@value{postfix}~/.emacs
2123 For the file @file{.emacs} specified using the @file{~}, which is expanded.
2125 @item @value{prefix}melancholia@value{postfix}~daniel/.emacs
2126 For the file @file{.emacs} located in @code{daniel}'s home directory
2127 on the host, @code{melancholia}.  The @file{~<user>} construct is
2128 expanded to the home directory of that user on the remote host.
2130 @item @value{prefix}melancholia@value{postfix}/etc/squid.conf
2131 For the file @file{/etc/squid.conf} on the host @code{melancholia}.
2133 @end table
2135 @var{host} can take IPv4 or IPv6 address, as in
2136 @file{@trampf{127.0.0.1,.emacs}} or
2137 @file{@trampf{@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
2138 @ifset unified
2139 For syntactical reasons, IPv6 addresses must be embedded in square
2140 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
2141 @end ifset
2143 By default, @value{tramp} will use the current local user name as the
2144 remote user name for log in to the remote host.  Specifying a different
2145 name using the proper syntax will override this default behavior:
2147 @example
2148 @trampf{user@@host,path/to.file}
2149 @end example
2151 @file{@trampf{daniel@@melancholia,.emacs}} is for file @file{.emacs}
2152 in @code{daniel}'s home directory on the host, @code{melancholia}.
2154 Specify other file access methods (@pxref{Inline methods},
2155 @pxref{External methods}) as part of the file name.
2157 Method name comes before user name, as in
2158 @file{@value{prefix}@var{method}@value{postfixhop}} (Note the trailing
2159 colon).  The syntax specifications for user, host, and file do not
2160 change.
2162 To connect to the host @code{melancholia} as @code{daniel}, using
2163 @option{ssh} method for @file{.emacs} in @code{daniel}'s home
2164 directory, the full specification is:
2165 @file{@trampfn{ssh,daniel@@melancholia,.emacs}}.
2167 A remote file name containing a host name, which is the same string as
2168 a method name, is not allowed.
2170 For specifying port numbers, affix @file{#<port>} to the host
2171 name.  For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
2174 @node File name completion
2175 @section File name completion
2176 @cindex file name completion
2178 @value{tramp} can complete the following @value{tramp} file name
2179 components: method names, user names, host names, and file names
2180 located on remote hosts.  Enable this by activating partial completion
2181 in @file{.emacs}.
2182 @ifinfo
2183 @xref{Completion Options, , , emacs}.
2184 @end ifinfo
2186 For example, type @kbd{C-x C-f @value{prefix}t @key{TAB}},
2187 @value{tramp} completion choices show up as
2189 @example
2190 @c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}}
2191 @multitable @columnfractions .5 .5
2192 @item @value{prefixhop}telnet@value{postfixhop} @tab tmp/
2193 @item @value{prefixhop}toto@value{postfix} @tab
2194 @end multitable
2195 @end example
2197 @samp{@value{prefixhop}telnet@value{postfixhop}} is a possible
2198 completion for the respective method, @samp{tmp/} stands for the
2199 directory @file{/tmp} on your local host, and
2200 @samp{@value{prefixhop}toto@value{postfix}} might be a host
2201 @value{tramp} has detected in your @file{~/.ssh/known_hosts} file
2202 (when using @option{ssh} as default method).
2204 Type @kbd{e @key{TAB}} for the minibuffer completion to
2205 @samp{@value{prefix}telnet@value{postfixhop}}.  Typing @kbd{@key{TAB}}
2206 shows host names @value{tramp} from @file{/etc/hosts} file, for example.
2208 @example
2209 @multitable @columnfractions .5 .5
2210 @c @multitable {@trampfn{telnet,melancholia.danann.net,}} {@trampfn{telnet,192.168.0.1,}}
2211 @item @trampfn{telnet,127.0.0.1,} @tab @trampfn{telnet,192.168.0.1,}
2212 @c @item @trampfn{telnet,@value{ipv6prefix}::1@value{ipv6postfix},} @tab @trampfn{telnet,localhost,}
2213 @item @value{prefix}telnet@value{postfixhop}@value{ipv6prefix}::1@value{ipv6postfix}@value{postfix} @tab @trampfn{telnet,localhost,}
2214 @item @trampfn{telnet,melancholia.danann.net,} @tab @trampfn{telnet,melancholia,}
2215 @end multitable
2216 @end example
2218 Choose a host from the above list and then continue to complete file
2219 names on that host.
2221 When the configuration (@pxref{Customizing Completion}) includes user
2222 names, then the completion lists will account for the user names as well.
2224 Remote hosts previously visited or hosts whose connections are kept
2225 persistently (@pxref{Connection caching}) will be included in the
2226 completion lists.
2228 After remote host name completion comes completion of file names on
2229 the remote host.  It works the same as with local host file completion
2230 except that killing with double-slash @file{//} kills only the file
2231 name part of the @value{tramp} file name syntax.  A triple-slash
2232 stands for the default behavior.
2233 @ifinfo
2234 @xref{Minibuffer File, , , emacs}.
2235 @end ifinfo
2237 @noindent
2238 Example:
2240 @example
2241 @kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin//etc} @key{TAB}}
2242      @print{} @trampfn{telnet,melancholia,/etc}
2244 @kbd{C-x C-f @trampfn{telnet,melancholia,//etc} @key{TAB}}
2245      @print{} /etc
2247 @kbd{C-x C-f @trampfn{telnet,melancholia,/usr/local/bin///etc} @key{TAB}}
2248      @print{} /etc
2249 @end example
2251 During file name completion, remote directory contents are re-read
2252 regularly to account for any changes in the filesystem that may affect
2253 the completion candidates.  Such re-reads can account for changes to
2254 the file system by applications outside Emacs (@pxref{Connection
2255 caching}).
2257 @defopt tramp-completion-reread-directory-timeout
2258 @vindex tramp-completion-reread-directory-timeout
2259 The timeout is number of seconds since last remote command for
2260 rereading remote directory contents.  0 re-reads immediately during
2261 file name completion, @code{nil} uses cached directory contents.
2262 @end defopt
2265 @node Ad-hoc multi-hops
2266 @section Declaring multiple hops in the file name
2267 @cindex multi-hop, ad-hoc
2268 @cindex proxy hosts, ad-hoc
2270 @value{tramp} file name syntax can accommodate ad hoc specification of
2271 multiple proxies without using @code{tramp-default-proxies-alist}
2272 configuration setup(@pxref{Multi-hops}).
2274 Each proxy is specified using the same syntax as the remote host
2275 specification minus the file name part.  Each hop is separated by a
2276 @samp{|}.  Chain the proxies from the starting host to the destination
2277 remote host name and file name.  For example, hopping over a single
2278 proxy @samp{bird@@bastion} to a remote file on @samp{you@@remotehost}:
2280 @example
2281 @c @kbd{C-x C-f @trampfn{ssh@value{postfixhop}bird@@bastion|ssh,you,remotehost,/path}}
2282 @kbd{C-x C-f @value{prefix}ssh@value{postfixhop}bird@@bastion|ssh@value{postfixhop}you@@remotehost@value{postfix}/path}
2283 @end example
2285 Proxies can take patterns @code{%h} or @code{%u}.
2287 @value{tramp} adds the ad-hoc definitions on the fly to
2288 @code{tramp-default-proxies-alist} and is available for re-use during
2289 that Emacs session.  Subsequent @value{tramp} connections to the same
2290 remote host can then use the shortcut form:
2291 @samp{@trampfn{ssh,you@@remotehost,/path}}.
2293 @defopt tramp-save-ad-hoc-proxies
2294 @vindex tramp-save-ad-hoc-proxies
2295 For ad-hoc definitions to be saved automatically in
2296 @option{tramp-default-proxies-alist} for future Emacs sessions, set
2297 @option{tramp-save-ad-hoc-proxies}.
2299 @lisp
2300 (setq tramp-save-ad-hoc-proxies t)
2301 @end lisp
2302 @end defopt
2305 @node Remote processes
2306 @section Integration with other Emacs packages
2307 @cindex compile
2308 @cindex recompile
2310 @value{tramp} supports starting new running processes on the remote
2311 host for discovering remote file names.  Emacs packages on the remote
2312 host need no specific modifications for @value{tramp}'s use.
2314 This type of integration does not work with the @option{ftp} method,
2315 and does not support the pty association as specified in
2316 @code{start-file-process}.
2318 @code{process-file} and @code{start-file-process} work on the remote
2319 host when the variable @code{default-directory} is remote:
2321 @lisp
2322 (let ((default-directory "/ssh:remote.host:"))
2323   (start-file-process "grep" (get-buffer-create "*grep*")
2324                       "/bin/sh" "-c" "grep -e tramp *"))
2325 @end lisp
2327 Remote processes do not apply to GVFS (see @ref{GVFS based methods})
2328 because the remote file system is mounted on the local host and
2329 @value{tramp} just accesses by changing the @code{default-directory}.
2331 @value{tramp} starts a remote process when a command is executed in a
2332 remote file or directory buffer.  As of now, these packages have been
2333 integrated to work with @value{tramp}: @file{compile.el} (commands
2334 like @code{compile} and @code{grep}) and @file{gud.el} (@code{gdb} or
2335 @code{perldb}).
2337 For @value{tramp} to find the command on the remote, it must be
2338 accessible through the default search path as setup by @value{tramp}
2339 upon first connection.  Alternatively, use an absolute path or extend
2340 @code{tramp-remote-path} (see @ref{Remote programs}):
2342 @lisp
2343 (add-to-list 'tramp-remote-path "~/bin")
2344 (add-to-list 'tramp-remote-path "/appli/pub/bin")
2345 @end lisp
2347 Customize @code{tramp-remote-process-environment} to suit the remote
2348 program's environment for the remote host.
2349 @code{tramp-remote-process-environment} is a list of strings
2350 structured similar to @code{process-environment}, where each element
2351 is a string of the form @samp{ENVVARNAME=VALUE}.
2353 To avoid any conflicts with local host variables set through local
2354 configuration files, such as @file{~/.profile}, use @samp{ENVVARNAME=}
2355 to unset them for the remote environment.
2357 @noindent
2358 Use @code{add-to-list} to add entries:
2360 @lisp
2361 (add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
2362 @end lisp
2364 Modifying or deleting already existing values in the
2365 @code{tramp-remote-process-environment} list may not be feasible on
2366 restricted remote hosts.  For example, some system administrators
2367 disallow changing @env{HISTORY} variable.  To accommodate such
2368 restrictions when using @value{tramp}, fix the
2369 @code{tramp-remote-process-environment} by the following code in the
2370 local @file{.emacs} file:
2372 @lisp
2373 (let ((process-environment tramp-remote-process-environment))
2374   (setenv "HISTORY" nil)
2375   (setq tramp-remote-process-environment process-environment))
2376 @end lisp
2378 @value{tramp} does not use the defaults specified in
2379 @code{process-environment} for running @code{process-file} or
2380 @code{start-file-process} on remote hosts.  When values from
2381 @code{process-environment} are needed for remote processes, then set
2382 them as follows:
2384 @lisp
2385 (let ((process-environment (cons "HGPLAIN=1" process-environment)))
2386   (process-file @dots{}))
2387 @end lisp
2389 This works only for environment variables not already set in the
2390 @code{process-environment}.
2392 For integrating other Emacs packages so @value{tramp} can execute
2393 remotely, please file a bug report.  @xref{Bug Reports}.
2396 @subsection Running remote programs that create local X11 windows
2398 To allow a remote program to create an X11 window on the local host,
2399 set the @env{DISPLAY} environment variable for the remote host as
2400 follows in the local @file{.emacs} file:
2402 @lisp
2403 (add-to-list 'tramp-remote-process-environment
2404              (format "DISPLAY=%s" (getenv "DISPLAY")))
2405 @end lisp
2407 @noindent
2408 @code{(getenv "DISPLAY")} should return a recognizable name for the
2409 local host that the remote host can redirect X11 window
2410 interactions.  If querying for a recognizable name is not possible for
2411 whatever reason, then replace @code{(getenv "DISPLAY")} with a
2412 hard-coded, fixed name.  Note that using @code{:0} for X11 display name
2413 here will not work as expected.
2415 An alternate approach is specify @code{ForwardX11 yes} or
2416 @code{ForwardX11Trusted yes} in the file @file{~/.ssh/config} on the
2417 local host.
2420 @subsection Running @code{shell} on a remote host
2421 @cindex shell
2423 Set @option{explicit-shell-file-name} to the appropriate shell name
2424 when using @value{tramp} between two hosts with different operating
2425 systems, such as @samp{windows-nt} and @samp{gnu/linux}.  This option
2426 ensures the correct name of the remote shell program.
2428 Starting with Emacs 24, when @option{explicit-shell-file-name} is
2429 equal to @code{nil}, calling @code{shell} interactively will prompt
2430 for a shell name.
2433 @subsection Running @code{shell-command} on a remote host
2434 @cindex shell-command
2436 @code{shell-command} executes commands synchronously or asynchronously
2437 on remote hosts and displays output in buffers on the local
2438 host.  Example:
2440 @example
2441 @kbd{C-x C-f @trampfn{sudo,,} @key{RET}}
2442 @kbd{M-! tail -f /var/log/syslog.log & @key{RET}}
2443 @end example
2445 @command{tail} command outputs continuously to the local buffer,
2446 @file{*Async Shell Command*}
2448 @kbd{M-x auto-revert-tail-mode} runs similarly showing continuous output.
2451 @subsection Running @code{eshell} on a remote host
2452 @cindex eshell
2454 @value{tramp} is integrated into @file{eshell.el}, which enables
2455 interactive eshell sessions on remote hosts at the command prompt.
2456 You must add the module @code{eshell-tramp} to
2457 @code{eshell-modules-list}.  Here's a sample interaction after opening
2458 @kbd{M-x eshell} on a remote host:
2460 @example
2461 @b{~ $} cd @trampfn{sudo,,/etc} @key{RET}
2462 @b{@trampfn{sudo,root@@host,/etc} $} hostname @key{RET}
2463 host
2464 @b{@trampfn{sudo,root@@host,/etc} $} id @key{RET}
2465 uid=0(root) gid=0(root) groups=0(root)
2466 @b{@trampfn{sudo,root@@host,/etc} $} find-file shadow @key{RET}
2467 #<buffer shadow>
2468 @b{@trampfn{sudo,root@@host,/etc} $}
2469 @end example
2471 @code{eshell} in Emacs 23.2 added custom @code{su} and @code{sudo}
2472 commands that set the default directory correctly for the
2473 @file{*eshell*} buffer.  @value{tramp} silently updates
2474 @code{tramp-default-proxies-alist} with an entry for this directory
2475 (@pxref{Multi-hops}):
2477 @example
2478 @b{~ $} cd @trampfn{ssh,user@@remotehost,/etc} @key{RET}
2479 @b{@trampfn{ssh,user@@remotehost,/etc} $} find-file shadow @key{RET}
2480 File is not readable: @trampfn{ssh,user@@remotehost,/etc/shadow}
2481 @b{@trampfn{ssh,user@@remotehost,/etc} $} sudo find-file shadow @key{RET}
2482 #<buffer shadow>
2484 @b{@trampfn{ssh,user@@remotehost,/etc} $} su - @key{RET}
2485 @b{@trampfn{su,root@@remotehost,/root} $} id @key{RET}
2486 uid=0(root) gid=0(root) groups=0(root)
2487 @b{@trampfn{su,root@@remotehost,/root} $}
2488 @end example
2491 @anchor{Running a debugger on a remote host}
2492 @subsection Running a debugger on a remote host
2493 @cindex gud
2494 @cindex gdb
2495 @cindex perldb
2497 @file{gud.el} provides a unified interface to symbolic debuggers
2498 @ifinfo
2499 (@ref{Debuggers, , , emacs}).
2500 @end ifinfo
2501 @value{tramp} can run debug on remote hosts by calling @code{gdb}
2502 with a remote file name:
2504 @example
2505 @kbd{M-x gdb @key{RET}}
2506 @b{Run gdb (like this):} gdb --annotate=3 @trampfn{ssh,host,~/myprog} @key{RET}
2507 @end example
2509 Relative file names are based on the remote default directory.  When
2510 @file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
2511 calls include:
2513 @example
2514 @kbd{M-x perldb @key{RET}}
2515 @b{Run perldb (like this):} perl -d myprog.pl @key{RET}
2516 @end example
2518 Just the local part of a remote file name, such as @kbd{perl -d
2519 /home/user/myprog.pl}, is not possible.
2521 Arguments of the program to be debugged must be literal, can take
2522 relative or absolute paths, but not remote paths.
2525 @subsection Running remote processes on Windows hosts
2526 @cindex winexe
2527 @cindex powershell
2529 @command{winexe} runs processes on a remote Windows host, and
2530 @value{tramp} can use it for @code{process-file} and
2531 @code{start-file-process}.
2533 @code{tramp-smb-winexe-program} specifies the local @command{winexe}
2534 command.  Powershell V2.0 on the remote host is required to run
2535 processes triggered from @value{tramp}.
2537 @option{explicit-shell-file-name} and @option{explicit-*-args} have to
2538 be set properly so @kbd{M-x shell} can open a proper remote shell on a
2539 Windows host.  To open @command{cmd}, set it as follows:
2541 @lisp
2542 (setq explicit-shell-file-name "cmd"
2543       explicit-cmd-args '("/q"))
2544 @end lisp
2546 @noindent
2547 To open @command{powershell} as a remote shell, use this:
2549 @lisp
2550 (setq explicit-shell-file-name "powershell"
2551       explicit-powershell-args '("-file" "-"))
2552 @end lisp
2555 @node Cleanup remote connections
2556 @section Cleanup remote connections
2557 @cindex cleanup
2559 @value{tramp} provides several ways to flush remote connections.
2561 @deffn Command tramp-cleanup-connection vec
2562 This command flushes all connection related objects.  @option{vec} is
2563 the internal representation of a remote connection.  When called
2564 interactively, this command lists active remote connections in the
2565 minibuffer.  Each connection is of the format
2566 @file{@trampfn{method,user@@host,}}.  Flushing remote connections also
2567 cleans the password cache (@pxref{Password handling}), file cache,
2568 connection cache (@pxref{Connection caching}), and connection buffers.
2569 @end deffn
2571 @deffn Command tramp-cleanup-this-connection
2572 Flushes only the current buffer's remote connection objects, the same
2573 as in @code{tramp-cleanup-connection}.
2574 @end deffn
2576 @deffn Command tramp-cleanup-all-connections
2577 Flushes all active remote connection objects, the same as in
2578 @code{tramp-cleanup-connection}.
2579 @end deffn
2581 @deffn Command tramp-cleanup-all-buffers
2582 Just as for @code{tramp-cleanup-all-connections}, all remote
2583 connections are cleaned up in addition to killing buffers related to
2584 that remote connection.
2585 @end deffn
2588 @node Bug Reports
2589 @chapter Reporting Bugs and Problems
2590 @cindex bug reports
2592 @value{tramp}'s development team is actively engaged in solving bugs
2593 and problems and looks to feature requests and suggestions.
2595 @value{tramp}'s mailing list is the place for more advice and
2596 information on working with @value{tramp}, solving problems,
2597 discussing, and general discussions about @value{tramp}.
2599 @value{tramp}'s mailing list is moderated but even non-subscribers can
2600 post for moderator approval.  Sometimes this approval step may take as
2601 long as 48 hours due to public holidays.
2603 @email{tramp-devel@@gnu.org} is the mailing list.  Messages sent to
2604 this address go to all the subscribers.  This is @emph{not} the
2605 address to send subscription requests to.
2607 To subscribe to the mailing list, visit:
2608 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/, the
2609 @value{tramp} Mail Subscription Page}.
2611 @ifset installchapter
2612 Before sending a bug report, run the test suite first @ref{Testing}.
2613 @end ifset
2615 @findex tramp-bug
2616 Check if the bug or problem is already addressed in @xref{Frequently
2617 Asked Questions}.
2619 Run @kbd{M-x tramp-bug} to generate a buffer with details of the
2620 system along with the details of the @value{tramp}
2621 installation.  Please include these details with the bug report.
2623 The bug report must describe in as excruciating detail as possible the
2624 steps required to reproduce the problem.  These details must include
2625 the setup of the remote host and any special or unique conditions that
2626 exist.
2628 Include a minimal test case that reproduces the problem.  This will
2629 help the development team find the best solution and avoid unrelated
2630 detours.
2632 To exclude cache-related problems, flush all caches before running the
2633 test, @ref{Cleanup remote connections}.
2635 When including @value{tramp}'s messages in the bug report, increase
2636 the verbosity level to 6 (@pxref{Traces and Profiles, Traces}) in the
2637 @file{~/.emacs} file before repeating steps to the bug.  Include the
2638 contents of the @file{*tramp/foo*} and @file{*debug tramp/foo*}
2639 buffers with the bug report.
2641 @strong{Note} that a verbosity level greater than 6 is not necessary
2642 at this stage.  Also note that a verbosity level of 6 or greater, the
2643 contents of files and directories will be included in the debug
2644 buffer.  Passwords typed in @value{tramp} will never be included
2645 there.
2648 @node Frequently Asked Questions
2649 @chapter Frequently Asked Questions
2650 @cindex frequently asked questions
2651 @cindex FAQ
2653 @itemize @bullet
2654 @item
2655 Where is the latest @value{tramp}?
2657 @value{tramp} is available at the GNU URL:
2659 @noindent
2660 @uref{ftp://ftp.gnu.org/gnu/tramp/}
2662 @noindent
2663 @value{tramp}'s GNU project page is located here:
2665 @noindent
2666 @uref{http://savannah.gnu.org/projects/tramp/}
2669 @item
2670 Which systems does it work on?
2672 The package works successfully on Emacs 23, Emacs 24, and Emacs 25.
2674 While Unix and Unix-like systems are the primary remote targets,
2675 @value{tramp} has equal success connecting to other platforms, such as
2676 MS Windows XP/Vista/7.
2679 @item
2680 How to speed up @value{tramp}?
2682 @value{tramp} does many things in the background, some of which
2683 depends on network speeds, response speeds of remote hosts, and
2684 authentication delays.  During these operations, @value{tramp}'s
2685 responsiveness slows down.  Some suggestions within the scope of
2686 @value{tramp}'s settings include:
2688 Use an external method, such as @option{scp}, which are faster than
2689 internal methods.
2691 Keep the file @code{tramp-persistency-file-name}, which is where
2692 @value{tramp} caches remote information about hosts and files.  Caching
2693 is enabled by default.  Don't disable it.
2695 Set @code{remote-file-name-inhibit-cache} to @code{nil} if remote
2696 files are not independently updated outside @value{tramp}'s control.
2697 That cache cleanup will be necessary if the remote directories or
2698 files are updated independent of @value{tramp}.
2700 Set @code{tramp-completion-reread-directory-timeout} to @code{nil} to
2701 speed up completions, @ref{File name completion}.
2703 Disable version control to avoid delays:
2705 @lisp
2706 (setq vc-ignore-dir-regexp
2707       (format "\\(%s\\)\\|\\(%s\\)"
2708               vc-ignore-dir-regexp
2709               tramp-file-name-regexp))
2710 @end lisp
2712 Disable excessive traces.  Set @code{tramp-verbose} to 3 or lower,
2713 default being 3.  Increase trace levels temporarily when hunting for
2714 bugs.
2716 @item
2717 @value{tramp} does not connect to the remote host
2719 Three main reasons for why @value{tramp} does not connect to the remote host:
2721 @itemize @minus
2722 @item
2723 Unknown characters in the prompt
2725 @value{tramp} needs a clean recognizable prompt on the remote host for
2726 accurate parsing.  Shell prompts that contain escape sequences for
2727 coloring cause parsing problems.  @ref{Remote shell setup} for
2728 customizing prompt detection using regular expressions.
2730 To check if the remote host's prompt is being recognized, use this
2731 test: switch to @value{tramp} connection buffer @file{*tramp/foo*},
2732 put the cursor at the top of the buffer, and then apply the following
2733 expression:
2735 @example
2736 @kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
2737 @end example
2739 If the cursor has not moved to the prompt at the bottom of the buffer,
2740 then @value{tramp} has failed to recognize the prompt.
2742 When using zsh on remote hosts, disable zsh line editor because zsh
2743 uses left-hand side and right-hand side prompts in parallel.  Add the
2744 following line to @file{~/.zshrc}:
2746 @example
2747 [ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
2748 @end example
2750 When using fish shell on remote hosts, disable fancy formatting by
2751 adding the following to @file{~/.config/fish/config.fish}:
2753 @example
2754 function fish_prompt
2755   if test $TERM = "dumb"
2756      echo "\$ "
2757   else
2758      @dots{}
2759   end
2761 @end example
2763 When using WinSSHD on remote hosts, @value{tramp} do not recognize the
2764 strange prompt settings.
2766 @item
2767 Echoed characters after login
2769 @value{tramp} suppresses echos from remote hosts with the
2770 @command{stty -echo} command.  But sometimes it is too late to suppress
2771 welcome messages from the remote host containing harmful control
2772 characters.  Using @option{sshx} or @option{scpx} methods can avoid
2773 this problem because they allocate a pseudo tty.  @xref{Inline
2774 methods}.
2776 @item
2777 @value{tramp} stops transferring strings longer than 500 characters
2779 Set @code{tramp-chunksize} to 500 to get around this problem, which is
2780 related to faulty implementation of @code{process-send-string} on
2781 HP-UX, FreeBSD and Tru64 Unix systems.  Consult the documentation for
2782 @code{tramp-chunksize} to see when this is necessary.
2784 Set @code{file-precious-flag} to @code{t} for files accessed by
2785 @value{tramp} so the file contents are checked using checksum by
2786 first saving to a temporary file.
2787 @ifinfo
2788 @pxref{Saving Buffers, , , elisp}
2789 @end ifinfo
2791 @lisp
2792 (add-hook
2793  'find-file-hook
2794  (lambda ()
2795    (when (file-remote-p default-directory)
2796      (set (make-local-variable 'file-precious-flag) t))))
2797 @end lisp
2798 @end itemize
2801 @item
2802 @value{tramp} does not recognize if a @command{ssh} session hangs
2804 @command{ssh} sessions on the local host hang when the network is
2805 down.  @value{tramp} cannot safely detect such hangs.  The network
2806 configuration for @command{ssh} can be configured to kill such hangs
2807 with the following command in the @file{~/.ssh/config}:
2809 @example
2810 Host *
2811      ServerAliveInterval 5
2812 @end example
2815 @item
2816 @value{tramp} does not use default @command{ssh} @code{ControlPath}
2818 @value{tramp} overwrites @code{ControlPath} settings when initiating
2819 @command{ssh} sessions.  @value{tramp} does this to fend off a stall
2820 if a master session opened outside the Emacs session is no longer
2821 open.  That is why @value{tramp} prompts for the password again even
2822 if there is an @command{ssh} already open.
2824 Some @command{ssh} versions support a @code{ControlPersist} option,
2825 which allows you to set the @code{ControlPath} provided the variable
2826 @code{tramp-ssh-controlmaster-options} is customized as follows:
2828 @lisp
2829 (setq tramp-ssh-controlmaster-options
2830       (concat
2831         "-o ControlPath=/tmp/ssh-ControlPath-%%r@@%%h:%%p "
2832         "-o ControlMaster=auto -o ControlPersist=yes"))
2833 @end lisp
2835 Note how "%r", "%h" and "%p" must be encoded as "%%r", "%%h" and
2836 "%%p".
2838 If the @file{~/.ssh/config} is configured appropriately for the above
2839 behavior, then any changes to @command{ssh} can be suppressed with
2840 this @code{nil} setting:
2842 @lisp
2843 (setq tramp-use-ssh-controlmaster-options nil)
2844 @end lisp
2847 @item
2848 File name completion does not work with @value{tramp}
2850 @acronym{ANSI} escape sequences from the remote shell may cause errors
2851 in @value{tramp}'s parsing of remote buffers.
2853 To test if this is the case, open a remote shell and check if the output
2854 of @command{ls} is in color.
2856 To disable @acronym{ANSI} escape sequences from the remote hosts,
2857 disable @option{--color=yes} or @option{--color=auto} in the remote
2858 host's @file{.bashrc} or @file{.profile}.  Turn this alias on and off
2859 to see if file name completion works.
2861 @item
2862 File name completion does not work in directories with large number of
2863 files
2865 This may be related to globbing, which is the use of shell's ability
2866 to expand wild card specifications, such as @samp{*.c}.  For
2867 directories with large number of files, globbing might exceed the
2868 shell's limit on length of command lines and hang.  @value{tramp} uses
2869 globbing.
2871 To test if globbing hangs, open a shell on the remote host and then
2872 run @samp{ls -d * ..?* > /dev/null}.
2874 When testing, ensure the remote shell is the same shell
2875 (@command{/bin/sh}, @command{ksh} or @command{bash}), that
2876 @value{tramp} uses when connecting to that host.
2879 @item
2880 How to get notified after @value{tramp} completes file transfers?
2882 Make Emacs beep after reading from or writing to the remote host with
2883 the following code in @file{~/.emacs} file.
2885 @lisp
2886 (defadvice tramp-handle-write-region
2887   (after tramp-write-beep-advice activate)
2888   "Make tramp beep after writing a file."
2889   (interactive)
2890   (beep))
2892 (defadvice tramp-handle-do-copy-or-rename-file
2893   (after tramp-copy-beep-advice activate)
2894   "Make tramp beep after copying a file."
2895   (interactive)
2896   (beep))
2898 (defadvice tramp-handle-insert-file-contents
2899   (after tramp-insert-beep-advice activate)
2900   "Make tramp beep after inserting a file."
2901   (interactive)
2902   (beep))
2903 @end lisp
2906 @item
2907 How to get a Visual Warning when working with @samp{root} privileges?
2908 Host indication in the mode line?
2910 Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
2911 Enable it via @kbd{M-x load-theme @key{RET} tramp}.  Further
2912 customization is explained in variable
2913 @code{tramp-theme-face-remapping-alist}.
2916 @item
2917 Remote host does not understand default options for directory listing
2919 Emacs computes the @command{dired} options based on the local host but
2920 if the remote host cannot understand the same @command{ls} command,
2921 then set them with a hook as follows:
2923 @lisp
2924 (add-hook
2925  'dired-before-readin-hook
2926  (lambda ()
2927    (when (file-remote-p default-directory)
2928      (setq dired-actual-switches "-al"))))
2929 @end lisp
2932 @item
2933 Why is @file{~/.sh_history} file on the remote host growing?
2935 Due to @command{ksh} saving tilde expansions triggered by
2936 @value{tramp}, the history file is probably growing rapidly.  To fix,
2937 turn off saving history by putting this shell code in the
2938 @file{.kshrc} file:
2940 @example
2941 if [ -f $HOME/.sh_history ] ; then
2942    /bin/rm $HOME/.sh_history
2944 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
2945    unset HISTFILE
2947 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
2948    unset HISTSIZE
2950 @end example
2952 For @option{ssh}-based method, add the following line to your
2953 @file{~/.ssh/environment} file:
2955 @example
2956 HISTFILE=/dev/null
2957 @end example
2960 @item
2961 How to shorten long file names when typing in @value{tramp}?
2963 Adapt several of these approaches to reduce typing.  If the full name
2964 is @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, then:
2966 @enumerate
2968 @item
2969 Use default values for method name and user name:
2971 You can define default methods and user names for hosts,
2972 (@pxref{Default Method}, @pxref{Default User}):
2974 @lisp
2975 (setq tramp-default-method "ssh"
2976       tramp-default-user "news")
2977 @end lisp
2979 The reduced typing: @kbd{C-x C-f @trampf{news.my.domain,/opt/news/etc}}.
2981 @strong{Note} that there are some useful shortcuts already.  Accessing
2982 your local host as @samp{root} user, is possible just by @kbd{C-x C-f
2983 @trampfn{su,,}}.
2985 @item
2986 Use configuration options of the access method:
2988 Programs used for access methods already offer powerful configurations
2989 (@pxref{Customizing Completion}).  For @option{ssh}, configure the
2990 file @file{~/.ssh/config}:
2992 @example
2993 Host xy
2994      HostName news.my.domain
2995      User news
2996 @end example
2998 The reduced typing: @kbd{C-x C-f @trampfn{ssh,xy,/opt/news/etc}}.
3000 Depending on the number of files in the directories, host names
3001 completion can further reduce key strokes: @kbd{C-x C-f
3002 @value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3004 @item
3005 Use environment variables to expand long strings
3007 For long file names, set up environment variables that are expanded in
3008 the minibuffer.  Environment variables are set either outside Emacs or
3009 inside Emacs with Lisp:
3011 @lisp
3012 (setenv "xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")
3013 @end lisp
3015 The reduced typing: @kbd{C-x C-f $xy @key{RET}}.
3017 @strong{Note} that file name cannot be edited here because the
3018 environment variables are not expanded during editing in the
3019 minibuffer.
3021 @item Define own keys:
3023 Redefine another key sequence in Emacs for @kbd{C-x C-f}:
3025 @lisp
3026 (global-set-key
3027  [(control x) (control y)]
3028  (lambda ()
3029    (interactive)
3030    (find-file
3031     (read-file-name
3032      "Find Tramp file: "
3033      "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))))
3034 @end lisp
3036 Simply typing @kbd{C-x C-y} would prepare minibuffer editing of file
3037 name.
3039 See @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the Emacs
3040 Wiki} for a more comprehensive example.
3042 @item
3043 Define own abbreviation (1):
3045 Abbreviation list expansion can be used to reduce typing long file names:
3047 @lisp
3048 (add-to-list
3049  'directory-abbrev-alist
3050  '("^/xy" . "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3051 @end lisp
3053 The reduced typing: @kbd{C-x C-f /xy @key{RET}}.
3055 @strong{Note} that file name cannot be edited here because the
3056 environment variables are not expanded during editing in the
3057 minibuffer.
3059 @item
3060 Define own abbreviation (2):
3062 The @code{abbrev-mode} gives additional flexibility for editing in the
3063 minibuffer:
3065 @lisp
3066 (define-abbrev-table 'my-tramp-abbrev-table
3067   '(("xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")))
3069 (add-hook
3070  'minibuffer-setup-hook
3071  (lambda ()
3072    (abbrev-mode 1)
3073    (setq local-abbrev-table my-tramp-abbrev-table)))
3075 (defadvice minibuffer-complete
3076   (before my-minibuffer-complete activate)
3077   (expand-abbrev))
3079 ;; If you use partial-completion-mode
3080 (defadvice PC-do-completion
3081   (before my-PC-do-completion activate)
3082   (expand-abbrev))
3083 @end lisp
3085 The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
3087 The minibuffer expands for further editing.
3089 @item Use bookmarks:
3091 Use bookmarks to save Tramp file names.
3092 @ifinfo
3093 @pxref{Bookmarks, , , emacs}.
3094 @end ifinfo
3096 Upon visiting a location with @value{tramp}, save it as a bookmark with
3097 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3099 To revisit that bookmark:
3100 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3102 @item Use recent files:
3104 @file{recentf} remembers visited places.
3105 @ifinfo
3106 @pxref{File Conveniences, , , emacs}.
3107 @end ifinfo
3109 Keep remote file names in the recent list without have to check for
3110 their accessibility through remote access:
3112 @lisp
3113 (recentf-mode 1)
3114 @end lisp
3116 Reaching recently opened files: @kbd{@key{menu-bar} @key{file}
3117 @key{Open Recent}}.
3119 @item Use filecache:
3121 Since @file{filecache} remembers visited places, add the remote
3122 directory to the cache:
3124 @lisp
3125 @c `with-eval-after-load' has been introduced with Emacs 24.4.  Shall
3126 @c be used when appropriate.
3127 (eval-after-load "filecache"
3128   '(file-cache-add-directory
3129     "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3130 @end lisp
3132 Then use directory completion in the minibuffer with @kbd{C-x C-f
3133 C-@key{TAB}}.
3135 @item Use bbdb:
3137 @file{bbdb} has a built-in feature for Ange FTP files, which also
3138 works for @value{tramp} file names.
3139 @ifinfo
3140 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}.
3141 @end ifinfo
3143 Load @file{bbdb} in Emacs:
3145 @lisp
3146 (require 'bbdb)
3147 (bbdb-initialize)
3148 @end lisp
3150 Create a BBDB entry with @kbd{M-x bbdb-create-ftp-site}.  Then specify
3151 a method and user name where needed.  Examples:
3153 @example
3154 @kbd{M-x bbdb-create-ftp-site @key{RET}}
3155 @b{Ftp Site:} news.my.domain @key{RET}
3156 @b{Ftp Directory:} /opt/news/etc/ @key{RET}
3157 @b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3158 @b{Company:} @key{RET}
3159 @b{Additional Comments:} @key{RET}
3160 @end example
3162 In BBDB buffer, access an entry by pressing the key @key{F}.
3164 @end enumerate
3166 Thanks to @value{tramp} users for contributing to these recipes.
3168 @item
3169 Why saved multi-hop file names do not work in a new Emacs session?
3171 When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
3172 multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
3173 package, use the full ad-hoc file name including all hops, like
3174 @file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}news.my.domain,/opt/news/etc}}.
3176 Alternatively, when saving abbreviated multi-hop file names
3177 @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, the custom
3178 option @code{tramp-save-ad-hoc-proxies} must be set non-@code{nil}
3179 value.
3182 @item
3183 How to connect to a remote Emacs session using @value{tramp}?
3185 Configure Emacs Client
3186 @ifinfo
3187 (@pxref{Emacs Server, , , emacs}).
3188 @end ifinfo
3190 Then on the remote host, start the Emacs Server:
3192 @lisp
3193 (require 'server)
3194 (setq server-host (system-name)
3195       server-use-tcp t)
3196 (server-start)
3197 @end lisp
3199 If @code{(system-name)} of the remote host cannot be resolved on the
3200 local host, use IP address instead.
3202 Copy from the remote host the resulting file
3203 @file{~/.emacs.d/server/server} to the local host, to the same
3204 location.
3206 Then start Emacs Client from the command line:
3208 @example
3209 emacsclient @trampfn{ssh,user@@host,/file/to/edit}
3210 @end example
3212 @code{user} and @code{host} refer to the local host.
3214 To make Emacs Client an editor for other programs, use a wrapper
3215 script @file{emacsclient.sh}:
3217 @example
3218 #!/bin/sh
3219 emacsclient @trampfn{ssh,$(whoami)@@$(hostname --fqdn),$1}
3220 @end example
3222 Then change the environment variable @env{EDITOR} to point to the
3223 wrapper script:
3225 @example
3226 export EDITOR=/path/to/emacsclient.sh
3227 @end example
3230 @item
3231 How to disable other packages from calling @value{tramp}?
3233 There are packages that call @value{tramp} without the user ever
3234 entering a remote file name.  Even without applying a remote file
3235 syntax, some packages enable @value{tramp} on their own.  How can users
3236 disable such features.
3238 @itemize @minus
3239 @item
3240 @file{ido.el}
3242 Disable @value{tramp} file name completion:
3244 @lisp
3245 (custom-set-variables
3246  '(ido-enable-tramp-completion nil))
3247 @end lisp
3249 @item
3250 @file{rlogin.el}
3252 Disable remote directory tracking mode:
3254 @lisp
3255 (rlogin-directory-tracking-mode -1)
3256 @end lisp
3257 @end itemize
3260 @item
3261 How to disable @value{tramp}?
3263 @itemize @minus
3264 @item
3265 To keep Ange FTP as default the remote files access package, set this
3266 in @file{.emacs}:
3268 @lisp
3269 (setq tramp-default-method "ftp")
3270 @end lisp
3272 @item
3273 To disable both @value{tramp} (and Ange FTP), set @code{tramp-mode} to
3274 @code{nil} in @file{.emacs}.
3276 @lisp
3277 (setq tramp-mode nil)
3278 @end lisp
3280 @item
3281 To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.  Unloading
3282 @value{tramp} resets Ange FTP plugins also.
3283 @end itemize
3284 @end itemize
3287 @c For the developer
3288 @node Files directories and localnames
3289 @chapter How file names, directories and localnames are mangled and managed.
3291 @menu
3292 * Localname deconstruction::    Splitting a localname into its component parts.
3293 * External packages::           Integrating with external Lisp packages.
3294 @end menu
3297 @node Localname deconstruction
3298 @section Splitting a localname into its component parts
3300 @value{tramp} package redefines lisp functions
3301 @code{file-name-directory} and @code{file-name-nondirectory} to
3302 accommodate the unique file naming syntax that @value{tramp} requires.
3304 The replacements dissect the file name, use the original handler for
3305 the localname, take that result, and then re-build the @value{tramp}
3306 file name.  By relying on the original handlers for localnames,
3307 @value{tramp} benefits from platform specific hacks to the original
3308 handlers.
3311 @node External packages
3312 @section Integrating with external Lisp packages
3313 @subsection File name completion.
3315 For name completions in the minibuffer, @value{tramp} depends on the
3316 last input character to decide whether to look for method name
3317 completion or host name completion.  For example, @kbd{C-x C-f
3318 @value{prefix}ssh@value{postfixhop} @key{TAB}} is not entirely clear
3319 if @option{ssh} is a method or a host name.  But if the last input
3320 character was either @key{TAB}, @key{SPACE} or @kbd{?}, then
3321 @value{tramp} favors file name completion over host name completion.
3323 What about external packages using other characters to trigger file
3324 name completions? They must somehow signal this to @value{tramp}.  Use
3325 the variable @code{non-essential} temporarily and bind it to
3326 non-@code{nil} value.
3328 @lisp
3329 (let ((non-essential t))
3330   @dots{})
3331 @end lisp
3334 @subsection File attributes cache.
3336 Keeping a local cache of remote file attributes in sync with the
3337 remote host is a time-consuming operation.  Flushing and re-querying
3338 these attributes can tax @value{tramp} to a grinding halt on busy
3339 remote servers.
3341 To get around these types of slow-downs in @value{tramp}'s
3342 responsiveness, set the @code{process-file-side-effects} to @code{nil}
3343 to stop @value{tramp} from flushing the cache.  This is helpful in
3344 situations where callers to @code{process-file} know there are no file
3345 attribute changes.  The let-bind form to accomplish this:
3347 @lisp
3348 (let (process-file-side-effects)
3349   @dots{})
3350 @end lisp
3352 For asynchronous processes, @value{tramp} uses a process sentinel to
3353 flush file attributes cache.  When callers to @code{start-file-process}
3354 know beforehand no file attribute changes are expected, then the
3355 process sentinel should be set to the default state.  In cases where
3356 the caller defines its own process sentinel, @value{tramp}'s process
3357 sentinel is overwritten.  The caller can still flush the file
3358 attributes cache in its process sentinel with this code:
3360 @lisp
3361 (unless (memq (process-status proc) '(run open))
3362   (dired-uncache remote-directory))
3363 @end lisp
3365 Since @value{tramp} traverses subdirectories starting with the
3366 root-directory, it is most likely sufficient to make the
3367 @code{default-directory} of the process buffer as the root directory.
3370 @node Traces and Profiles
3371 @chapter How to Customize Traces
3373 @value{tramp} messages are raised with verbosity levels ranging from 0
3374 to 10.  @value{tramp} does not display all messages; only those with a
3375 verbosity level less than or equal to @code{tramp-verbose}.
3377 The verbosity levels are
3379           @w{ 0}  silent (no @value{tramp} messages at all)
3380 @*@indent @w{ 1}  errors
3381 @*@indent @w{ 2}  warnings
3382 @*@indent @w{ 3}  connection to remote hosts (default verbosity)
3383 @*@indent @w{ 4}  activities
3384 @*@indent @w{ 5}  internal
3385 @*@indent @w{ 6}  sent and received strings
3386 @*@indent @w{ 7}  file caching
3387 @*@indent @w{ 8}  connection properties
3388 @*@indent @w{ 9}  test commands
3389 @*@indent @w{10}  traces (huge)
3391 With @code{tramp-verbose} greater than or equal to 4, messages are
3392 also written to a @value{tramp} debug buffer.  Such debug buffers are
3393 essential to bug and problem analyses.  For @value{tramp} bug reports,
3394 set the @code{tramp-verbose} level to 6 (@pxref{Bug Reports}).
3396 The debug buffer is in
3397 @ifinfo
3398 @ref{Outline Mode, , , emacs}.
3399 @end ifinfo
3400 @ifnotinfo
3401 Outline Mode.
3402 @end ifnotinfo
3403 In this buffer, messages can be filtered by their level.  To see
3404 messages up to verbosity level 5, enter @kbd{C-u 6 C-c C-q}.
3405 @ifinfo
3406 Other navigation keys are described in
3407 @ref{Outline Visibility, , , emacs}.
3408 @end ifinfo
3410 @value{tramp} handles errors internally.  But to get a Lisp backtrace,
3411 both the error and the signal have to be set as follows:
3413 @lisp
3414 (setq debug-on-error t
3415       debug-on-signal t)
3416 @end lisp
3418 To enable stepping through @value{tramp} function call traces, they
3419 have to be specifically enabled as shown in this code:
3421 @lisp
3422 (require 'trace)
3423 (dolist (elt (all-completions "tramp-" obarray 'functionp))
3424   (trace-function-background (intern elt)))
3425 (untrace-function 'tramp-read-passwd)
3426 (untrace-function 'tramp-gw-basic-authentication)
3427 @end lisp
3429 The buffer @file{*trace-output*} contains the output from the function
3430 call traces.  Disable @code{tramp-read-passwd} and
3431 @code{tramp-gw-basic-authentication} to stop password strings from
3432 being written to @file{*trace-output*}.
3435 @node GNU Free Documentation License
3436 @appendix GNU Free Documentation License
3437 @include doclicense.texi
3440 @node Function Index
3441 @unnumbered Function Index
3442 @printindex fn
3445 @node Variable Index
3446 @unnumbered Variable Index
3447 @printindex vr
3450 @node Concept Index
3451 @unnumbered Concept Index
3452 @printindex cp
3454 @bye
3456 @c TODO
3458 @c * Say something about the .login and .profile files of the remote
3459 @c   shells.
3460 @c * Explain how tramp.el works in principle: open a shell on a remote
3461 @c   host and then send commands to it.
3462 @c * Consistent small or capitalized words especially in menus.
3463 @c * Make a unique declaration of @trampfn.