Fix buffer overflow in make-docfile
[emacs.git] / doc / misc / tramp.texi
blob179578eea9b429770ffeb848f76b3eae9665513c
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 @include trampver.texi
17 @c Macro for formatting a file name according to the respective
18 @c syntax.  Macro arguments should not have any leading or trailing
19 @c whitespace.  Not very elegant, but I don't know it better.
21 @macro trampfn {method, userhost, localname}
22 @value{prefix}@c
23 \method\@value{postfixhop}@c
24 \userhost\@value{postfix}\localname\
25 @end macro
27 @copying
28 Copyright @copyright{} 1999--2017 Free Software Foundation, Inc.
30 @quotation
31 Permission is granted to copy, distribute and/or modify this document
32 under the terms of the GNU Free Documentation License, Version 1.3 or
33 any later version published by the Free Software Foundation; with no
34 Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
35 and with the Back-Cover Texts as in (a) below.  A copy of the license
36 is included in the section entitled ``GNU Free Documentation License''.
38 (a) The FSF's Back-Cover Text is: ``You have the freedom to
39 copy and modify this GNU manual.''
40 @end quotation
41 @end copying
43 @c Entries for @command{install-info} to use
44 @dircategory Emacs network features
45 @direntry
46 * TRAMP: (tramp).               Transparent Remote Access, Multiple Protocol
47                                   Emacs remote file access via ssh and scp.
48 @end direntry
50 @titlepage
51 @title @value{tramp} version @value{trampver} User Manual
52 @author by Daniel Pittman
53 @author based on documentation by Kai Großjohann
54 @end titlepage
56 @contents
59 @node Top, Overview, (dir), (dir)
60 @top @value{tramp} version @value{trampver} User Manual
62 This file documents @value{tramp} version @value{trampver}, a remote file
63 editing package for Emacs.
65 @value{tramp} stands for ``Transparent Remote (file) Access, Multiple
66 Protocol''.  This package provides remote file editing, similar to
67 Ange FTP.
69 The difference is that Ange FTP uses FTP to transfer files between the
70 local and the remote host, whereas @value{tramp} uses a combination of
71 @command{rsh} and @command{rcp} or other work-alike programs, such as
72 @command{ssh}/@command{scp}.
74 You can find the latest version of this document on the web at
75 @uref{http://www.gnu.org/software/tramp/}.
77 @ifhtml
78 The latest release of @value{tramp} is available for
79 @uref{ftp://ftp.gnu.org/gnu/tramp/, download}, or you may see
80 @ref{Obtaining Tramp} for more details, including the Git server
81 details.
83 @value{tramp} also has a @uref{http://savannah.gnu.org/projects/tramp/,
84 Savannah Project Page}.
85 @end ifhtml
87 There is a mailing list for @value{tramp}, available at
88 @email{tramp-devel@@gnu.org}, and archived at
89 @uref{http://lists.gnu.org/archive/html/tramp-devel/, the
90 @value{tramp} Mail Archive}.
92 @page
93 @insertcopying
95 @menu
96 * Overview::                    What @value{tramp} can and cannot do.
98 For the end user:
100 * Obtaining Tramp::             How to obtain @value{tramp}.
101 * History::                     History of @value{tramp}.
102 @ifset installchapter
103 * Installation::                Installing @value{tramp} with your Emacs.
104 @end ifset
105 * Configuration::               Configuring @value{tramp} for use.
106 * Usage::                       An overview of the operation of @value{tramp}.
107 * Bug Reports::                 Reporting Bugs and Problems.
108 * Frequently Asked Questions::  Questions and answers from the mailing list.
110 For the developer:
112 * Files directories and localnames::
113                                 How file names, directories and localnames
114                                   are mangled and managed.
115 * Traces and Profiles::         How to Customize Traces.
117 * GNU Free Documentation License:: The license for this documentation.
118 * Function Index::              @value{tramp} functions.
119 * Variable Index::              User options and variables.
120 * Concept Index::               An item for each concept.
122 @detailmenu
123  --- The Detailed Node Listing ---
125 @ifset installchapter
126 Installing @value{tramp} with your Emacs
128 * Installation parameters::     Parameters in order to control installation.
129 * Testing::                     A test suite for @value{tramp}.
130 * Load paths::                  How to plug-in @value{tramp} into your environment.
131 @end ifset
133 Configuring @value{tramp} for use
135 * Connection types::            Types of connections to remote hosts.
136 * Inline methods::              Inline methods.
137 * External methods::            External methods.
138 * GVFS based methods::          GVFS based external methods.
139 * Default Method::              Selecting a default method.
140 * Default User::                Selecting a default user.
141 * Default Host::                Selecting a default host.
142 * Multi-hops::                  Connecting to a remote host using multiple hops.
143 * Firewalls::                   Passing firewalls.
144 * Customizing Methods::         Using Non-Standard Methods.
145 * Customizing Completion::      Selecting config files for user/host name completion.
146 * Password handling::           Reusing passwords for several connections.
147 * Connection caching::          Reusing connection related information.
148 * Predefined connection information::
149                                 Setting own connection related information.
150 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
151 * Remote shell setup::          Remote shell setup hints.
152 * Android shell setup::         Android shell setup hints.
153 * Auto-save and Backup::        Auto-save and Backup.
154 * Windows setup hints::         Issues with Cygwin ssh.
156 Using @value{tramp}
158 * File name syntax::            @value{tramp} file name conventions.
159 @ifset unified
160 * Change file name syntax::     Alternative file name syntax.
161 @end ifset
162 * File name completion::        File name completion.
163 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
164 * Remote processes::            Integration with other Emacs packages.
165 * Cleanup remote connections::  Cleanup remote connections.
167 How file names, directories and localnames are mangled and managed
169 * Localname deconstruction::    Breaking a localname into its components.
170 * External packages::           Integration with external Lisp packages.
172 @end detailmenu
173 @end menu
176 @node Overview
177 @chapter An overview of @value{tramp}
178 @cindex overview
180 @value{tramp} is for transparently accessing remote files from within
181 Emacs.  @value{tramp} enables an easy, convenient, and consistent
182 interface to remote files as if they are local files.  @value{tramp}'s
183 transparency extends to editing, version control, and @code{dired}.
185 @value{tramp} can access remote hosts using any number of access
186 methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
187 and related programs.  If these programs can successfully pass
188 @acronym{ASCII]} characters, @value{tramp} can use them.
189 @value{tramp} does not require or mandate 8-bit clean connections.
191 @value{tramp}'s most common access method is through @command{ssh}, a
192 more secure alternative to @command{ftp} and other older access
193 methods.
195 @value{tramp} on Windows operating systems is integrated with the
196 PuTTY package, and uses the @command{plink} program.
198 @value{tramp} mostly operates transparently in the background using
199 the connection programs.  As long as these programs enable remote login
200 and can use the terminal, @value{tramp} can adapt them for seamless
201 and transparent access.
203 @value{tramp} temporarily transfers a remote file's contents to the
204 local host editing and related operations.  @value{tramp} can also
205 transfer files between hosts using standard Emacs interfaces, a
206 benefit of direct integration of @value{tramp} in Emacs.
208 @value{tramp} can transfer files using any number of available host
209 programs for remote files, such as @command{rcp}, @command{scp},
210 @command{rsync} or (under Windows) @command{pscp}.  @value{tramp}
211 provides easy ways to specify these programs and customize them to
212 specific files, hosts, or access methods.
214 For faster small-size file transfers, @value{tramp} supports encoded
215 transfers directly through the shell using @command{mimencode} or
216 @command{uuencode} provided such tools are available on the remote
217 host.
220 @subsubheading @value{tramp} behind the scenes
221 @cindex behind the scenes
222 @cindex details of operation
223 @cindex how it works
225 Accessing a remote file through @value{tramp} entails a series of
226 actions, many of which are transparent to the user.  Yet some actions
227 may require user response (such as entering passwords or completing
228 file names).  One typical scenario, opening a file on a remote host, is
229 presented here to illustrate the steps involved:
231 @kbd{C-x C-f} to initiate find-file, enter part of the @value{tramp}
232 file name, then hit @kbd{@key{TAB}} for completion.  If this is the
233 first time connection to that host, here's what happens:
235 @itemize
236 @item
237 @value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
238 -l @var{user}} and establishes an external process to connect to the
239 remote host.  @value{tramp} communicates with the process through an
240 Emacs buffer, which also shows output from the remote host.
242 @item
243 The remote host may prompt for a login name (for @command{telnet}, for
244 example) in the buffer.  If on the other hand, the login name was
245 included in the file name portion, @value{tramp} sends the login name
246 followed by a newline.
248 @item
249 The remote host may then prompt for a password or pass phrase (for
250 @command{rsh} or for @command{telnet}).  @value{tramp} displays the
251 password prompt in the minibuffer.  @value{tramp} then sends whatever
252 is entered to the remote host, followed by a newline.
254 @item
255 @value{tramp} now waits for either the shell prompt or a failed login
256 message.
258 If @value{tramp} does not receive any messages within a timeout period
259 (a minute, for example), then @value{tramp} responds with an error
260 message about not finding the remote shell prompt.  If any messages
261 from the remote host, @value{tramp} displays them in the buffer.
263 For any @samp{login failed} message from the remote host,
264 @value{tramp} aborts the login attempt, and repeats the login steps
265 again.
267 @item
268 Upon successful login and @value{tramp} recognizes the shell prompt
269 from the remote host, @value{tramp} prepares the shell environment by
270 turning off echoing, setting shell prompt, and other housekeeping
271 chores.
273 @strong{Note} that for the remote shell, @value{tramp} invokes
274 @command{/bin/sh}.  The remote host must recognize @samp{exec /bin/sh}
275 and execute the appropriate shell.  This shell must support Bourne
276 shell syntax.
278 @item
279 @value{tramp} executes @command{cd} and @command{ls} commands to find
280 which files exist on the remote host.  @value{tramp} sometimes uses
281 @command{echo} with globbing.  @value{tramp} checks if a file or
282 directory is writable with @command{test}.  After each command,
283 @value{tramp} parses the output from the remote host for completing
284 the next operation.
286 @item
287 After remote file name completion, @value{tramp} transfers the file
288 contents from the remote host.
290 For inline transfers, @value{tramp} sends a command, such as
291 @samp{mimencode -b /path/to/remote/file}, waits until the output has
292 accumulated in the buffer, decodes that output to produce the file's
293 contents.
295 For external transfers, @value{tramp} sends a command as follows:
296 @example
297 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
298 @end example
299 @value{tramp} reads the local temporary file @file{/tmp/tramp.4711}
300 into a buffer, and then deletes the temporary file.
302 @item
303 Edit, modify, change the buffer contents as normal, and then save the
304 buffer wth @kbd{C-x C-s}.
306 @item
307 @value{tramp} transfers the buffer contents to the remote host in
308 a reverse of the process using the appropriate inline or external
309 program.
310 @end itemize
312 I hope this has provided you with a basic overview of what happens
313 behind the scenes when you open a file with @value{tramp}.
316 @c For the end user
317 @node Obtaining Tramp
318 @chapter Obtaining @value{tramp}
319 @cindex obtaining Tramp
321 @value{tramp} is included as part of Emacs (since Emacs version 22.1).
323 @value{tramp} is also freely packaged for download on the Internet at
324 @uref{ftp://ftp.gnu.org/gnu/tramp/}.
326 @value{tramp} development versions are available on Git servers.
327 Development versions contain new and incomplete features.
329 One way to obtain from Git server is to visit the Savannah project
330 page at the following URL and then clicking on the Git link in the
331 navigation bar at the top.
333 @noindent
334 @uref{http://savannah.gnu.org/projects/tramp/}
336 @noindent
337 Another way is to follow the terminal session below:
339 @example
340 @group
341 ] @strong{cd ~/emacs}
342 ] @strong{git clone git://git.savannah.gnu.org/tramp.git}
343 @end group
344 @end example
346 @noindent
347 From behind a firewall:
349 @example
350 @group
351 ] @strong{git config --global http.proxy http://user:pwd@@proxy.server.com:8080}
352 ] @strong{git clone http://git.savannah.gnu.org/r/tramp.git}
353 @end group
354 @end example
356 @noindent
357 Tramp developers:
359 @example
360 ] @strong{git clone login@@git.sv.gnu.org:/srv/git/tramp.git}
361 @end example
363 @noindent
364 After one of the above commands, @file{~/emacs/tramp} will
365 containing the latest version of @value{tramp}.
367 @noindent
368 To fetch updates from the repository, use git pull:
370 @example
371 @group
372 ] @strong{cd ~/emacs/tramp}
373 ] @strong{git pull}
374 @end group
375 @end example
377 @noindent
378 Run @command{autoconf} as follows to generate an up-to-date
379 @file{configure} script:
381 @example
382 @group
383 ] @strong{cd ~/emacs/tramp}
384 ] @strong{autoconf}
385 @end group
386 @end example
389 @node History
390 @chapter History of @value{tramp}
391 @cindex history
392 @cindex development history
394 @value{tramp} development started at the end of November 1998 as
395 @file{rssh.el}.  It provided only one method of access.  It used
396 @command{ssh} for login and @command{scp} to transfer file contents.
397 The name was changed to @file{rcp.el} before it got its present name
398 @value{tramp}.  New methods of remote access were added, so was support
399 for version control.
401 April 2000 was the first time when multi-hop methods were added.  In
402 July 2002, @value{tramp} unified file names with Ange FTP@.  In July
403 2004, proxy hosts replaced multi-hop methods.  Running commands on
404 remote hosts was introduced in December 2005.  Support for gateways
405 since April 2007 (and removed in December 2016).  GVFS integration
406 started in February 2009.  Remote commands on Windows hosts since
407 September 2011.  Ad-hoc multi-hop methods (with a changed syntax)
408 re-enabled in November 2011.  In November 2012, added Juergen
409 Hoetzel's @file{tramp-adb.el}.
411 XEmacs support was stopped in January 2016.  Since March 2017,
412 @value{tramp} syntax mandates a method.
414 @c Installation chapter is necessary only in case of standalone
415 @c installation.  Text taken from trampinst.texi.
416 @ifset installchapter
417 @include trampinst.texi
418 @end ifset
421 @node Configuration
422 @chapter Configuring @value{tramp}
423 @cindex configuration
424 @cindex default configuration
426 @value{tramp} is initially configured to use the @command{scp} program
427 to connect to the remote host.  Just type @kbd{C-x C-f} and then enter
428 file name @file{@trampfn{scp,user@@host,/path/to/file}}.  For details,
429 @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
431 For problems related to the behavior of the remote shell, @xref{Remote
432 shell setup}.
434 For changing the connection type and file access method from the
435 defaults to one of several other options, @xref{Connection types}.
437 @strong{Note} that some user options described in these examples are
438 not auto loaded by Emacs.  All examples require @value{tramp} is
439 installed and loaded:
441 @lisp
442 @group
443 (custom-set-variables
444  '(tramp-verbose 6 nil (tramp) "Enable remote command traces"))
445 @end group
446 @end lisp
449 @menu
450 * Connection types::            Types of connections to remote hosts.
451 * Inline methods::              Inline methods.
452 * External methods::            External methods.
453 * GVFS based methods::          GVFS based external methods.
454 * Default Method::              Selecting a default method.
455                                   Here we also try to help those who
456                                   don't have the foggiest which method
457                                   is right for them.
458 * Default User::                Selecting a default user.
459 * Default Host::                Selecting a default host.
460 * Multi-hops::                  Connecting to a remote host using multiple hops.
461 * Firewalls::                   Passing firewalls.
462 * Customizing Methods::         Using Non-Standard Methods.
463 * Customizing Completion::      Selecting config files for user/host name completion.
464 * Password handling::           Reusing passwords for several connections.
465 * Connection caching::          Reusing connection related information.
466 * Predefined connection information::
467                                 Setting own connection related information.
468 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
469 * Remote shell setup::          Remote shell setup hints.
470 * Android shell setup::         Android shell setup hints.
471 * Auto-save and Backup::        Auto-save and Backup.
472 * Windows setup hints::         Issues with Cygwin ssh.
473 @end menu
476 @node Connection types
477 @section Types of connections to remote hosts
478 @cindex connection types, overview
480 @dfn{Inline method} and @dfn{external method} are the two basic types
481 of access methods.  While they both use the same remote shell access
482 programs, such as @command{rsh}, @command{ssh}, or @command{telnet},
483 they differ in the file access methods.  Choosing the right method
484 becomes important for editing files, transferring large files, or
485 operating on a large number of files.
487 The performance of the external methods is generally better than that
488 of the inline methods, at least for large files.  This is caused by
489 the need to encode and decode the data when transferring inline.
491 The one exception to this rule are the @option{scp}-based access
492 methods.  While these methods do see better performance when actually
493 transferring files, the overhead of the cryptographic negotiation at
494 startup may drown out the improvement in file transfer times.
496 External methods should be configured such a way that they don't
497 require a password (with @command{ssh-agent}, or such alike).  Modern
498 @command{scp} implementations offer options to reuse existing
499 @command{ssh} connections, which will be enabled by default if
500 available.  If it isn't possible, you should consider @ref{Password
501 handling}, otherwise you will be prompted for a password every copy
502 action.
505 @node Inline methods
506 @section Inline methods
507 @cindex inline methods
508 @cindex methods, inline
510 Inline methods use the same login connection to transfer file
511 contents.  Inline methods are quick and easy for small files.  They
512 depend on the availability of suitable encoding and decoding programs
513 on the remote host.  For local source and destination, @value{tramp}
514 may use built-in equivalents of such programs in Emacs.
516 Inline methods can work in situations where an external transfer
517 program is unavailable.  Inline methods also work when transferring
518 files between different @emph{user identities} on the same host.
520 @cindex uuencode
521 @cindex mimencode
522 @cindex base-64 encoding
524 @value{tramp} checks the remote host for the availability and
525 usability of @command{mimencode} (part of the @command{metamail}
526 package) or @command{uuencode}.  @value{tramp} uses the first reliable
527 command it finds.  @value{tramp}'s search path can be customized, see
528 @ref{Remote programs}.
530 In case both @command{mimencode} and @command{uuencode} are
531 unavailable, @value{tramp} first transfers a small Perl program to the
532 remote host, and then tries that program for encoding and decoding.
534 To increase transfer speeds for large text files, use compression
535 before encoding.  The user option
536 @option{tramp-inline-compress-start-size} specifies the file size for
537 such optimization.
539 @table @asis
540 @item @option{rsh}
541 @cindex method rsh
542 @cindex rsh method
544 @command{rsh} is an option for connecting to hosts within local
545 networks since @command{rsh} is not as secure as other methods.
547 @item @option{ssh}
548 @cindex method ssh
549 @cindex ssh method
551 @command{ssh} is a more secure option than others to connect to a
552 remote host.
554 @command{ssh} can also take extra parameters as port numbers.  For
555 example, a host on port 42 is specified as @file{host#42} (the real
556 host name, a hash sign, then a port number).  It is the same as passing
557 @samp{-p 42} to the @command{ssh} command.
559 @item @option{telnet}
560 @cindex method telnet
561 @cindex telnet method
563 Connecting to a remote host with @command{telnet} is as insecure
564 as the @option{rsh} method.
566 @item @option{su}
567 @cindex method su
568 @cindex su method
570 Instead of connecting to a remote host, @command{su} program allows
571 editing as another user.  The host can be either @samp{localhost} or
572 the host returned by the function @command{(system-name)}.  See
573 @ref{Multi-hops} for an exception to this behavior.
575 @item @option{sudo}
576 @cindex method sudo
577 @cindex sudo method
579 Similar to @option{su} method, @option{sudo} uses @command{sudo}.
580 @command{sudo} must have sufficient rights to start a shell.
582 @item @option{doas}
583 @cindex method doas
584 @cindex doas method
586 This method is used on OpenBSD like the @command{sudo} command.
588 @item @option{sg}
589 @cindex method sg
590 @cindex sg method
592 The @command{sg} program allows editing as different group.  The host
593 can be either @samp{localhost} or the host returned by the function
594 @command{(system-name)}.  The user name must be specified, but it
595 denotes a group name.  See @ref{Multi-hops} for an exception to this
596 behavior.
598 @item @option{sshx}
599 @cindex method sshx
600 @cindex sshx method
602 Works like @option{ssh} but without the extra authentication prompts.
603 @option{sshx} uses @samp{ssh -t -t @var{host} -l @var{user} /bin/sh}
604 to open a connection with a ``standard'' login shell.
606 @strong{Note} that @option{sshx} does not bypass authentication
607 questions.  For example, if the host key of the remote host is not
608 known, @option{sshx} will still ask ``Are you sure you want to
609 continue connecting?''.  @value{tramp} cannot handle such questions.
610 Connections will have to be setup where logins can proceed without
611 such questions.
613 @option{sshx} is useful for Windows users when @command{ssh} triggers
614 an error about allocating a pseudo tty.  This happens due to missing
615 shell prompts that confuses @value{tramp}.
617 @option{sshx} supports the @samp{-p} argument.
619 @item @option{krlogin}
620 @cindex method krlogin
621 @cindex krlogin method
622 @cindex Kerberos (with krlogin method)
624 This method is also similar to @option{ssh}.  It uses the
625 @command{krlogin -x} command only for remote host login.
627 @item @option{ksu}
628 @cindex method ksu
629 @cindex ksu method
630 @cindex Kerberos (with ksu method)
632 This is another method from the Kerberos suite.  It behaves like @option{su}.
634 @item @option{plink}
635 @cindex method plink
636 @cindex plink method
638 @option{plink} method is for Windows users with the PuTTY
639 implementation of SSH@.  It uses @samp{plink -ssh} to log in to the
640 remote host.
642 Check the @samp{Share SSH connections if possible} control for that
643 session.
645 @option{plink} method supports the @samp{-P} argument.
647 @item @option{plinkx}
648 @cindex method plinkx
649 @cindex plinkx method
651 Another method using PuTTY on Windows with session names instead of
652 host names.  @option{plinkx} calls @samp{plink -load @var{session} -t}.
653 User names and port numbers must be defined in the session.
655 Check the @samp{Share SSH connections if possible} control for that
656 session.
658 @end table
661 @node External methods
662 @section External methods
663 @cindex methods, external
664 @cindex external methods
666 External methods operate over multiple channels, using the remote
667 shell connection for some actions while delegating file transfers to
668 an external transfer program.
670 External methods save on the overhead of encoding and decoding of
671 inline methods.
673 Since external methods have the overhead of opening a new channel,
674 files smaller than @var{tramp-copy-size-limit} still use inline
675 methods.
677 @table @asis
678 @item @option{rcp}
679 @cindex method rcp
680 @cindex rcp method
681 @cindex rcp (with rcp method)
682 @cindex rsh (with rcp method)
684 This method uses the @command{rsh} and @command{rcp} commands to
685 connect to the remote host and transfer files.  This is the fastest
686 access method available.
688 The alternative method @option{remcp} uses the @command{remsh} and
689 @command{rcp} commands.
691 @item @option{scp}
692 @cindex method scp
693 @cindex scp method
694 @cindex scp (with scp method)
695 @cindex ssh (with scp method)
697 Using a combination of @command{ssh} to connect and @command{scp} to
698 transfer is the most secure.  While the performance is good, it is
699 slower than the inline methods for smaller files.  Though there is no
700 overhead of encoding and decoding of the inline methods,
701 @command{scp}'s cryptographic handshake negates those speed gains.
703 @option{ssh}-based methods support @samp{-p} feature for specifying
704 port numbers.  For example, @file{host#42} passes @samp{-p 42} in the
705 argument list to @command{ssh}, and @samp{-P 42} in the argument list
706 to @command{scp}.
708 @item @option{rsync}
709 @cindex method rsync
710 @cindex rsync method
711 @cindex rsync (with rsync method)
712 @cindex ssh (with rsync method)
714 @command{ssh} command to connect in combination with @command{rsync}
715 command to transfer is similar to the @option{scp} method.
717 @command{rsync} performs much better than @command{scp} when
718 transferring files that exist on both hosts.  However, this advantage
719 is lost if the file exists only on one side of the connection.
721 This method supports the @samp{-p} argument.
723 @item @option{scpx}
724 @cindex method scpx
725 @cindex scpx method
726 @cindex scp (with scpx method)
727 @cindex ssh (with scpx method)
729 @option{scpx} is useful to avoid login shell questions.  It is similar
730 in performance to @option{scp}.  @option{scpx} uses @samp{ssh -t -t
731 @var{host} -l @var{user} /bin/sh} to open a connection.
733 @option{scpx} is useful for Windows users when @command{ssh} triggers
734 an error about allocating a pseudo tty.  This happens due to missing
735 shell prompts that confuses @value{tramp}.
737 This method supports the @samp{-p} argument.
739 @item @option{pscp}
740 @item @option{psftp}
741 @cindex method pscp
742 @cindex pscp method
743 @cindex pscp (with pscp method)
744 @cindex plink (with pscp method)
745 @cindex PuTTY (with pscp method)
746 @cindex method psftp
747 @cindex psftp method
748 @cindex pscp (with psftp method)
749 @cindex plink (with psftp method)
750 @cindex PuTTY (with psftp method)
752 These methods are similar to @option{scp} or @option{sftp}, but they
753 use the @command{plink} command to connect to the remote host, and
754 they use @command{pscp} or @command{psftp} for transferring the files.
755 These programs are part of PuTTY, an SSH implementation for Windows.
757 Check the @samp{Share SSH connections if possible} control for that
758 session.
760 These methods support the @samp{-P} argument.
762 @item @option{fcp}
763 @cindex method fcp
764 @cindex fcp method
765 @cindex fsh (with fcp method)
766 @cindex fcp (with fcp method)
768 This method is similar to @option{scp}, but uses @command{fsh} to
769 connect and @command{fcp} to transfer files.  @command{fsh/fcp}, a
770 front-end for @command{ssh}, reuse @command{ssh} session by
771 submitting several commands.  This avoids the startup overhead due to
772 @command{scp}'s secure connection.  Inline methods have similar
773 benefits.
775 The command used for this connection is: @samp{fsh @var{host} -l
776 @var{user} /bin/sh -i}
778 @cindex method fsh
779 @cindex fsh method
781 @option{fsh} has no inline method since the multiplexing it offers is
782 not useful for @value{tramp}.  @command{fsh} connects to remote host
783 and @value{tramp} keeps that one connection open.
785 @item @option{nc}
786 @cindex method nc
787 @cindex nc method
788 @cindex nc (with nc method)
789 @cindex telnet (with nc method)
791 Using @command{telnet} to connect and @command{nc} to transfer files
792 is sometimes the only combination suitable for accessing routers or
793 NAS hosts.  These dumb devices have severely restricted local shells,
794 such as the @command{busybox} and do not host any other encode or
795 decode programs.
797 @item @option{ftp}
798 @cindex method ftp
799 @cindex ftp method
801 When @value{tramp} uses @option{ftp}, it forwards requests to whatever
802 ftp program is specified by Ange FTP.  This external program must be
803 capable of servicing requests from @value{tramp}.
805 @item @option{smb}
806 @cindex method smb
807 @cindex smb method
809 This non-native @value{tramp} method connects via the Server Message
810 Block (SMB) networking protocol to hosts running file servers that are
811 typically based on @url{https://www.samba.org/,,Samba} or MS Windows.
813 Using @command{smbclient} requires a few tweaks when working with
814 @value{tramp}:
816 The first directory in the localname must be a share name on the
817 remote host.
819 Since some SMB share names end in the @code{$} character,
820 @value{tramp} must use @code{$$} when specifying those shares to avoid
821 environment variable substitutions.
823 When @value{tramp} is not specific about the share name or uses the
824 generic remote directory @file{/}, @command{smbclient} returns all
825 available shares.
827 Since SMB authentication is based on each SMB share, @value{tramp}
828 prompts for a password even when accessing a different share on the
829 same SMB host.  This prompting can be suppressed by @ref{Password
830 handling}.
832 To accommodate user name/domain name syntax required by MS Windows
833 authorization, @value{tramp} provides for an extended syntax in
834 @code{user%domain} format (where user is user name, @code{%} is the
835 percent symbol, and domain is the windows domain name).  An example:
837 @example
838 @trampfn{smb,daniel%BIZARRE@@melancholia,/daniel$$/.emacs}
839 @end example
841 where user @code{daniel} connects as a domain user to the SMB host
842 @code{melancholia} in the windows domain @code{BIZARRE} to edit
843 @file{.emacs} located in the home directory (share @code{daniel$}).
845 Alternatively, for local WINS users (as opposed to domain users),
846 substitute the domain name with the name of the local host in
847 UPPERCASE as shown here:
849 @example
850 @trampfn{smb,daniel%MELANCHOLIA@@melancholia,/daniel$$/.emacs}
851 @end example
853 where user @code{daniel} connects as local user to the SMB host
854 @code{melancholia} in the local domain @code{MELANCHOLIA} to edit
855 @file{.emacs} located in the home directory (share @code{daniel$}).
857 The domain name and user name are optional for @command{smbclient}
858 authentication.  When user name is not specified, @command{smbclient}
859 uses the anonymous user (without prompting for password).  This
860 behavior is unlike other @value{tramp} methods, where local user name
861 is substituted.
863 The @option{smb} method is unavailable if Emacs is run under a local
864 user authentication context in MS Windows.  However such users can
865 still access remote files using UNC file names instead of @value{tramp}:
867 @example
868 //melancholia/daniel$$/.emacs
869 @end example
871 UNC file name specification does not allow the specification of a
872 different user name for authentication like the @command{smbclient}
873 can.
876 @item @option{adb}
877 @cindex method adb
878 @cindex adb method
880 This method uses Android Debug Bridge program for accessing Android
881 devices.  The Android Debug Bridge must be installed locally for
882 @value{tramp} to work.  Some GNU/Linux distributions provide Android
883 Debug Bridge as an installation package.  Alternatively, the program
884 is installed as part of the Android SDK@.  @value{tramp} finds the
885 @command{adb} program either via the @env{PATH} environment variable
886 or the absolute path set in the user option @option{tramp-adb-program}.
888 @value{tramp} connects to Android devices with @option{adb} only when
889 the user option @option{tramp-adb-connect-if-not-connected} is not
890 @code{nil}.  Otherwise, the connection must be established outside
891 Emacs.
893 @value{tramp} does not require a host name part of the remote file
894 name when a single Android device is connected to @command{adb}.
895 @value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
896 @command{adb devices} shows available host names.
898 @option{adb} method normally does not need user name to authenticate
899 on the Android device because it runs under the @command{adbd}
900 process.  But when a user name is specified, however, @value{tramp}
901 applies an @command{su} in the syntax.  When authentication does not
902 succeed, especially on un-rooted Android devices, @value{tramp}
903 displays login errors.
905 For Android devices connected through TCP/IP, a port number can be
906 specified using @file{device#42} host name syntax or @value{tramp} can
907 use the default value as declared in @command{adb} command.  Port
908 numbers are not applicable to Android devices connected through USB@.
910 @end table
913 @node GVFS based methods
914 @section GVFS based external methods
915 @cindex methods, gvfs
916 @cindex gvfs based methods
917 @cindex dbus
919 GVFS is the virtual file system for the Gnome Desktop,
920 @uref{http://en.wikipedia.org/wiki/GVFS}.  Remote files on GVFS are
921 mounted locally through FUSE and @value{tramp} uses this locally
922 mounted directory internally.
924 Emacs uses the D-Bus mechanism to communicate with GVFS@.  Emacs must
925 have the message bus system, D-Bus integration active, @pxref{Top, ,
926 D-Bus, dbus}.
928 @table @asis
929 @item @option{afp}
930 @cindex method afp
931 @cindex afp method
933 This method is for connecting to remote hosts with the Apple Filing
934 Protocol for accessing files on macOS volumes.  @value{tramp} access
935 syntax requires a leading volume (share) name, for example:
936 @file{@trampfn{afp,user@@host,/volume}}.
938 @item @option{dav}
939 @item @option{davs}
940 @cindex method dav
941 @cindex method davs
942 @cindex dav method
943 @cindex davs method
945 @option{dav} method provides access to WebDAV files and directories
946 based on standard protocols, such as HTTP@.  @option{davs} does the same
947 but with SSL encryption.  Both methods support the port numbers.
949 @item @option{gdrive}
950 @cindex method gdrive
951 @cindex gdrive method
952 @cindex Google Drive
954 Via the @option{gdrive} method it is possible to access your Google
955 Drive online storage.  User and host name of the remote file name are
956 your email address of the Google Drive credentials, like
957 @file{@trampfn{gdrive,john.doe@@gmail.com,/}}.  These credentials must
958 be populated in your @command{Online Accounts} application outside Emacs.
960 Since Google Drive uses cryptic blob file names internally,
961 @value{tramp} works with the @code{display-name} of the files.  This
962 could produce unexpected behavior in case two files in the same
963 directory have the same @code{display-name}, such a situation must be avoided.
965 @item @option{obex}
966 @cindex method obex
967 @cindex obex method
969 OBEX is an FTP-like access protocol for cell phones and similar simple
970 devices.  @value{tramp} supports OBEX over Bluetooth.
972 @item @option{sftp}
973 @cindex method sftp
974 @cindex sftp method
976 This method uses @command{sftp} in order to securely access remote
977 hosts.  @command{sftp} is a more secure option for connecting to hosts
978 that for security reasons refuse @command{ssh} connections.
980 @item @option{synce}
981 @cindex method synce
982 @cindex synce method
984 @option{synce} method allows connecting to Windows Mobile devices.  It
985 uses GVFS for mounting remote files and directories via FUSE and
986 requires the SYNCE-GVFS plugin.
988 @end table
990 @defopt tramp-gvfs-methods
991 This user option is a list of external methods for GVFS@.  By default,
992 this list includes @option{afp}, @option{dav}, @option{davs},
993 @option{gdrive}, @option{obex}, @option{sftp} and @option{synce}.
994 Other methods to include are: @option{ftp} and @option{smb}.
995 @end defopt
998 @node Default Method
999 @section Selecting a default method
1000 @cindex default method
1002 In a remote file name, the use of a default method is indicated by the
1003 pseudo method @option{-}, @ref{File name syntax}.
1005 @defopt tramp-default-method
1006 Default method is for transferring files.  The user option
1007 @option{tramp-default-method} sets it.  @value{tramp} uses this user
1008 option to determine the default method for remote file names that do
1009 not have one specified.
1011 @lisp
1012 (custom-set-variables '(tramp-default-method "ssh" nil (tramp)))
1013 @end lisp
1014 @end defopt
1016 @defopt tramp-default-method-alist
1017 Default methods for transferring files can be customized for specific
1018 user and host combinations through the user option
1019 @option{tramp-default-method-alist}.
1021 For example, the following two lines specify to use the @option{ssh}
1022 method for all user names matching @samp{john} and the @option{rsync}
1023 method for all host names matching @samp{lily}.  The third line
1024 specifies to use the @option{su} method for the user @samp{root} on
1025 the host @samp{localhost}.
1027 @lisp
1028 @group
1029 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1030 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1031 (add-to-list 'tramp-default-method-alist
1032              '("\\`localhost\\'" "\\`root\\'" "su"))
1033 @end group
1034 @end lisp
1035 @end defopt
1037 @noindent
1038 External methods performance faster for large files.  @pxref{Inline
1039 methods}.  @pxref{External methods}.
1041 Choosing the access method also depends on the security environment.
1042 For example, @option{rsh} and @option{telnet} methods that use clear
1043 text password transfers are inappropriate for over the Internet
1044 connections.  Secure remote connections should use @option{ssh} that
1045 provide encryption.
1048 @subsection Which method to use?
1049 @cindex choosing the right method
1051 @value{tramp} provides maximum number of choices for maximum
1052 flexibility.  Choosing which method depends on the hosts, clients,
1053 network speeds, and the security context.
1055 Start by using an inline method.
1057 External methods might be more efficient for large files, but most
1058 @value{tramp} users edit small files more often than large files.
1060 Enable compression, @var{tramp-inline-compress-start-size}, for a
1061 performance boost for large files.
1063 Since @command{ssh} has become the most common method of remote host
1064 access and it has the most reasonable security protocols, use
1065 @option{ssh} method.  Typical @option{ssh} usage to edit the
1066 @file{/etc/motd} file on the otherhost:
1068 @example
1069 @kbd{C-x C-f @trampfn{ssh,root@@otherhost,/etc/motd} @key{RET}}
1070 @end example
1072 If @option{ssh} is unavailable for whatever reason, look for other
1073 obvious options.  For Windows, try the @option{plink} method.  For
1074 Kerberos, try @option{krlogin}.
1076 For editing local files as @option{su} or @option{sudo} methods, try
1077 the shortened syntax of @samp{root}:
1079 @example
1080 @kbd{C-x C-f @trampfn{su,,/etc/motd} @key{RET}}
1081 @end example
1083 For editing large files, @option{scp} is faster than @option{ssh}.
1084 @option{pscp} is faster than @option{plink}.  But this speed
1085 improvement is not always true.
1088 @node Default User
1089 @section Selecting a default user
1090 @cindex default user
1092 @defopt tramp-default-user
1093 @value{tramp} file name can omit the user name part since
1094 @value{tramp} substitutes the currently logged-in user name.  However
1095 this substitution can be overridden with @option{tramp-default-user}.
1096 For example:
1098 @lisp
1099 (custom-set-variables'(tramp-default-user "root" nil (tramp)))
1100 @end lisp
1101 @end defopt
1103 @defopt tramp-default-user-alist
1104 Instead of a single default user, @option{tramp-default-user-alist}
1105 allows multiple default user values based on access method or host
1106 name combinations.  The alist can hold multiple values.  For example, to
1107 use the @samp{john} as the default user for the domain
1108 @samp{somewhere.else} only:
1110 @lisp
1111 @group
1112 (add-to-list 'tramp-default-user-alist
1113              '("ssh" ".*\\.somewhere\\.else\\'" "john"))
1114 @end group
1115 @end lisp
1117 A Caution: @value{tramp} will override any default user specified in
1118 the configuration files outside Emacs, such as @file{~/.ssh/config}.
1119 To stop @value{tramp} from applying the default value, set the
1120 corresponding alist entry to nil:
1122 @lisp
1123 @group
1124 (add-to-list 'tramp-default-user-alist
1125              '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
1126 @end group
1127 @end lisp
1129 The last entry in @option{tramp-default-user-alist} should be reserved
1130 for catch-all or most often used login.
1132 @lisp
1133 @group
1134 (add-to-list 'tramp-default-user-alist
1135              '(nil nil "jonas") t)
1136 @end group
1137 @end lisp
1138 @end defopt
1141 @node Default Host
1142 @section Selecting a default host
1143 @cindex default host
1145 @defopt tramp-default-host
1146 When host name is omitted, @value{tramp} substitutes the value from
1147 the @option{tramp-default-host} user option.  It is initially
1148 populated with the local host name where Emacs is running.  The
1149 default method, default user and default host can be overridden as
1150 follows:
1152 @lisp
1153 @group
1154 (custom-set-variables
1155  '(tramp-default-method "ssh" nil (tramp))
1156  '(tramp-default-user "john" nil (tramp))
1157  '(tramp-default-host "target" nil (tramp)))
1158 @end group
1159 @end lisp
1161 With all defaults set, @samp{@trampfn{-,,}} will connect @value{tramp}
1162 to John's home directory on @code{target} via @code{ssh}.
1163 @end defopt
1165 @defopt tramp-default-host-alist
1166 Instead of a single default host, @option{tramp-default-host-alist}
1167 allows multiple default host values based on access method or user
1168 name combinations.  The alist can hold multiple values.  While
1169 @option{tramp-default-host} is sufficient in most cases, some methods,
1170 like @option{adb}, require defaults overwritten.
1171 @end defopt
1174 @node Multi-hops
1175 @section Connecting to a remote host using multiple hops
1176 @cindex multi-hop
1177 @cindex proxy hosts
1179 Multi-hops are methods to reach hosts behind firewalls or to reach the
1180 outside world from inside a bastion host.  With multi-hops,
1181 @value{tramp} can negotiate these hops with the appropriate user/host
1182 authentication at each hop.  All methods until now have been the single
1183 hop kind, where the start and end points of the connection did not
1184 have intermediate check points.
1186 @defopt tramp-default-proxies-alist
1187 @option{tramp-default-proxies-alist} specifies proxy hosts to pass
1188 through.  This user option is list of triples consisting of
1189 @code{(@var{host} @var{user} @var{proxy})}.
1191 The first match is the proxy host through which passes the file name
1192 and the target host matching @var{user}@@@var{host}.  @var{host} and
1193 @var{user} are regular expressions or @code{nil}, interpreted as a
1194 regular expression which always matches.
1196 @var{proxy} is a literal @value{tramp} file name whose local name part
1197 is ignored, and the method and user name parts are optional.
1199 The method must be an inline method (@pxref{Inline methods}).  If
1200 @var{proxy} is @code{nil}, no additional hop is required reaching
1201 @var{user}@@@var{host}.
1203 For example, to pass through the host @samp{bastion.your.domain} as
1204 user @samp{bird} to reach remote hosts outside the local domain:
1206 @lisp
1207 @group
1208 (add-to-list 'tramp-default-proxies-alist
1209              '("\\." nil "@trampfn{ssh,bird@@bastion.your.domain,}"))
1210 (add-to-list 'tramp-default-proxies-alist
1211              '("\\.your\\.domain\\'" nil nil))
1212 @end group
1213 @end lisp
1215 @strong{Note}: @code{add-to-list} adds elements at the beginning of a
1216 list.  Therefore, most relevant rules must come last in the list.
1218 Proxy hosts can be cascaded in the alist.  If there is another host
1219 called @samp{jump.your.domain}, which is the only host allowed to
1220 connect to @samp{bastion.your.domain}, then:
1222 @lisp
1223 @group
1224 (add-to-list 'tramp-default-proxies-alist
1225              '("\\`bastion\\.your\\.domain\\'"
1226                "\\`bird\\'"
1227                "@trampfn{ssh,jump.your.domain,}"))
1228 @end group
1229 @end lisp
1231 @var{proxy} can take patterns @code{%h} or @code{%u} for @var{host} or
1232 @var{user} respectively.
1234 To login as @samp{root} on remote hosts in the domain
1235 @samp{your.domain}, but login as @samp{root} is disabled for non-local
1236 access, then use this alist entry:
1238 @lisp
1239 @group
1240 (add-to-list 'tramp-default-proxies-alist
1241              '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
1242 @end group
1243 @end lisp
1245 Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
1246 to @samp{randomhost.your.domain} via @code{ssh} under your account
1247 name, and then performs @code{sudo -u root} on that host.
1249 It is key for the sudo method in the above example to be applied on
1250 the host after reaching it and not on the local host.
1252 @var{host}, @var{user} and @var{proxy} can also take Lisp forms.  These
1253 forms when evaluated must return either a string or @code{nil}.
1255 To generalize (from the previous example): For all hosts, except my
1256 local one, first connect via @command{ssh}, and then apply
1257 @command{sudo -u root}:
1259 @lisp
1260 @group
1261 (add-to-list 'tramp-default-proxies-alist
1262              '(nil "\\`root\\'" "@trampfn{ssh,%h,}"))
1263 (add-to-list 'tramp-default-proxies-alist
1264              '((regexp-quote (system-name)) nil nil))
1265 @end group
1266 @end lisp
1267 @end defopt
1269 Passing through hops involves dealing with restricted shells, such as
1270 @command{rbash}.  If @value{tramp} is made aware, then it would use
1271 them for proxies only.
1273 @defopt tramp-restricted-shell-hosts-alist
1274 An alist of regular expressions of hosts running restricted shells,
1275 such as @command{rbash}.  @value{tramp} will then use them only as
1276 proxies.
1278 To specify the bastion host from the example above as running a
1279 restricted shell:
1281 @lisp
1282 @group
1283 (add-to-list 'tramp-restricted-shell-hosts-alist
1284              "\\`bastion\\.your\\.domain\\'")
1285 @end group
1286 @end lisp
1287 @end defopt
1290 @node Firewalls
1291 @section Passing firewalls
1292 @cindex HTTP tunnel
1293 @cindex proxy hosts, HTTP tunnel
1295 Sometimes, it is not possible to reach a remote host directly.  A
1296 firewall might be in the way, which could be passed via a proxy
1297 server.
1299 Both ssh and PuTTY support such proxy settings, using an HTTP tunnel
1300 via the @command{CONNECT} command (conforming to RFC 2616, 2817
1301 specifications).  Proxy servers using HTTP version 1.1 or later
1302 protocol support this command.
1304 @subsection Tunneling with ssh
1306 With ssh, you could use the @code{ProxyCommand} entry in the
1307 @file{~/.ssh/config}:
1309 @example
1310 @group
1311 Host host.other.domain
1312      ProxyCommand nc -X connect -x proxy.your.domain:3128 %h %p
1313 @end group
1314 @end example
1316 @code{nc} is BSD's netcat program, which establishes HTTP tunnels. Any
1317 other program with such a feature could be used as well.
1319 In the example, opening @file{@trampfn{ssh,host.your.domain,}} passes
1320 the HTTP proxy server @samp{proxy.your.domain} on port 3128.
1322 @subsection Tunneling with PuTTY
1324 PuTTY does not need an external program, HTTP tunnel support is
1325 built-in.  In the PuTTY config program, create a session for
1326 @samp{host.your.domain}.  In the @option{Connection/Data} entry,
1327 select the @option{HTTP} option, and add @samp{proxy.your.domain} as
1328 @option{Proxy hostname}, and 3128 as @option{Port}.
1330 Opening @file{@trampfn{plinkx,host.your.domain,}} passes the HTTP
1331 proxy server @samp{proxy.your.domain} on port 3128.
1334 @node Customizing Methods
1335 @section Using Non-Standard Methods
1336 @cindex customizing methods
1337 @cindex using non-standard methods
1338 @cindex create your own methods
1340 The @code{tramp-methods} variable currently has an exhaustive list of
1341 predefined methods.  Any part of this list can be modified with more
1342 suitable settings.  Refer to the Lisp documentation of that variable,
1343 accessible with @kbd{C-h v tramp-methods @key{RET}}.
1346 @node Customizing Completion
1347 @section Selecting config files for user/host name completion
1348 @cindex customizing completion
1349 @cindex selecting config files
1350 @vindex tramp-completion-function-alist
1352 @code{tramp-completion-function-alist} uses predefined files for user
1353 and host name completion (@pxref{File name completion}).  For each
1354 method, it keeps a set of configuration files and a function that can
1355 parse that file.  Each entry in @code{tramp-completion-function-alist}
1356 is of the form (@var{method} @var{pair1} @var{pair2} @dots{}).
1358 Each @var{pair} is composed of (@var{function} @var{file}).
1359 @var{function} is responsible for extracting user names and host names
1360 from @var{file} for completion.  There are two functions which access
1361 this variable:
1363 @defun tramp-get-completion-function method
1364 This function returns the list of completion functions for @var{method}.
1366 Example:
1367 @example
1368 @group
1369 (tramp-get-completion-function "rsh")
1371      @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1372          (tramp-parse-rhosts "~/.rhosts"))
1373 @end group
1374 @end example
1375 @end defun
1377 @defun tramp-set-completion-function method function-list
1378 This function sets @var{function-list} as list of completion functions
1379 for @var{method}.
1381 Example:
1382 @example
1383 @group
1384 (tramp-set-completion-function "ssh"
1385  '((tramp-parse-sconfig "/etc/ssh_config")
1386    (tramp-parse-sconfig "~/.ssh/config")))
1388      @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1389          (tramp-parse-sconfig "~/.ssh/config"))
1390 @end group
1391 @end example
1392 @end defun
1394 The following predefined functions parsing configuration files exist:
1396 @table @asis
1397 @item @code{tramp-parse-rhosts}
1398 @findex tramp-parse-rhosts
1400 This function parses files which are syntactical equivalent to
1401 @file{~/.rhosts}.  It returns both host names and user names, if
1402 specified.
1404 @item @code{tramp-parse-shosts}
1405 @findex tramp-parse-shosts
1407 This function parses files which are syntactical equivalent to
1408 @file{~/.ssh/known_hosts}.  Since there are no user names specified
1409 in such files, it can return host names only.
1411 @item @code{tramp-parse-sconfig}
1412 @findex tramp-parse-sconfig
1414 This function returns the host nicknames defined by @code{Host} entries
1415 in @file{~/.ssh/config} style files.
1417 @item @code{tramp-parse-shostkeys}
1418 @findex tramp-parse-shostkeys
1420 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1421 @file{~/ssh2/hostkeys/*}.  Hosts are coded in file names
1422 @file{hostkey_@var{portnumber}_@var{host-name}.pub}.  User names
1423 are always @code{nil}.
1425 @item @code{tramp-parse-sknownhosts}
1426 @findex tramp-parse-sknownhosts
1428 Another SSH2 style parsing of directories like
1429 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}.  This
1430 case, hosts names are coded in file names
1431 @file{@var{host-name}.@var{algorithm}.pub}.  User names are always @code{nil}.
1433 @item @code{tramp-parse-hosts}
1434 @findex tramp-parse-hosts
1436 A function dedicated to @file{/etc/hosts} for host names.
1438 @item @code{tramp-parse-passwd}
1439 @findex tramp-parse-passwd
1441 A function which parses @file{/etc/passwd} files for user names.
1443 @item @code{tramp-parse-etc-group}
1444 @findex tramp-parse-etc-group
1446 A function which parses @file{/etc/group} files for group names.
1448 @item @code{tramp-parse-netrc}
1449 @findex tramp-parse-netrc
1451 A function which parses @file{~/.netrc} and @file{~/.authinfo}-style files.
1453 @end table
1455 To keep a custom file with custom data in a custom structure, a custom
1456 function has to be provided.  This function must meet the following
1457 conventions:
1459 @defun my-tramp-parse file
1460 @var{file} must be either a file on the host, or @code{nil}.  The
1461 function must return a list of (@var{user} @var{host}), which are
1462 taken as candidates for completion for user and host names.
1464 Example:
1465 @example
1466 @group
1467 (my-tramp-parse "~/.my-tramp-hosts")
1469      @result{} ((nil "toto") ("daniel" "melancholia"))
1470 @end group
1471 @end example
1472 @end defun
1475 @node Password handling
1476 @section Reusing passwords for several connections
1477 @cindex passwords
1479 To avoid repeated prompts for passwords, consider native caching
1480 mechanisms, such as @command{ssh-agent} for @option{ssh}-like
1481 methods, or @command{pageant} for @option{plink}-like methods.
1483 @value{tramp} offers alternatives when native solutions cannot meet
1484 the need.
1487 @anchor{Using an authentication file}
1488 @subsection Using an authentication file
1489 @vindex auth-sources
1491 The package @file{auth-source.el}, originally developed for No Gnus,
1492 reads passwords from different sources, @xref{Help for users, ,
1493 auth-source, auth}.  The default authentication file is
1494 @file{~/.authinfo.gpg}, but this can be changed via the variable
1495 @code{auth-sources}.
1497 @noindent
1498 A typical entry in the authentication file:
1500 @example
1501 machine melancholia port scp login daniel password geheim
1502 @end example
1504 The port can take any @value{tramp} method (@pxref{Inline methods},
1505 @pxref{External methods}).  Omitting port values matches all
1506 @value{tramp} methods.
1508 Setting @code{auth-source-debug} to @code{t} to debug messages.
1511 @anchor{Caching passwords}
1512 @subsection Caching passwords
1514 @value{tramp} can cache passwords as entered and reuse when needed for
1515 the same user or host name independent of the access method.
1517 @vindex password-cache-expiry
1518 @code{password-cache-expiry} sets the duration (in seconds) the
1519 passwords are remembered.  Passwords are never saved permanently nor
1520 can they extend beyond the lifetime of the current Emacs session.  Set
1521 @code{password-cache-expiry} to @code{nil} to disable expiration.
1523 @vindex password-cache
1524 Set @code{password-cache} to @code{nil} to disable password caching.
1527 @node Connection caching
1528 @section Reusing connection related information
1529 @cindex caching
1530 @vindex tramp-persistency-file-name
1532 For faster initial connection times, @value{tramp} stores previous
1533 connection properties in a file specified by the user option
1534 @option{tramp-persistency-file-name}.
1536 The default file name for @option{tramp-persistency-file-name} is
1537 @file{~/.emacs.d/tramp}.
1539 @value{tramp} reads this file during Emacs startup, and writes to it
1540 when exiting Emacs.  Delete this file for @value{tramp} to recreate a
1541 new one on next Emacs startup.
1543 Set @option{tramp-persistency-file-name} to @code{nil} to disable
1544 storing connections persistently.
1546 To reuse connection information from the persistent list,
1547 @value{tramp} needs to uniquely identify every host.  However in some
1548 cases, two different connections may result in the same persistent
1549 information.  For example, connecting to a host using @command{ssh} and
1550 connecting to the same host through @code{sshd} on port 3001.  Both
1551 access methods result in nearly identical persistent specifications
1552 @file{@trampfn{ssh,localhost,}} and @file{@trampfn{ssh,localhost#3001,}}.
1554 Changing host names could avoid duplicates.  One way is to add a
1555 @option{Host} section in @file{~/.ssh/config} (@pxref{Frequently Asked
1556 Questions}).  Another way is to apply multiple hops (@pxref{Multi-hops}).
1558 When @value{tramp} detects a change in the operating system version in
1559 a remote host (via the command @command{uname -sr}), it flushes all
1560 connection related information for that host and creates a new entry.
1563 @node Predefined connection information
1564 @section Setting own connection related information
1565 @vindex tramp-connection-properties
1567 For more precise customization, parameters specified by
1568 @code{tramp-methods} can be overwritten manually.
1570 Set @option{tramp-connection-properties} to manually override
1571 @code{tramp-methods}.  Properties in this list are in the form
1572 @code{(@var{regexp} @var{property} @var{value})}.  @var{regexp}
1573 matches remote file names.  Use @code{nil} to match all.
1574 @var{property} is the property's name, and @var{value} is the
1575 property's value.
1577 @var{property} is any method specific parameter contained in
1578 @code{tramp-methods}.  The parameter key in @code{tramp-methods} is a
1579 symbol name @code{tramp-<foo>}.  To overwrite that property, use the
1580 string @samp{<foo>} for @var{property}.  For example, this changes the
1581 remote shell:
1583 @lisp
1584 @group
1585 (add-to-list 'tramp-connection-properties
1586              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1587                    "remote-shell" "/bin/ksh"))
1588 @end group
1590 @group
1591 (add-to-list 'tramp-connection-properties
1592              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1593                    "remote-shell-login" '("-")))
1594 @end group
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 @option{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 @group
1609 (add-to-list 'tramp-connection-properties
1610              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1611                    "busybox" t))
1612 @end group
1613 @end lisp
1616 @node Remote programs
1617 @section How @value{tramp} finds and uses programs on the remote host
1619 @value{tramp} requires access to and rights to several commands on
1620 remote hosts: @command{ls}, @command{test}, @command{find} and
1621 @command{cat}.
1623 Besides there are other required programs for @ref{Inline methods} and
1624 @ref{External methods} of connection.
1626 To improve performance and accuracy of remote file access,
1627 @value{tramp} uses @command{perl} (or @command{perl5}) and
1628 @command{grep} when available.
1630 @defopt tramp-remote-path
1631 @option{tramp-remote-path} specifies which remote directory paths
1632 @value{tramp} can search for @ref{Remote programs}.
1634 @vindex tramp-default-remote-path
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 @vindex tramp-own-remote-path
1652 Another way to find the remote path is to use the path assigned to the
1653 remote user by the remote host.  @value{tramp} does not normally retain
1654 this remote path after login.  However, @code{tramp-own-remote-path}
1655 preserves the path value, which can be used to update
1656 @option{tramp-remote-path}.
1658 @lisp
1659 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1660 @end lisp
1662 @strong{Note} that this works only if your remote @command{/bin/sh}
1663 shell supports the login argument @samp{-l}.
1664 @end defopt
1666 When remote search paths are changed, local @value{tramp} caches must
1667 be recomputed.  To force @value{tramp} to recompute afresh, exit
1668 Emacs, remove the persistent file (@pxref{Connection caching}), and
1669 restart Emacs.
1672 @node Remote shell setup
1673 @section Remote shell setup hints
1674 @cindex remote shell setup
1675 @cindex @file{.profile} file
1676 @cindex @file{.login} file
1677 @cindex shell init files
1679 @value{tramp} checks for the availability of standard programs in the
1680 usual locations.  Common tactics include successively trying
1681 @command{test -e}, @command{/usr/bin/test -e}, and @command{/bin/test
1682 -e}.  @command{ls -d} is another approach.  But these approaches do not
1683 help with these new login patterns.
1685 When @value{tramp} encounters two-factor logins or additional challenge
1686 questions, such as entering birth date or security code or passphrase,
1687 @value{tramp} needs a few more configuration steps to accommodate
1688 them.
1690 The difference between a password prompt and a passphrase prompt is
1691 that the password for completing the login while the passphrase is
1692 for authorizing access to local authentication information, such as
1693 the ssh key.
1695 There is no one configuration to accommodate all the variations in
1696 login security, especially not the exotic ones.  However, @value{tramp}
1697 provides a few tweaks to address the most common ones.
1699 @table @asis
1700 @item @option{tramp-shell-prompt-pattern}
1701 @vindex tramp-shell-prompt-pattern
1703 @option{tramp-shell-prompt-pattern} is for remote login shell prompt,
1704 which may not be the same as the local login shell prompt,
1705 @code{shell-prompt-pattern}.  Since most hosts use identical prompts,
1706 @value{tramp} sets a similar default value for both prompts.
1708 @item @option{tramp-password-prompt-regexp}
1709 @item @option{tramp-wrong-passwd-regexp}
1710 @vindex tramp-password-prompt-regexp
1711 @vindex tramp-wrong-passwd-regexp
1713 @value{tramp} uses @option{tramp-password-prompt-regexp} to
1714 distinguish between prompts for passwords and prompts for passphrases.
1715 By default, @option{tramp-password-prompt-regexp} handles the
1716 detection in English language environments.  See a localization
1717 example below:
1719 @lisp
1720 @group
1721 (custom-set-variables
1722  '(tramp-password-prompt-regexp
1723    (concat
1724     "^.*"
1725     (regexp-opt
1726      '("passphrase" "Passphrase"
1727        ;; English
1728        "password" "Password"
1729        ;; Deutsch
1730        "passwort" "Passwort"
1731        ;; Français
1732        "mot de passe" "Mot de passe")
1733      t)
1734     ".*:\0? *")
1735    nil (tramp)))
1736 @end group
1737 @end lisp
1739 Similar localization may be necessary for handling wrong password
1740 prompts, for which @value{tramp} uses @option{tramp-wrong-passwd-regexp}.
1742 @item @command{tset} and other questions
1743 @cindex Unix command tset
1744 @cindex tset Unix command
1745 @vindex tramp-terminal-type
1747 To suppress inappropriate prompts for terminal type, @value{tramp}
1748 sets the @env{TERM} to @code{dumb} before the remote login process
1749 begins via the user option @option{tramp-terminal-type}.  This will
1750 silence common @command{tset} related prompts.
1752 @value{tramp}'s strategy for handling such prompts (commonly triggered
1753 from login scripts on remote hosts) is to set the environment
1754 variables so that no prompts interrupt the shell initialization
1755 process.
1757 @vindex tramp-actions-before-shell
1758 An alternative approach is to configure @value{tramp} with strings
1759 that can identify such questions using
1760 @code{tramp-actions-before-shell}.  Example:
1762 @lisp
1763 @group
1764 (defconst my-tramp-prompt-regexp
1765   (concat (regexp-opt '("Enter the birth date of your mother:") t)
1766           "\\s-*")
1767   "Regular expression matching my login prompt question.")
1768 @end group
1770 @group
1771 (defun my-tramp-action (proc vec)
1772   "Enter \"19000101\" in order to give a correct answer."
1773   (save-window-excursion
1774     (with-current-buffer (tramp-get-connection-buffer vec)
1775       (tramp-message vec 6 "\n%s" (buffer-string))
1776       (tramp-send-string vec "19000101"))))
1777 @end group
1779 @group
1780 (add-to-list 'tramp-actions-before-shell
1781              '(my-tramp-prompt-regexp my-tramp-action))
1782 @end group
1783 @end lisp
1786 @item Conflicting names for users and variables in @file{.profile}
1788 When a user name is the same as a variable name in a local file, such
1789 as @file{.profile}, then @value{tramp} may send incorrect values for
1790 environment variables.  To avoid incorrect values, change the local
1791 variable name to something different from the user name.  For example,
1792 if the user name is @env{FRUMPLE}, then change the variable name to
1793 @env{FRUMPLE_DIR}.
1796 @item Non-Bourne commands in @file{.profile}
1798 When the remote host's @file{.profile} is also used for shells other
1799 than Bourne shell, then some incompatible syntaxes for commands in
1800 @file{.profile} may trigger errors in Bourne shell on the host and may
1801 not complete client's @value{tramp} connections.
1803 One example of a Bourne shell incompatible syntax in @file{.profile}:
1804 using @command{export FOO=bar} instead of @command{FOO=bar; export
1805 FOO}.  After remote login, @value{tramp} will trigger an error during
1806 its execution of @command{/bin/sh} on the remote host because Bourne
1807 shell does not recognize the export command as entered in
1808 @file{.profile}.
1810 Likewise, (@code{~}) character in paths will cause errors because
1811 Bourne shell does not do (@code{~}) character expansions.
1813 One approach to avoiding these incompatibilities is to make all
1814 commands in @file{~/.shrc} and @file{~/.profile} Bourne shell
1815 compatible so @value{tramp} can complete connections to that remote.
1816 To accommodate using non-Bourne shells on that remote, use other
1817 shell-specific config files.  For example, bash can use
1818 @file{~/.bash_profile} and ignore @file{.profile}.
1821 @item Interactive shell prompt
1823 @value{tramp} redefines the remote shell prompt internally for robust
1824 parsing.  This redefinition affects the looks of a prompt in an
1825 interactive remote shell through commands, such as @kbd{M-x
1826 shell}.  Such prompts, however, can be reset to something more readable
1827 and recognizable using these @value{tramp} variables.
1829 @value{tramp} sets the @env{INSIDE_EMACS} variable in the startup
1830 script file @file{~/.emacs_SHELLNAME}.
1832 @env{SHELLNAME} is @code{bash} or equivalent shell names.  Change it by
1833 setting the environment variable @env{ESHELL} in the @file{.emacs} as
1834 follows:
1836 @lisp
1837 (setenv "ESHELL" "bash")
1838 @end lisp
1840 Then re-set the prompt string in @file{~/.emacs_SHELLNAME} as follows:
1842 @example
1843 @group
1844 # Reset the prompt for remote Tramp shells.
1845 if [ "$@{INSIDE_EMACS/*tramp*/tramp@}" == "tramp" ] ; then
1846    PS1="[\u@@\h \w]$ "
1848 @end group
1849 @end example
1851 @ifinfo
1852 @xref{Interactive Shell, , , emacs}.
1853 @end ifinfo
1855 @item @command{busybox} / @command{nc}
1856 @cindex Unix command nc
1857 @cindex nc Unix command
1859 @value{tramp}'s @option{nc} method uses the @command{nc} command to
1860 install and execute a listener as follows (see @code{tramp-methods}):
1862 @example
1863 # nc -l -p 42
1864 @end example
1866 The above command-line syntax has changed with @command{busybox}
1867 versions.  If @command{nc} refuses the @samp{-p} parameter, then
1868 overwrite as follows:
1870 @lisp
1871 @group
1872 (add-to-list
1873  'tramp-connection-properties
1874  `(,(regexp-quote "192.168.0.1")
1875    "remote-copy-args" (("-l") ("%r"))))
1876 @end group
1877 @end lisp
1879 @noindent
1880 where @samp{192.168.0.1} is the remote host IP address
1881 (@pxref{Predefined connection information}).
1883 @end table
1886 @node Android shell setup
1887 @section Android shell setup hints
1888 @cindex android shell setup
1890 @value{tramp} uses the @option{adb} method to access Android devices.
1891 Android devices provide a restricted shell access through an USB
1892 connection.  The local host must have the @command{adb} program
1893 installed.
1895 Applications such as @code{SSHDroid} that run @command{sshd} process
1896 on the Android device can accept any @option{ssh}-based methods
1897 provided these settings are adjusted:
1899 @command{sh} must be specified for remote shell since Android devices
1900 do not provide @command{/bin/sh}.  @command{sh} will then invoke
1901 whatever shell is installed on the device with this setting:
1903 @lisp
1904 @group
1905 (add-to-list 'tramp-connection-properties
1906              (list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
1907 @end group
1908 @end lisp
1910 @noindent
1911 where @samp{192.168.0.26} is the Android device's IP address.
1912 (@pxref{Predefined connection information}).
1914 @value{tramp} requires preserving @env{PATH} environment variable from
1915 user settings.  Android devices prefer @file{/system/xbin} path over
1916 @file{/system/bin}.  Both of these are set as follows:
1918 @lisp
1919 @group
1920 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1921 (add-to-list 'tramp-remote-path "/system/xbin")
1922 @end group
1923 @end lisp
1925 @noindent
1926 When the Android device is not @samp{rooted}, specify a writable
1927 directory for temporary files:
1929 @lisp
1930 (add-to-list 'tramp-remote-process-environment "TMPDIR=$HOME")
1931 @end lisp
1933 @noindent
1934 Open a remote connection with the command @kbd{C-x C-f
1935 @trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
1936 on port @samp{2222}.
1938 To add a corresponding entry to the @file{~/.ssh/config} file
1939 (recommended), use this:
1941 @example
1942 @group
1943 Host android
1944      HostName 192.168.0.26
1945      User root
1946      Port 2222
1947 @end group
1948 @end example
1950 @noindent
1951 To use the host name @samp{android} instead of the IP address shown in
1952 the previous example, fix the connection properties as follows:
1954 @lisp
1955 @group
1956 (add-to-list 'tramp-connection-properties
1957              (list (regexp-quote "android") "remote-shell" "sh"))
1958 @end group
1959 @end lisp
1961 @noindent
1962 Open a remote connection with a more concise command @kbd{C-x C-f
1963 @trampfn{ssh,android,}}.
1966 @node Auto-save and Backup
1967 @section Auto-save and Backup configuration
1968 @cindex auto-save
1969 @cindex backup
1970 @vindex backup-directory-alist
1972 To avoid @value{tramp} from saving backup files owned by @samp{root}
1973 to locations accessible to others, default backup settings in
1974 @option{backup-directory-alist} have to be altered.
1976 Here's a scenario where files could be inadvertently exposed.  Emacs
1977 by default writes backup files to the same directory as the original
1978 files unless changed to another location, such as
1979 @file{~/.emacs.d/backups/}.  Such a directory will also be used by
1980 default by @value{tramp} when using, say, a restricted file
1981 @file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup file
1982 of the secretfile is now owned by the user logged in from
1983 @value{tramp} and not @samp{root}.
1985 When @option{backup-directory-alist} is @code{nil} (the default), such
1986 problems do not occur.
1988 To ``turn off'' the backup feature for @value{tramp} files and stop
1989 @value{tramp} from saving to the backup directory, use this:
1991 @lisp
1992 @group
1993 (add-to-list 'backup-directory-alist
1994              (cons tramp-file-name-regexp nil))
1995 @end group
1996 @end lisp
1998 @noindent
1999 Disabling backups can be targeted to just the @option{su} and
2000 @option{sudo} methods:
2002 @lisp
2003 @group
2004 (setq backup-enable-predicate
2005       (lambda (name)
2006         (and (normal-backup-enable-predicate name)
2007              (not
2008               (let ((method (file-remote-p name 'method)))
2009                 (when (stringp method)
2010                   (member method '("su" "sudo"))))))))
2011 @end group
2012 @end lisp
2014 Another option is to create better backup file naming with user and
2015 host names prefixed to the file name.  For example, transforming
2016 @file{/etc/secretfile} to
2017 @file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
2018 @value{tramp} user option @option{tramp-backup-directory-alist} from
2019 the existing user option @option{backup-directory-alist}.
2021 Then @value{tramp} backs up to a file name that is transformed with a
2022 prefix consisting of the DIRECTORY name.  This file name prefixing
2023 happens only when the DIRECTORY is an absolute local file name.
2025 @noindent
2026 Example:
2028 @lisp
2029 @group
2030 (add-to-list 'backup-directory-alist
2031              (cons "." "~/.emacs.d/backups/"))
2032 (custom-set-variables
2033  '(tramp-backup-directory-alist backup-directory-alist 6 nil (tramp)))
2034 @end group
2035 @end lisp
2037 @noindent
2038 The backup file name of
2039 @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
2040 @ifset unified
2041 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
2042 @end ifset
2043 @ifset separate
2044 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
2045 @end ifset
2047 Just as for backup files, similar issues of file naming affect
2048 auto-saving @value{tramp} files.  Auto-saved files are saved in the
2049 directory specified by the user option
2050 @option{auto-save-file-name-transforms}.  By default this is set to
2051 the local temporary directory.  But in some versions of Debian
2052 GNU/Linux, this points to the source directory where the Emacs was
2053 compiled.  Reset such values to a valid directory.
2055 Set @option{auto-save-file-name-transforms} to @code{nil} to save
2056 auto-saved files to the same directory as the original file.
2058 Alternatively, set the user option @option{tramp-auto-save-directory}
2059 to direct all auto saves to that location.
2061 @node Windows setup hints
2062 @section Issues with Cygwin ssh
2063 @cindex Cygwin, issues
2065 This section is incomplete.  Please share your solutions.
2067 @cindex method sshx with Cygwin
2068 @cindex sshx method with Cygwin
2070 Cygwin's @command{ssh} works only with a Cygwin version of Emacs.  To
2071 check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
2072 test.host}.  Incompatibilities trigger this message:
2074 @example
2075 Pseudo-terminal will not be allocated because stdin is not a terminal.
2076 @end example
2078 Some older versions of Cygwin's @command{ssh} work with the
2079 @option{sshx} access method.  Consult Cygwin's FAQ at
2080 @uref{http://cygwin.com/faq/} for details.
2082 @cindex Cygwin and fakecygpty
2083 @cindex fakecygpty and Cygwin
2085 On @uref{https://www.emacswiki.org/emacs/SshWithNTEmacs, the Emacs
2086 Wiki} it is explained how to use the helper program @code{fakecygpty}
2087 to fix this problem.
2089 @cindex method scpx with Cygwin
2090 @cindex scpx method with Cygwin
2092 When using the @option{scpx} access method, Emacs may call
2093 @command{scp} with Windows file naming, such as @code{c:/foo}.  But
2094 the version of @command{scp} that is installed with Cygwin does not
2095 know about Windows file naming, which causes it to incorrectly look
2096 for a host named @code{c}.
2098 A workaround: write a wrapper script for @option{scp} to convert
2099 Windows file names to Cygwin file names.
2101 @cindex Cygwin and ssh-agent
2102 @cindex SSH_AUTH_SOCK and Emacs on Windows
2104 When using the @command{ssh-agent} on Windows for password-less
2105 interaction, @option{ssh} methods depend on the environment variable
2106 @env{SSH_AUTH_SOCK}.  But this variable is not set when Emacs is
2107 started from a Desktop shortcut and authentication fails.
2109 One workaround is to use a Windows based SSH Agent, such as
2110 Pageant.  It is part of the Putty Suite of tools.
2112 The fallback is to start Emacs from a shell.
2115 @node Usage
2116 @chapter Using @value{tramp}
2117 @cindex using @value{tramp}
2119 @value{tramp} operates transparently, accessing remote files as if
2120 they are local.  However, @value{tramp} employs a formalized remote
2121 file naming syntax to perform its functions transparently.  This
2122 syntax consists of many parts specifying access methods,
2123 authentication, host names, and file names.  Ange FTP uses a similar
2124 syntax.
2126 @cindex type-ahead
2128 Unlike opening local files in Emacs, which are instantaneous, opening
2129 remote files in @value{tramp} is slower at first.  Sometimes there is
2130 a noticeable delay before the prompts for passwords or authentication
2131 appear in the minibuffer.  Hitting @kbd{@key{RET}} or other keys
2132 during this gap will be processed by Emacs.  This type-ahead facility
2133 is a feature of Emacs that may cause missed prompts when using
2134 @value{tramp}.
2136 @menu
2137 * File name syntax::            @value{tramp} file name conventions.
2138 @ifset unified
2139 * Change file name syntax::     Alternative file name syntax.
2140 @end ifset
2141 * File name completion::        File name completion.
2142 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
2143 * Remote processes::            Integration with other Emacs packages.
2144 * Cleanup remote connections::  Cleanup remote connections.
2145 @end menu
2148 @node File name syntax
2149 @section @value{tramp} file name conventions
2150 @cindex file name syntax
2151 @cindex file name examples
2153 @file{@trampfn{method,host,/path/to/file}} opens file @var{/path/to/file}
2154 on the remote host @var{host}, using the method @var{method}.
2156 @table @file
2157 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}.emacs
2158 For the file @file{.emacs} located in the home directory, on the host
2159 @code{melancholia}, using method @code{ssh}.
2161 @item @value{prefix}ssh@value{postfixhop}melancholia.danann.net@value{postfix}.emacs
2162 For the file @file{.emacs} specified using the fully qualified domain name of
2163 the host.
2165 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~/.emacs
2166 For the file @file{.emacs} specified using the @file{~}, which is expanded.
2168 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~daniel/.emacs
2169 For the file @file{.emacs} located in @code{daniel}'s home directory
2170 on the host, @code{melancholia}.  The @file{~<user>} construct is
2171 expanded to the home directory of that user on the remote host.
2173 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}/etc/squid.conf
2174 For the file @file{/etc/squid.conf} on the host @code{melancholia}.
2176 @end table
2178 @var{host} can take IPv4 or IPv6 address, as in
2179 @file{@trampfn{ssh,127.0.0.1,.emacs}} or
2180 @file{@trampfn{ssh,@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
2181 @ifset unified
2182 For syntactical reasons, IPv6 addresses must be embedded in square
2183 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
2184 @end ifset
2186 By default, @value{tramp} will use the current local user name as the
2187 remote user name for log in to the remote host.  Specifying a different
2188 name using the proper syntax will override this default behavior:
2190 @example
2191 @trampfn{method,user@@host,path/to/file}
2192 @end example
2194 @file{@trampfn{ssh,daniel@@melancholia,.emacs}} is for file
2195 @file{.emacs} in @code{daniel}'s home directory on the host,
2196 @code{melancholia}, accessing via method @code{ssh}.
2198 For specifying port numbers, affix @file{#<port>} to the host
2199 name.  For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
2201 All method, user name, host name, port number and local name parts are
2202 optional, @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
2203 @ifset unified
2204 For syntactical reasons, the default method must be indicated by the
2205 pseudo method @file{-}.
2206 @end ifset
2209 @ifset unified
2210 @node Change file name syntax
2211 @section Alternative file name syntax
2212 @cindex change file name syntax
2213 @cindex alternative file name syntax
2215 The syntax described in @ref{File name syntax} is the @code{default}
2216 syntax, which is active after Emacs startup.  However, this can be
2217 changed.
2219 @deffn Command tramp-change-syntax syntax
2220 This command changes the syntax @value{tramp} uses for remote file
2221 names.  Beside the @code{default} value, @var{syntax} can be
2223 @itemize
2224 @item @code{simplified}
2225 @cindex simplified syntax
2227 The remote file name syntax is similar to the syntax used by Ange FTP.
2228 A remote file name has the form
2229 @code{@value{prefix}user@@host@value{postfix}path/to/file}.  The
2230 @code{user@@} part is optional, and the method is determined by
2231 @ref{Default Method}.
2233 @item @code{separate}
2234 @cindex separate syntax
2236 @clear unified
2237 @set separate
2238 @include trampver.texi
2239 The remote file name syntax is similar to the syntax used by XEmacs.
2240 A remote file name has the form
2241 @code{@trampfn{method,user@@host,path/to/file}}.  The @code{method}
2242 and @code{user@@} parts are optional.
2243 @clear separate
2244 @set unified
2245 @include trampver.texi
2246 @end itemize
2247 @end deffn
2249 @defvar tramp-file-name-regexp
2250 This variable keeps a regexp which matches the selected remote file
2251 name syntax.  However, it is not recommended to use this variable in
2252 external packages, a call of @code{file-remote-p} is much more
2253 appropriate.
2254 @ifinfo
2255 @pxref{Magic File Names, , , elisp}
2256 @end ifinfo
2257 @end defvar
2258 @end ifset
2261 @node File name completion
2262 @section File name completion
2263 @cindex file name completion
2265 @value{tramp} can complete the following @value{tramp} file name
2266 components: method names, user names, host names, and file names
2267 located on remote hosts.  Enable this by activating partial completion
2268 in @file{.emacs}.
2269 @ifinfo
2270 @xref{Completion Options, , , emacs}.
2271 @end ifinfo
2273 For example, type @kbd{C-x C-f @value{prefix}s @key{TAB}},
2274 @value{tramp} completion choices show up as
2276 @example
2277 @group
2278 @multitable @columnfractions .2 .2 .2 .2 .2
2279 @item @c
2280   sbin/ @tab @c
2281   @value{prefixhop}scp@value{postfix} @tab @c
2282   @value{prefixhop}scpx@value{postfix} @tab @c
2283   @value{prefixhop}sftp@value{postfix} @tab @c
2284   @value{prefixhop}sg@value{postfix}
2285 @item @c
2286   @value{prefixhop}smb@value{postfix} @tab @c
2287   srv/ @tab @c
2288   @value{prefixhop}ssh@value{postfix} @tab @c
2289   @value{prefixhop}sshx@value{postfix} @tab @c
2290   @value{prefixhop}su@value{postfix}
2291 @item @c
2292   @value{prefixhop}sudo@value{postfix} @tab @c
2293   sys/
2294 @end multitable
2295 @end group
2296 @end example
2298 @samp{@value{prefixhop}ssh@value{postfixhop}} is a possible
2299 completion for the respective method, and @samp{sbin/} stands for the
2300 directory @file{/sbin} on your local host.
2302 Type @kbd{s h @value{postfixhop}} for the minibuffer completion to
2303 @samp{@value{prefix}ssh@value{postfixhop}}.  Typing @kbd{@key{TAB}}
2304 shows host names @value{tramp} extracts from @file{~/.ssh/config}
2305 file, for example.
2307 @example
2308 @group
2309 @multitable @columnfractions .5 .5
2310 @item @c
2311   @value{prefixhop}ssh@value{postfixhop}127.0.0.1@value{postfix} @tab @c
2312   @value{prefixhop}ssh@value{postfixhop}192.168.0.1@value{postfix}
2313 @item @c
2314   @value{prefixhop}ssh@value{postfixhop}@value{ipv6prefix}::1@value{ipv6postfix}@value{postfix} @tab @c
2315   @value{prefixhop}ssh@value{postfixhop}localhost@value{postfix}
2316 @item @c
2317   @value{prefixhop}ssh@value{postfixhop}melancholia.danann.net@value{postfix} @tab @c
2318   @value{prefixhop}ssh@value{postfixhop}melancholia@value{postfix}
2319 @end multitable
2320 @end group
2321 @end example
2323 Choose a host from the above list and then continue to complete file
2324 names on that host.
2326 When the configuration (@pxref{Customizing Completion}) includes user
2327 names, then the completion lists will account for the user names as well.
2329 Remote hosts previously visited or hosts whose connections are kept
2330 persistently (@pxref{Connection caching}) will be included in the
2331 completion lists.
2333 After remote host name completion comes completion of file names on
2334 the remote host.  It works the same as with local host file completion
2335 except that killing with double-slash @file{//} kills only the file
2336 name part of the @value{tramp} file name syntax.  A triple-slash
2337 stands for the default behavior.
2338 @ifinfo
2339 @xref{Minibuffer File, , , emacs}.
2340 @end ifinfo
2342 @noindent
2343 Example:
2345 @example
2346 @group
2347 @kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin//etc} @key{TAB}}
2348      @print{} @trampfn{ssh,melancholia,/etc}
2350 @kbd{C-x C-f @trampfn{ssh,melancholia,//etc} @key{TAB}}
2351      @print{} /etc
2353 @kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin///etc} @key{TAB}}
2354      @print{} /etc
2355 @end group
2356 @end example
2358 During file name completion, remote directory contents are re-read
2359 regularly to account for any changes in the filesystem that may affect
2360 the completion candidates.  Such re-reads can account for changes to
2361 the file system by applications outside Emacs (@pxref{Connection
2362 caching}).
2364 @defopt tramp-completion-reread-directory-timeout
2365 The timeout is number of seconds since last remote command for
2366 rereading remote directory contents.  A value of 0 re-reads
2367 immediately during file name completion, @code{nil} uses cached
2368 directory contents.
2369 @end defopt
2372 @node Ad-hoc multi-hops
2373 @section Declaring multiple hops in the file name
2374 @cindex multi-hop, ad-hoc
2375 @cindex proxy hosts, ad-hoc
2377 @value{tramp} file name syntax can accommodate ad hoc specification of
2378 multiple proxies without using @option{tramp-default-proxies-alist}
2379 configuration setup(@pxref{Multi-hops}).
2381 Each proxy is specified using the same syntax as the remote host
2382 specification minus the file name part.  Each hop is separated by a
2383 @samp{|}.  Chain the proxies from the starting host to the destination
2384 remote host name and file name.  For example, hopping over a single
2385 proxy @samp{bird@@bastion} to a remote file on @samp{you@@remotehost}:
2387 @example
2388 @c @kbd{C-x C-f @trampfn{ssh@value{postfixhop}bird@@bastion|ssh,you,remotehost,/path}}
2389 @kbd{C-x C-f @value{prefix}ssh@value{postfixhop}bird@@bastion|ssh@value{postfixhop}you@@remotehost@value{postfix}/path}
2390 @end example
2392 Proxies can take patterns @code{%h} or @code{%u}.
2394 @value{tramp} adds the ad-hoc definitions on the fly to
2395 @option{tramp-default-proxies-alist} and is available for re-use
2396 during that Emacs session.  Subsequent @value{tramp} connections to
2397 the same remote host can then use the shortcut form:
2398 @samp{@trampfn{ssh,you@@remotehost,/path}}.
2400 @defopt tramp-save-ad-hoc-proxies
2401 For ad-hoc definitions to be saved automatically in
2402 @option{tramp-default-proxies-alist} for future Emacs sessions, set
2403 @option{tramp-save-ad-hoc-proxies} to non-@code{nil}.
2405 @lisp
2406 (custom-set-variables '(tramp-save-ad-hoc-proxies t nil (tramp)))
2407 @end lisp
2408 @end defopt
2411 @node Remote processes
2412 @section Integration with other Emacs packages
2413 @cindex compile
2414 @cindex recompile
2416 @value{tramp} supports starting new running processes on the remote
2417 host for discovering remote file names.  Emacs packages on the remote
2418 host need no specific modifications for @value{tramp}'s use.
2420 This type of integration does not work with the @option{ftp} method,
2421 and does not support the pty association as specified in
2422 @code{start-file-process}.
2424 @code{process-file} and @code{start-file-process} work on the remote
2425 host when the variable @code{default-directory} is remote:
2427 @lisp
2428 @group
2429 (let ((default-directory "/ssh:remote.host:"))
2430   (start-file-process "grep" (get-buffer-create "*grep*")
2431                       "/bin/sh" "-c" "grep -e tramp *"))
2432 @end group
2433 @end lisp
2435 Remote processes do not apply to GVFS (see @ref{GVFS based methods})
2436 because the remote file system is mounted on the local host and
2437 @value{tramp} just accesses by changing the @code{default-directory}.
2439 @value{tramp} starts a remote process when a command is executed in a
2440 remote file or directory buffer.  As of now, these packages have been
2441 integrated to work with @value{tramp}: @file{compile.el} (commands
2442 like @code{compile} and @code{grep}) and @file{gud.el} (@code{gdb} or
2443 @code{perldb}).
2445 For @value{tramp} to find the command on the remote, it must be
2446 accessible through the default search path as setup by @value{tramp}
2447 upon first connection.  Alternatively, use an absolute path or extend
2448 @option{tramp-remote-path} (see @ref{Remote programs}):
2450 @lisp
2451 @group
2452 (add-to-list 'tramp-remote-path "~/bin")
2453 (add-to-list 'tramp-remote-path "/appli/pub/bin")
2454 @end group
2455 @end lisp
2457 Customize user option @option{tramp-remote-process-environment} to
2458 suit the remote program's environment for the remote host.
2459 @option{tramp-remote-process-environment} is a list of strings
2460 structured similar to @code{process-environment}, where each element
2461 is a string of the form @samp{ENVVARNAME=VALUE}.
2463 To avoid any conflicts with local host environment variables set
2464 through local configuration files, such as @file{~/.profile}, use
2465 @samp{ENVVARNAME=} to unset them for the remote environment.
2467 @noindent
2468 Use @code{add-to-list} to add entries:
2470 @lisp
2471 (add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
2472 @end lisp
2474 Modifying or deleting already existing values in the
2475 @option{tramp-remote-process-environment} list may not be feasible on
2476 restricted remote hosts.  For example, some system administrators
2477 disallow changing @env{HISTORY} environment variable.  To accommodate
2478 such restrictions when using @value{tramp}, fix the
2479 @option{tramp-remote-process-environment} by the following code in the
2480 local @file{.emacs} file:
2482 @lisp
2483 @group
2484 (let ((process-environment tramp-remote-process-environment))
2485   (setenv "HISTORY" nil)
2486   (setq tramp-remote-process-environment process-environment))
2487 @end group
2488 @end lisp
2490 Setting the @env{ENV} environment variable instructs some shells to
2491 read an initialization file.  Per default, @value{tramp} has disabled
2492 this.  You could overwrite this behavior by evaluating
2494 @lisp
2495 @group
2496 (let ((process-environment tramp-remote-process-environment))
2497   (setenv "ENV" "$HOME/.profile")
2498   (setq tramp-remote-process-environment process-environment))
2499 @end group
2500 @end lisp
2502 @value{tramp} does not use the defaults specified in
2503 @code{process-environment} for running @code{process-file} or
2504 @code{start-file-process} on remote hosts.  When values from
2505 @code{process-environment} are needed for remote processes, then set
2506 them as follows:
2508 @lisp
2509 @group
2510 (let ((process-environment (cons "HGPLAIN=1" process-environment)))
2511   (process-file @dots{}))
2512 @end group
2513 @end lisp
2515 This works only for environment variables not already set in the
2516 @code{process-environment}.
2518 For integrating other Emacs packages so @value{tramp} can execute
2519 remotely, please file a bug report.  @xref{Bug Reports}.
2522 @subsection Running remote programs that create local X11 windows
2524 To allow a remote program to create an X11 window on the local host,
2525 set the @env{DISPLAY} environment variable for the remote host as
2526 follows in the local @file{.emacs} file:
2528 @lisp
2529 @group
2530 (add-to-list 'tramp-remote-process-environment
2531              (format "DISPLAY=%s" (getenv "DISPLAY")))
2532 @end group
2533 @end lisp
2535 @noindent
2536 @code{(getenv "DISPLAY")} should return a recognizable name for the
2537 local host that the remote host can redirect X11 window
2538 interactions.  If querying for a recognizable name is not possible for
2539 whatever reason, then replace @code{(getenv "DISPLAY")} with a
2540 hard-coded, fixed name.  Note that using @code{:0} for X11 display name
2541 here will not work as expected.
2543 An alternate approach is specify @code{ForwardX11 yes} or
2544 @code{ForwardX11Trusted yes} in the file @file{~/.ssh/config} on the
2545 local host.
2548 @subsection Running @code{shell} on a remote host
2549 @cindex shell
2551 Set @option{explicit-shell-file-name} to the appropriate shell name
2552 when using @value{tramp} between two hosts with different operating
2553 systems, such as @samp{windows-nt} and @samp{gnu/linux}.  This option
2554 ensures the correct name of the remote shell program.
2556 Starting with Emacs 24, when @option{explicit-shell-file-name} is
2557 equal to @code{nil}, calling @code{shell} interactively will prompt
2558 for a shell name.
2560 Starting with Emacs 26, you could use connection-local variables for
2561 setting different values of @option{explicit-shell-file-name} for
2562 different remote hosts.
2563 @ifinfo
2564 @pxref{Connection Local Variables, , , elisp}
2565 @end ifinfo
2567 @lisp
2568 @group
2569 (connection-local-set-profile-variables
2570   'remote-bash
2571   '((explicit-shell-file-name . "/bin/bash")
2572     (explicit-bash-args . ("-i"))))
2573 @end group
2575 @group
2576 (connection-local-set-profile-variables
2577   'remote-ksh
2578   '((explicit-shell-file-name . "/bin/ksh")
2579     (explicit-ksh-args . ("-i"))))
2580 @end group
2582 @group
2583 (connection-local-set-profiles
2584   '(:application tramp :protocol "ssh" :machine "localhost")
2585   'remote-bash)
2586 @end group
2588 @group
2589 (connection-local-set-profiles
2590   `(:application tramp :protocol "sudo"
2591     :user "root" :machine ,(system-name))
2592   'remote-ksh)
2593 @end group
2594 @end lisp
2597 @subsection Running @code{shell-command} on a remote host
2598 @cindex shell-command
2600 @code{shell-command} executes commands synchronously or asynchronously
2601 on remote hosts and displays output in buffers on the local
2602 host.  Example:
2604 @example
2605 @group
2606 @kbd{C-x C-f @trampfn{sudo,,} @key{RET}}
2607 @kbd{M-! tail -f /var/log/syslog.log & @key{RET}}
2608 @end group
2609 @end example
2611 @command{tail} command outputs continuously to the local buffer,
2612 @file{*Async Shell Command*}
2614 @kbd{M-x auto-revert-tail-mode} runs similarly showing continuous output.
2617 @subsection Running @code{eshell} on a remote host
2618 @cindex eshell
2620 @value{tramp} is integrated into @file{eshell.el}, which enables
2621 interactive eshell sessions on remote hosts at the command prompt.
2622 You must add the module @code{em-tramp} to @code{eshell-modules-list}.
2623 Here's a sample interaction after opening @kbd{M-x eshell} on a remote
2624 host:
2626 @example
2627 @group
2628 @b{~ $} cd @trampfn{sudo,,/etc} @key{RET}
2629 @b{@trampfn{sudo,root@@host,/etc} $} hostname @key{RET}
2630 host
2631 @b{@trampfn{sudo,root@@host,/etc} $} id @key{RET}
2632 uid=0(root) gid=0(root) groups=0(root)
2633 @b{@trampfn{sudo,root@@host,/etc} $} find-file shadow @key{RET}
2634 #<buffer shadow>
2635 @b{@trampfn{sudo,root@@host,/etc} $}
2636 @end group
2637 @end example
2639 @code{eshell} added custom @code{su} and @code{sudo} commands that set
2640 the default directory correctly for the @file{*eshell*} buffer.
2641 @value{tramp} silently updates @option{tramp-default-proxies-alist}
2642 with an entry for this directory (@pxref{Multi-hops}):
2644 @example
2645 @group
2646 @b{~ $} cd @trampfn{ssh,user@@remotehost,/etc} @key{RET}
2647 @b{@trampfn{ssh,user@@remotehost,/etc} $} find-file shadow @key{RET}
2648 File is not readable: @trampfn{ssh,user@@remotehost,/etc/shadow}
2649 @b{@trampfn{ssh,user@@remotehost,/etc} $} sudo find-file shadow @key{RET}
2650 #<buffer shadow>
2651 @end group
2653 @group
2654 @b{@trampfn{ssh,user@@remotehost,/etc} $} su - @key{RET}
2655 @b{@trampfn{su,root@@remotehost,/root} $} id @key{RET}
2656 uid=0(root) gid=0(root) groups=0(root)
2657 @b{@trampfn{su,root@@remotehost,/root} $}
2658 @end group
2659 @end example
2662 @anchor{Running a debugger on a remote host}
2663 @subsection Running a debugger on a remote host
2664 @cindex gud
2665 @cindex gdb
2666 @cindex perldb
2668 @file{gud.el} provides a unified interface to symbolic debuggers
2669 @ifinfo
2670 (@ref{Debuggers, , , emacs}).
2671 @end ifinfo
2672 @value{tramp} can run debug on remote hosts by calling @code{gdb}
2673 with a remote file name:
2675 @example
2676 @group
2677 @kbd{M-x gdb @key{RET}}
2678 @b{Run gdb (like this):} gdb -i=mi @trampfn{ssh,host,~/myprog} @key{RET}
2679 @end group
2680 @end example
2682 Since the remote @code{gdb} and @code{gdb-inferior} processes do not
2683 belong to the same process group on the remote host, there will be a
2684 warning, which can be ignored:
2686 @example
2687 &"warning: GDB: Failed to set controlling terminal: Operation not permitted\n"
2688 @end example
2690 Relative file names are based on the remote default directory.  When
2691 @file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
2692 calls include:
2694 @example
2695 @group
2696 @kbd{M-x perldb @key{RET}}
2697 @b{Run perldb (like this):} perl -d myprog.pl @key{RET}
2698 @end group
2699 @end example
2701 Just the local part of a remote file name, such as @kbd{perl -d
2702 /home/user/myprog.pl}, is not possible.
2704 Arguments of the program to be debugged must be literal, can take
2705 relative or absolute paths, but not remote paths.
2708 @subsection Running remote processes on Windows hosts
2709 @cindex winexe
2710 @cindex powershell
2712 @command{winexe} runs processes on a remote Windows host, and
2713 @value{tramp} can use it for @code{process-file} and
2714 @code{start-file-process}.
2716 @code{tramp-smb-winexe-program} specifies the local @command{winexe}
2717 command.  Powershell V2.0 on the remote host is required to run
2718 processes triggered from @value{tramp}.
2720 @option{explicit-shell-file-name} and @option{explicit-*-args} have to
2721 be set properly so @kbd{M-x shell} can open a proper remote shell on a
2722 Windows host.  To open @command{cmd}, set it as follows:
2724 @lisp
2725 @group
2726 (setq explicit-shell-file-name "cmd"
2727       explicit-cmd-args '("/q"))
2728 @end group
2729 @end lisp
2731 @noindent
2732 To open @command{powershell} as a remote shell, use this:
2734 @lisp
2735 @group
2736 (setq explicit-shell-file-name "powershell"
2737       explicit-powershell-args '("-file" "-"))
2738 @end group
2739 @end lisp
2742 @node Cleanup remote connections
2743 @section Cleanup remote connections
2744 @cindex cleanup
2746 @value{tramp} provides several ways to flush remote connections.
2748 @deffn Command tramp-cleanup-connection vec
2749 This command flushes all connection related objects.  @option{vec} is
2750 the internal representation of a remote connection.  When called
2751 interactively, this command lists active remote connections in the
2752 minibuffer.  Each connection is of the format
2753 @file{@trampfn{method,user@@host,}}.  Flushing remote connections also
2754 cleans the password cache (@pxref{Password handling}), file cache,
2755 connection cache (@pxref{Connection caching}), and connection buffers.
2756 @end deffn
2758 @deffn Command tramp-cleanup-this-connection
2759 Flushes only the current buffer's remote connection objects, the same
2760 as in @code{tramp-cleanup-connection}.
2761 @end deffn
2763 @deffn Command tramp-cleanup-all-connections
2764 Flushes all active remote connection objects, the same as in
2765 @code{tramp-cleanup-connection}.
2766 @end deffn
2768 @deffn Command tramp-cleanup-all-buffers
2769 Just as for @code{tramp-cleanup-all-connections}, all remote
2770 connections are cleaned up in addition to killing buffers related to
2771 that remote connection.
2772 @end deffn
2775 @node Bug Reports
2776 @chapter Reporting Bugs and Problems
2777 @cindex bug reports
2779 @value{tramp}'s development team is actively engaged in solving bugs
2780 and problems and looks to feature requests and suggestions.
2782 @value{tramp}'s mailing list is the place for more advice and
2783 information on working with @value{tramp}, solving problems,
2784 discussing, and general discussions about @value{tramp}.
2786 @value{tramp}'s mailing list is moderated but even non-subscribers can
2787 post for moderator approval.  Sometimes this approval step may take as
2788 long as 48 hours due to public holidays.
2790 @email{tramp-devel@@gnu.org} is the mailing list.  Messages sent to
2791 this address go to all the subscribers.  This is @emph{not} the
2792 address to send subscription requests to.
2794 To subscribe to the mailing list, visit:
2795 @uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/, the
2796 @value{tramp} Mail Subscription Page}.
2798 @ifset installchapter
2799 Before sending a bug report, run the test suite first @ref{Testing}.
2800 @end ifset
2802 @findex tramp-bug
2803 Check if the bug or problem is already addressed in @xref{Frequently
2804 Asked Questions}.
2806 Run @kbd{M-x tramp-bug} to generate a buffer with details of the
2807 system along with the details of the @value{tramp}
2808 installation.  Please include these details with the bug report.
2810 The bug report must describe in as excruciating detail as possible the
2811 steps required to reproduce the problem.  These details must include
2812 the setup of the remote host and any special or unique conditions that
2813 exist.
2815 Include a minimal test case that reproduces the problem.  This will
2816 help the development team find the best solution and avoid unrelated
2817 detours.
2819 To exclude cache-related problems, flush all caches before running the
2820 test, @ref{Cleanup remote connections}.
2822 When including @value{tramp}'s messages in the bug report, increase
2823 the verbosity level to 6 (@pxref{Traces and Profiles, Traces}) in the
2824 @file{~/.emacs} file before repeating steps to the bug.  Include the
2825 contents of the @file{*tramp/foo*} and @file{*debug tramp/foo*}
2826 buffers with the bug report.
2828 @strong{Note} that a verbosity level greater than 6 is not necessary
2829 at this stage.  Also note that a verbosity level of 6 or greater, the
2830 contents of files and directories will be included in the debug
2831 buffer.  Passwords typed in @value{tramp} will never be included
2832 there.
2835 @node Frequently Asked Questions
2836 @chapter Frequently Asked Questions
2837 @cindex frequently asked questions
2838 @cindex FAQ
2840 @itemize @bullet
2841 @item
2842 Where is the latest @value{tramp}?
2844 @value{tramp} is available at the GNU URL:
2846 @noindent
2847 @uref{ftp://ftp.gnu.org/gnu/tramp/}
2849 @noindent
2850 @value{tramp}'s GNU project page is located here:
2852 @noindent
2853 @uref{http://savannah.gnu.org/projects/tramp/}
2856 @item
2857 Which systems does it work on?
2859 The package works successfully on Emacs 23, Emacs 24, Emacs 25, and
2860 Emacs 26.
2862 While Unix and Unix-like systems are the primary remote targets,
2863 @value{tramp} has equal success connecting to other platforms, such as
2864 MS Windows 7/8/10.
2867 @item
2868 How to speed up @value{tramp}?
2870 @value{tramp} does many things in the background, some of which
2871 depends on network speeds, response speeds of remote hosts, and
2872 authentication delays.  During these operations, @value{tramp}'s
2873 responsiveness slows down.  Some suggestions within the scope of
2874 @value{tramp}'s settings include:
2876 Use an external method, such as @option{scp}, which are faster than
2877 internal methods.
2879 Keep the file @option{tramp-persistency-file-name}, which is where
2880 @value{tramp} caches remote information about hosts and files.  Caching
2881 is enabled by default.  Don't disable it.
2883 Set @code{remote-file-name-inhibit-cache} to @code{nil} if remote
2884 files are not independently updated outside @value{tramp}'s control.
2885 That cache cleanup will be necessary if the remote directories or
2886 files are updated independent of @value{tramp}.
2888 Set @option{tramp-completion-reread-directory-timeout} to @code{nil} to
2889 speed up completions, @ref{File name completion}.
2891 Disable version control to avoid delays:
2893 @lisp
2894 @group
2895 (setq vc-ignore-dir-regexp
2896       (format "\\(%s\\)\\|\\(%s\\)"
2897               vc-ignore-dir-regexp
2898               tramp-file-name-regexp))
2899 @end group
2900 @end lisp
2902 Disable excessive traces.  Set @code{tramp-verbose} to 3 or lower,
2903 default being 3.  Increase trace levels temporarily when hunting for
2904 bugs.
2906 @item
2907 @value{tramp} does not connect to the remote host
2909 Three main reasons for why @value{tramp} does not connect to the remote host:
2911 @itemize @minus
2912 @item
2913 Unknown characters in the prompt
2915 @value{tramp} needs a clean recognizable prompt on the remote host for
2916 accurate parsing.  Shell prompts that contain escape sequences for
2917 coloring cause parsing problems.  @ref{Remote shell setup} for
2918 customizing prompt detection using regular expressions.
2920 To check if the remote host's prompt is being recognized, use this
2921 test: switch to @value{tramp} connection buffer @file{*tramp/foo*},
2922 put the cursor at the top of the buffer, and then apply the following
2923 expression:
2925 @example
2926 @kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
2927 @end example
2929 If the cursor has not moved to the prompt at the bottom of the buffer,
2930 then @value{tramp} has failed to recognize the prompt.
2932 When using zsh on remote hosts, disable zsh line editor because zsh
2933 uses left-hand side and right-hand side prompts in parallel.  Add the
2934 following line to @file{~/.zshrc}:
2936 @example
2937 [ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
2938 @end example
2940 When using fish shell on remote hosts, disable fancy formatting by
2941 adding the following to @file{~/.config/fish/config.fish}:
2943 @example
2944 @group
2945 function fish_prompt
2946   if test $TERM = "dumb"
2947      echo "\$ "
2948   else
2949      @dots{}
2950   end
2952 @end group
2953 @end example
2955 When using WinSSHD on remote hosts, @value{tramp} does not recognize
2956 the strange prompt settings.
2958 A similar problem exist with the iTerm2 shell integration, which sends
2959 proprietary escape codes when starting a shell.  This can be
2960 suppressed by changing the respective integration snippet in your
2961 @file{~/.profile} like this:
2963 @example
2964 @group
2965 [ $TERM = "dumb" ] || \
2966 test -e "$@{HOME@}/.iterm2_shell_integration.bash" && \
2967 source "$@{HOME@}/.iterm2_shell_integration.bash"
2968 @end group
2969 @end example
2971 @item
2972 Echoed characters after login
2974 @value{tramp} suppresses echos from remote hosts with the
2975 @command{stty -echo} command.  But sometimes it is too late to suppress
2976 welcome messages from the remote host containing harmful control
2977 characters.  Using @option{sshx} or @option{scpx} methods can avoid
2978 this problem because they allocate a pseudo tty.  @xref{Inline
2979 methods}.
2981 @item
2982 @value{tramp} stops transferring strings longer than 500 characters
2984 Set @code{tramp-chunksize} to 500 to get around this problem, which is
2985 related to faulty implementation of @code{process-send-string} on
2986 HP-UX, FreeBSD and Tru64 Unix systems.  Consult the documentation for
2987 @code{tramp-chunksize} to see when this is necessary.
2989 Set @code{file-precious-flag} to @code{t} for files accessed by
2990 @value{tramp} so the file contents are checked using checksum by
2991 first saving to a temporary file.
2992 @ifinfo
2993 @pxref{Saving Buffers, , , elisp}
2994 @end ifinfo
2996 @lisp
2997 @group
2998 (add-hook
2999  'find-file-hook
3000  (lambda ()
3001    (when (file-remote-p default-directory)
3002      (set (make-local-variable 'file-precious-flag) t))))
3003 @end group
3004 @end lisp
3005 @end itemize
3008 @item
3009 @value{tramp} does not recognize if a @command{ssh} session hangs
3011 @command{ssh} sessions on the local host hang when the network is
3012 down.  @value{tramp} cannot safely detect such hangs.  The network
3013 configuration for @command{ssh} can be configured to kill such hangs
3014 with the following command in the @file{~/.ssh/config}:
3016 @example
3017 @group
3018 Host *
3019      ServerAliveInterval 5
3020 @end group
3021 @end example
3024 @item
3025 @value{tramp} does not use default @command{ssh} @code{ControlPath}
3027 @value{tramp} overwrites @code{ControlPath} settings when initiating
3028 @command{ssh} sessions.  @value{tramp} does this to fend off a stall
3029 if a master session opened outside the Emacs session is no longer
3030 open.  That is why @value{tramp} prompts for the password again even
3031 if there is an @command{ssh} already open.
3033 @vindex tramp-ssh-controlmaster-options
3034 Some @command{ssh} versions support a @code{ControlPersist} option,
3035 which allows you to set the @code{ControlPath} provided the variable
3036 @code{tramp-ssh-controlmaster-options} is customized as follows:
3038 @lisp
3039 @group
3040 (setq tramp-ssh-controlmaster-options
3041       (concat
3042         "-o ControlPath=/tmp/ssh-ControlPath-%%r@@%%h:%%p "
3043         "-o ControlMaster=auto -o ControlPersist=yes"))
3044 @end group
3045 @end lisp
3047 Note how "%r", "%h" and "%p" must be encoded as "%%r", "%%h" and
3048 "%%p".
3050 @vindex tramp-use-ssh-controlmaster-options
3051 If the @file{~/.ssh/config} is configured appropriately for the above
3052 behavior, then any changes to @command{ssh} can be suppressed with
3053 this @code{nil} setting:
3055 @lisp
3056 @group
3057 (custom-set-variables
3058  '(tramp-use-ssh-controlmaster-options nil nil (tramp)))
3059 @end group
3060 @end lisp
3063 @item
3064 File name completion does not work with @value{tramp}
3066 @acronym{ANSI} escape sequences from the remote shell may cause errors
3067 in @value{tramp}'s parsing of remote buffers.
3069 To test if this is the case, open a remote shell and check if the output
3070 of @command{ls} is in color.
3072 To disable @acronym{ANSI} escape sequences from the remote hosts,
3073 disable @samp{--color=yes} or @samp{--color=auto} in the remote host's
3074 @file{.bashrc} or @file{.profile}.  Turn this alias on and off to see
3075 if file name completion works.
3077 @item
3078 File name completion does not work in directories with large number of
3079 files
3081 This may be related to globbing, which is the use of shell's ability
3082 to expand wild card specifications, such as @samp{*.c}.  For
3083 directories with large number of files, globbing might exceed the
3084 shell's limit on length of command lines and hang.  @value{tramp} uses
3085 globbing.
3087 To test if globbing hangs, open a shell on the remote host and then
3088 run @command{ls -d * ..?* > /dev/null}.
3090 When testing, ensure the remote shell is the same shell
3091 (@command{/bin/sh}, @command{ksh} or @command{bash}), that
3092 @value{tramp} uses when connecting to that host.
3095 @item
3096 How to get notified after @value{tramp} completes file transfers?
3098 Make Emacs beep after reading from or writing to the remote host with
3099 the following code in @file{~/.emacs} file.
3101 @lisp
3102 @group
3103 (defadvice tramp-handle-write-region
3104   (after tramp-write-beep-advice activate)
3105   "Make tramp beep after writing a file."
3106   (interactive)
3107   (beep))
3108 @end group
3110 @group
3111 (defadvice tramp-handle-do-copy-or-rename-file
3112   (after tramp-copy-beep-advice activate)
3113   "Make tramp beep after copying a file."
3114   (interactive)
3115   (beep))
3116 @end group
3118 @group
3119 (defadvice tramp-handle-insert-file-contents
3120   (after tramp-insert-beep-advice activate)
3121   "Make tramp beep after inserting a file."
3122   (interactive)
3123   (beep))
3124 @end group
3125 @end lisp
3128 @item
3129 How to get a Visual Warning when working with @samp{root} privileges?
3130 Host indication in the mode line?
3132 Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
3133 Enable it via @kbd{M-x load-theme @key{RET} tramp}.  Further
3134 customization is explained in user option
3135 @option{tramp-theme-face-remapping-alist}.
3138 @item
3139 Remote host does not understand default options for directory listing
3141 Emacs computes the @command{dired} options based on the local host but
3142 if the remote host cannot understand the same @command{ls} command,
3143 then set them with a hook as follows:
3145 @lisp
3146 @group
3147 (add-hook
3148  'dired-before-readin-hook
3149  (lambda ()
3150    (when (file-remote-p default-directory)
3151      (setq dired-actual-switches "-al"))))
3152 @end group
3153 @end lisp
3156 @item
3157 Why is @file{~/.sh_history} file on the remote host growing?
3159 Due to @command{ksh} saving tilde expansions triggered by
3160 @value{tramp}, the history file is probably growing rapidly.  To fix,
3161 turn off saving history by putting this shell code in the
3162 @file{.kshrc} file:
3164 @example
3165 @group
3166 if [ -f $HOME/.sh_history ] ; then
3167    /bin/rm $HOME/.sh_history
3169 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
3170    unset HISTFILE
3172 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
3173    unset HISTSIZE
3175 @end group
3176 @end example
3178 For @option{ssh}-based method, add the following line to your
3179 @file{~/.ssh/environment} file:
3181 @example
3182 HISTFILE=/dev/null
3183 @end example
3186 @item
3187 How to shorten long file names when typing in @value{tramp}?
3189 Adapt several of these approaches to reduce typing.  If the full name
3190 is @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, then:
3192 @enumerate
3194 @item
3195 Use default values for method name and user name:
3197 You can define default methods and user names for hosts,
3198 (@pxref{Default Method}, @pxref{Default User}):
3200 @lisp
3201 @group
3202 (custom-set-variables
3203  '(tramp-default-method "ssh" nil (tramp))
3204  '(tramp-default-user "news" nil (tramp)))
3205 @end group
3206 @end lisp
3208 The reduced typing: @kbd{C-x C-f @trampfn{-,news.my.domain,/opt/news/etc}}.
3210 @strong{Note} that there are some useful shortcuts already.  Accessing
3211 your local host as @samp{root} user, is possible just by @kbd{C-x C-f
3212 @trampfn{su,,}}.
3214 @item
3215 Use configuration options of the access method:
3217 Programs used for access methods already offer powerful configurations
3218 (@pxref{Customizing Completion}).  For @option{ssh}, configure the
3219 file @file{~/.ssh/config}:
3221 @example
3222 @group
3223 Host xy
3224      HostName news.my.domain
3225      User news
3226 @end group
3227 @end example
3229 The reduced typing: @kbd{C-x C-f @trampfn{ssh,xy,/opt/news/etc}}.
3231 Depending on the number of files in the directories, host names
3232 completion can further reduce key strokes: @kbd{C-x C-f
3233 @value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3235 @item
3236 Use environment variables to expand long strings
3238 For long file names, set up environment variables that are expanded in
3239 the minibuffer.  Environment variables are set either outside Emacs or
3240 inside Emacs with Lisp:
3242 @lisp
3243 (setenv "xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")
3244 @end lisp
3246 The reduced typing: @kbd{C-x C-f $xy @key{RET}}.
3248 @strong{Note} that file name cannot be edited here because the
3249 environment variables are not expanded during editing in the
3250 minibuffer.
3252 @item Define own keys:
3254 Redefine another key sequence in Emacs for @kbd{C-x C-f}:
3256 @lisp
3257 @group
3258 (global-set-key
3259  [(control x) (control y)]
3260  (lambda ()
3261    (interactive)
3262    (find-file
3263     (read-file-name
3264      "Find Tramp file: "
3265      "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))))
3266 @end group
3267 @end lisp
3269 Simply typing @kbd{C-x C-y} would prepare minibuffer editing of file
3270 name.
3272 See @uref{https://www.emacswiki.org/emacs/TrampMode, the Emacs Wiki}
3273 for a more comprehensive example.
3275 @item
3276 Define own abbreviation (1):
3278 Abbreviation list expansion can be used to reduce typing long file names:
3280 @lisp
3281 @group
3282 (add-to-list
3283  'directory-abbrev-alist
3284  '("^/xy" . "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3285 @end group
3286 @end lisp
3288 The reduced typing: @kbd{C-x C-f /xy @key{RET}}.
3290 @strong{Note} that file name cannot be edited here because the
3291 environment variables are not expanded during editing in the
3292 minibuffer.
3294 @item
3295 Define own abbreviation (2):
3297 The @code{abbrev-mode} gives additional flexibility for editing in the
3298 minibuffer:
3300 @lisp
3301 @group
3302 (define-abbrev-table 'my-tramp-abbrev-table
3303   '(("xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")))
3304 @end group
3306 @group
3307 (add-hook
3308  'minibuffer-setup-hook
3309  (lambda ()
3310    (abbrev-mode 1)
3311    (setq local-abbrev-table my-tramp-abbrev-table)))
3312 @end group
3314 @group
3315 (defadvice minibuffer-complete
3316   (before my-minibuffer-complete activate)
3317   (expand-abbrev))
3318 @end group
3320 @group
3321 ;; If you use partial-completion-mode
3322 (defadvice PC-do-completion
3323   (before my-PC-do-completion activate)
3324   (expand-abbrev))
3325 @end group
3326 @end lisp
3328 The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
3330 The minibuffer expands for further editing.
3332 @item Use bookmarks:
3334 Use bookmarks to save Tramp file names.
3335 @ifinfo
3336 @pxref{Bookmarks, , , emacs}.
3337 @end ifinfo
3339 Upon visiting a location with @value{tramp}, save it as a bookmark with
3340 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3342 To revisit that bookmark:
3343 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3345 @item Use recent files:
3347 @file{recentf} remembers visited places.
3348 @ifinfo
3349 @pxref{File Conveniences, , , emacs}.
3350 @end ifinfo
3352 Keep remote file names in the recent list without have to check for
3353 their accessibility through remote access:
3355 @lisp
3356 (recentf-mode 1)
3357 @end lisp
3359 Reaching recently opened files: @kbd{@key{menu-bar} @key{file}
3360 @key{Open Recent}}.
3362 @item Use filecache:
3364 Since @file{filecache} remembers visited places, add the remote
3365 directory to the cache:
3367 @lisp
3368 @group
3369 @c `with-eval-after-load' has been introduced with Emacs 24.4.  Shall
3370 @c be used when appropriate.
3371 (eval-after-load "filecache"
3372   '(file-cache-add-directory
3373     "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3374 @end group
3375 @end lisp
3377 Then use directory completion in the minibuffer with @kbd{C-x C-f
3378 C-@key{TAB}}.
3380 @item Use bbdb:
3382 @file{bbdb} has a built-in feature for Ange FTP files, which also
3383 works for @value{tramp} file names.
3384 @ifinfo
3385 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}.
3386 @end ifinfo
3388 Load @file{bbdb} in Emacs:
3390 @lisp
3391 @group
3392 (require 'bbdb)
3393 (bbdb-initialize)
3394 @end group
3395 @end lisp
3397 Create a BBDB entry with @kbd{M-x bbdb-create-ftp-site}.  Then specify
3398 a method and user name where needed.  Examples:
3400 @example
3401 @group
3402 @kbd{M-x bbdb-create-ftp-site @key{RET}}
3403 @b{Ftp Site:} news.my.domain @key{RET}
3404 @b{Ftp Directory:} /opt/news/etc/ @key{RET}
3405 @b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3406 @b{Company:} @key{RET}
3407 @b{Additional Comments:} @key{RET}
3408 @end group
3409 @end example
3411 In BBDB buffer, access an entry by pressing the key @key{F}.
3413 @end enumerate
3415 Thanks to @value{tramp} users for contributing to these recipes.
3417 @item
3418 Why saved multi-hop file names do not work in a new Emacs session?
3420 When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
3421 multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
3422 package, use the full ad-hoc file name including all hops, like
3423 @file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}news.my.domain,/opt/news/etc}}.
3425 Alternatively, when saving abbreviated multi-hop file names
3426 @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, the user
3427 option @option{tramp-save-ad-hoc-proxies} must be set non-@code{nil}
3428 value.
3431 @item
3432 How to connect to a remote Emacs session using @value{tramp}?
3434 Configure Emacs Client
3435 @ifinfo
3436 (@pxref{Emacs Server, , , emacs}).
3437 @end ifinfo
3439 Then on the remote host, start the Emacs Server:
3441 @lisp
3442 @group
3443 (require 'server)
3444 (setq server-host (system-name)
3445       server-use-tcp t)
3446 (server-start)
3447 @end group
3448 @end lisp
3450 If @code{(system-name)} of the remote host cannot be resolved on the
3451 local host, use IP address instead.
3453 Copy from the remote host the resulting file
3454 @file{~/.emacs.d/server/server} to the local host, to the same
3455 location.
3457 Then start Emacs Client from the command line:
3459 @example
3460 emacsclient @trampfn{ssh,user@@host,/file/to/edit}
3461 @end example
3463 @code{user} and @code{host} refer to the local host.
3465 To make Emacs Client an editor for other programs, use a wrapper
3466 script @file{emacsclient.sh}:
3468 @example
3469 @group
3470 #!/bin/sh
3471 emacsclient @trampfn{ssh,$(whoami)@@$(hostname --fqdn),$1}
3472 @end group
3473 @end example
3475 Then change the environment variable @env{EDITOR} to point to the
3476 wrapper script:
3478 @example
3479 export EDITOR=/path/to/emacsclient.sh
3480 @end example
3483 @item
3484 How to disable other packages from calling @value{tramp}?
3486 There are packages that call @value{tramp} without the user ever
3487 entering a remote file name.  Even without applying a remote file
3488 syntax, some packages enable @value{tramp} on their own.  How can users
3489 disable such features.
3491 @itemize @minus
3492 @item
3493 @file{ido.el}
3495 Disable @value{tramp} file name completion:
3497 @lisp
3498 (custom-set-variables '(ido-enable-tramp-completion nil))
3499 @end lisp
3501 @item
3502 @file{rlogin.el}
3504 Disable remote directory tracking mode:
3506 @lisp
3507 (rlogin-directory-tracking-mode -1)
3508 @end lisp
3509 @end itemize
3512 @item
3513 How to disable @value{tramp}?
3515 @itemize @minus
3516 @item
3517 To keep Ange FTP as default the remote files access package, set this
3518 in @file{.emacs}:
3520 @lisp
3521 (custom-set-variables '(tramp-default-method "ftp" nil (tramp)))
3522 @end lisp
3524 @item
3525 To disable both @value{tramp} (and Ange FTP), set @code{tramp-mode} to
3526 @code{nil} in @file{.emacs}.
3528 @lisp
3529 (custom-set-variables '(tramp-mode nil nil (tramp)))
3530 @end lisp
3532 @item
3533 To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.  Unloading
3534 @value{tramp} resets Ange FTP plugins also.
3535 @end itemize
3536 @end itemize
3539 @c For the developer
3540 @node Files directories and localnames
3541 @chapter How file names, directories and localnames are mangled and managed.
3543 @menu
3544 * Localname deconstruction::    Splitting a localname into its component parts.
3545 * External packages::           Integrating with external Lisp packages.
3546 @end menu
3549 @node Localname deconstruction
3550 @section Splitting a localname into its component parts
3552 @value{tramp} package redefines lisp functions
3553 @code{file-name-directory} and @code{file-name-nondirectory} to
3554 accommodate the unique file naming syntax that @value{tramp} requires.
3556 The replacements dissect the file name, use the original handler for
3557 the localname, take that result, and then re-build the @value{tramp}
3558 file name.  By relying on the original handlers for localnames,
3559 @value{tramp} benefits from platform specific hacks to the original
3560 handlers.
3563 @node External packages
3564 @section Integrating with external Lisp packages
3565 @subsection File name completion.
3567 Sometimes, it is not convenient to open a new connection to a remote
3568 host, including entering the password and alike.  For example, this is
3569 nasty for packages providing file name completion. Such a package
3570 could signal to @value{tramp}, that they don't want it to establish a
3571 new connection.  Use the variable @code{non-essential} temporarily and
3572 bind it to non-@code{nil} value.
3574 @lisp
3575 @group
3576 (let ((non-essential t))
3577   @dots{})
3578 @end group
3579 @end lisp
3582 @subsection File attributes cache.
3584 Keeping a local cache of remote file attributes in sync with the
3585 remote host is a time-consuming operation.  Flushing and re-querying
3586 these attributes can tax @value{tramp} to a grinding halt on busy
3587 remote servers.
3589 To get around these types of slow-downs in @value{tramp}'s
3590 responsiveness, set the @code{process-file-side-effects} to @code{nil}
3591 to stop @value{tramp} from flushing the cache.  This is helpful in
3592 situations where callers to @code{process-file} know there are no file
3593 attribute changes.  The let-bind form to accomplish this:
3595 @lisp
3596 @group
3597 (let (process-file-side-effects)
3598   @dots{})
3599 @end group
3600 @end lisp
3602 For asynchronous processes, @value{tramp} uses a process sentinel to
3603 flush file attributes cache.  When callers to @code{start-file-process}
3604 know beforehand no file attribute changes are expected, then the
3605 process sentinel should be set to the default state.  In cases where
3606 the caller defines its own process sentinel, @value{tramp}'s process
3607 sentinel is overwritten.  The caller can still flush the file
3608 attributes cache in its process sentinel with this code:
3610 @lisp
3611 @group
3612 (unless (memq (process-status proc) '(run open))
3613   (dired-uncache remote-directory))
3614 @end group
3615 @end lisp
3617 Since @value{tramp} traverses subdirectories starting with the
3618 root-directory, it is most likely sufficient to make the
3619 @code{default-directory} of the process buffer as the root directory.
3622 @node Traces and Profiles
3623 @chapter How to Customize Traces
3625 @value{tramp} messages are raised with verbosity levels ranging from 0
3626 to 10.  @value{tramp} does not display all messages; only those with a
3627 verbosity level less than or equal to @code{tramp-verbose}.
3629 The verbosity levels are
3631           @w{ 0}  silent (no @value{tramp} messages at all)
3632 @*@indent @w{ 1}  errors
3633 @*@indent @w{ 2}  warnings
3634 @*@indent @w{ 3}  connection to remote hosts (default verbosity)
3635 @*@indent @w{ 4}  activities
3636 @*@indent @w{ 5}  internal
3637 @*@indent @w{ 6}  sent and received strings
3638 @*@indent @w{ 7}  file caching
3639 @*@indent @w{ 8}  connection properties
3640 @*@indent @w{ 9}  test commands
3641 @*@indent @w{10}  traces (huge)
3643 With @code{tramp-verbose} greater than or equal to 4, messages are
3644 also written to a @value{tramp} debug buffer.  Such debug buffers are
3645 essential to bug and problem analyses.  For @value{tramp} bug reports,
3646 set the @code{tramp-verbose} level to 6 (@pxref{Bug Reports}).
3648 The debug buffer is in
3649 @ifinfo
3650 @ref{Outline Mode, , , emacs}.
3651 @end ifinfo
3652 @ifnotinfo
3653 Outline Mode.
3654 @end ifnotinfo
3655 In this buffer, messages can be filtered by their level.  To see
3656 messages up to verbosity level 5, enter @kbd{C-u 6 C-c C-q}.
3657 @ifinfo
3658 Other navigation keys are described in
3659 @ref{Outline Visibility, , , emacs}.
3660 @end ifinfo
3662 @value{tramp} handles errors internally.  But to get a Lisp backtrace,
3663 both the error and the signal have to be set as follows:
3665 @lisp
3666 @group
3667 (setq debug-on-error t
3668       debug-on-signal t)
3669 @end group
3670 @end lisp
3672 To enable stepping through @value{tramp} function call traces, they
3673 have to be specifically enabled as shown in this code:
3675 @lisp
3676 @group
3677 (require 'trace)
3678 (dolist (elt (all-completions "tramp-" obarray 'functionp))
3679   (trace-function-background (intern elt)))
3680 (untrace-function 'tramp-read-passwd)
3681 @end group
3682 @end lisp
3684 The buffer @file{*trace-output*} contains the output from the function
3685 call traces.  Disable @code{tramp-read-passwd} to stop password
3686 strings from being written to @file{*trace-output*}.
3689 @node GNU Free Documentation License
3690 @appendix GNU Free Documentation License
3691 @include doclicense.texi
3694 @node Function Index
3695 @unnumbered Function Index
3696 @printindex fn
3699 @node Variable Index
3700 @unnumbered Variable Index
3701 @printindex vr
3704 @node Concept Index
3705 @unnumbered Concept Index
3706 @printindex cp
3708 @bye
3710 @c TODO
3712 @c * Say something about the .login and .profile files of the remote
3713 @c   shells.
3714 @c * Explain how tramp.el works in principle: open a shell on a remote
3715 @c   host and then send commands to it.
3716 @c * Consistent small or capitalized words especially in menus.
3717 @c * Make a unique declaration of @trampfn.