* configure.ac: Fix minimum Jansson version requirement.
[emacs.git] / doc / misc / tramp.texi
blobdb2f14b8dfd41d5a81c37ab3ed3bcd155eb55ebc
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 * @value{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{https://www.gnu.org/software/tramp/}.
77 @ifhtml
78 The latest release of @value{tramp} is available for
79 @uref{https://ftp.gnu.org/gnu/tramp/, download}, or you may see
80 @ref{Obtaining @value{tramp}} for more details, including the Git
81 server details.
83 @value{tramp} also has a @uref{https://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{https://lists.gnu.org/r/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 @value{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 * Quick Start Guide::           Short introduction how to use @value{tramp}.
106 * Configuration::               Configuring @value{tramp} for use.
107 * Usage::                       An overview of the operation of @value{tramp}.
108 * Bug Reports::                 Reporting Bugs and Problems.
109 * Frequently Asked Questions::  Questions and answers from the mailing list.
111 For the developer:
113 * Files directories and localnames::
114                                 How file names, directories and localnames
115                                   are mangled and managed.
116 * Traces and Profiles::         How to Customize Traces.
118 * GNU Free Documentation License:: The license for this documentation.
119 * Function Index::              @value{tramp} functions.
120 * Variable Index::              User options and variables.
121 * Concept Index::               An item for each concept.
123 @detailmenu
124  --- The Detailed Node Listing ---
126 @ifset installchapter
127 Installing @value{tramp} with your Emacs
129 * Installation parameters::     Parameters in order to control installation.
130 * Testing::                     A test suite for @value{tramp}.
131 * Load paths::                  How to plug-in @value{tramp} into your environment.
132 @end ifset
134 Configuring @value{tramp} for use
136 * Connection types::            Types of connections to remote hosts.
137 * Inline methods::              Inline methods.
138 * External methods::            External methods.
139 * GVFS based methods::          GVFS based external methods.
140 * Default Method::              Selecting a default method.
141 * Default User::                Selecting a default user.
142 * Default Host::                Selecting a default host.
143 * Multi-hops::                  Connecting to a remote host using multiple hops.
144 * Firewalls::                   Passing firewalls.
145 * Customizing Methods::         Using Non-Standard Methods.
146 * Customizing Completion::      Selecting config files for user/host name completion.
147 * Password handling::           Reusing passwords for several connections.
148 * Connection caching::          Reusing connection related information.
149 * Predefined connection information::
150                                 Setting own connection related information.
151 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
152 * Remote shell setup::          Remote shell setup hints.
153 * Android shell setup::         Android shell setup hints.
154 * Auto-save and Backup::        Auto-save and Backup.
155 * Windows setup hints::         Issues with Cygwin ssh.
157 Using @value{tramp}
159 * File name syntax::            @value{tramp} file name conventions.
160 @ifset unified
161 * Change file name syntax::     Alternative file name syntax.
162 @end ifset
163 * File name completion::        File name completion.
164 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
165 * Remote processes::            Integration with other Emacs packages.
166 * Cleanup remote connections::  Cleanup remote connections.
167 * Archive file names::          Access to files in file archives.
169 How file names, directories and localnames are mangled and managed
171 * Localname deconstruction::    Breaking a localname into its components.
172 * External packages::           Integration with external Lisp packages.
174 @end detailmenu
175 @end menu
178 @node Overview
179 @chapter An overview of @value{tramp}
180 @cindex overview
182 @value{tramp} is for transparently accessing remote files from within
183 Emacs.  @value{tramp} enables an easy, convenient, and consistent
184 interface to remote files as if they are local files.  @value{tramp}'s
185 transparency extends to editing, version control, and @code{dired}.
187 @value{tramp} can access remote hosts using any number of access
188 methods, such as @command{rsh}, @command{rlogin}, @command{telnet},
189 and related programs.  If these programs can successfully pass
190 @acronym{ASCII} characters, @value{tramp} can use them.
191 @value{tramp} does not require or mandate 8-bit clean connections.
193 @value{tramp}'s most common access method is through @command{ssh}, a
194 more secure alternative to @command{ftp} and other older access
195 methods.
197 @value{tramp} on MS Windows operating systems is integrated with the
198 PuTTY package, and uses the @command{plink} program.
200 @value{tramp} mostly operates transparently in the background using
201 the connection programs.  As long as these programs enable remote login
202 and can use the terminal, @value{tramp} can adapt them for seamless
203 and transparent access.
205 @value{tramp} temporarily transfers a remote file's contents to the
206 local host editing and related operations.  @value{tramp} can also
207 transfer files between hosts using standard Emacs interfaces, a
208 benefit of direct integration of @value{tramp} in Emacs.
210 @value{tramp} can transfer files using any number of available host
211 programs for remote files, such as @command{rcp}, @command{scp},
212 @command{rsync} or (under MS Windows) @command{pscp}.  @value{tramp}
213 provides easy ways to specify these programs and customize them to
214 specific files, hosts, or access methods.
216 For faster small-size file transfers, @value{tramp} supports encoded
217 transfers directly through the shell using @command{mimencode} or
218 @command{uuencode} provided such tools are available on the remote
219 host.
222 @subsubheading @value{tramp} behind the scenes
223 @cindex behind the scenes
224 @cindex details of operation
225 @cindex how it works
227 Accessing a remote file through @value{tramp} entails a series of
228 actions, many of which are transparent to the user.  Yet some actions
229 may require user response (such as entering passwords or completing
230 file names).  One typical scenario, opening a file on a remote host, is
231 presented here to illustrate the steps involved:
233 @kbd{C-x C-f} to initiate find-file, enter part of the @value{tramp}
234 file name, then hit @kbd{@key{TAB}} for completion.  If this is the
235 first time connection to that host, here's what happens:
237 @itemize
238 @item
239 @value{tramp} invokes @samp{telnet @var{host}} or @samp{rsh @var{host}
240 -l @var{user}} and establishes an external process to connect to the
241 remote host.  @value{tramp} communicates with the process through an
242 Emacs buffer, which also shows output from the remote host.
244 @item
245 The remote host may prompt for a login name (for @command{telnet}, for
246 example) in the buffer.  If on the other hand, the login name was
247 included in the file name portion, @value{tramp} sends the login name
248 followed by a newline.
250 @item
251 The remote host may then prompt for a password or pass phrase (for
252 @command{rsh} or for @command{telnet}).  @value{tramp} displays the
253 password prompt in the minibuffer.  @value{tramp} then sends whatever
254 is entered to the remote host, followed by a newline.
256 @item
257 @value{tramp} now waits for either the shell prompt or a failed login
258 message.
260 If @value{tramp} does not receive any messages within a timeout period
261 (a minute, for example), then @value{tramp} responds with an error
262 message about not finding the remote shell prompt.  If any messages
263 from the remote host, @value{tramp} displays them in the buffer.
265 For any @samp{login failed} message from the remote host,
266 @value{tramp} aborts the login attempt, and repeats the login steps
267 again.
269 @item
270 Upon successful login and @value{tramp} recognizes the shell prompt
271 from the remote host, @value{tramp} prepares the shell environment by
272 turning off echoing, setting shell prompt, and other housekeeping
273 chores.
275 @strong{Note} that for the remote shell, @value{tramp} invokes
276 @command{/bin/sh}.  The remote host must recognize @samp{exec /bin/sh}
277 and execute the appropriate shell.  This shell must support Bourne
278 shell syntax.
280 @item
281 @value{tramp} executes @command{cd} and @command{ls} commands to find
282 which files exist on the remote host.  @value{tramp} sometimes uses
283 @command{echo} with globbing.  @value{tramp} checks if a file or
284 directory is writable with @command{test}.  After each command,
285 @value{tramp} parses the output from the remote host for completing
286 the next operation.
288 @item
289 After remote file name completion, @value{tramp} transfers the file
290 contents from the remote host.
292 For inline transfers, @value{tramp} sends a command, such as
293 @samp{mimencode -b /path/to/remote/file}, waits until the output has
294 accumulated in the buffer, decodes that output to produce the file's
295 contents.
297 For external transfers, @value{tramp} sends a command as follows:
298 @example
299 rcp user@@host:/path/to/remote/file /tmp/tramp.4711
300 @end example
301 @value{tramp} reads the local temporary file @file{/tmp/tramp.4711}
302 into a buffer, and then deletes the temporary file.
304 @item
305 Edit, modify, change the buffer contents as normal, and then save the
306 buffer wth @kbd{C-x C-s}.
308 @item
309 @value{tramp} transfers the buffer contents to the remote host in
310 a reverse of the process using the appropriate inline or external
311 program.
312 @end itemize
314 I hope this has provided you with a basic overview of what happens
315 behind the scenes when you open a file with @value{tramp}.
318 @c For the end user
319 @node Obtaining @value{tramp}
320 @chapter Obtaining @value{tramp}
321 @cindex obtaining @value{tramp}
323 @value{tramp} is included as part of Emacs (since Emacs version 22.1).
325 @value{tramp} is also freely packaged for download on the Internet at
326 @uref{https://ftp.gnu.org/gnu/tramp/}.
328 @value{tramp} development versions are available on Git servers.
329 Development versions contain new and incomplete features.
331 One way to obtain from Git server is to visit the Savannah project
332 page at the following URL and then clicking on the Git link in the
333 navigation bar at the top.
335 @noindent
336 @uref{https://savannah.gnu.org/projects/tramp/}
338 @noindent
339 Another way is to follow the terminal session below:
341 @example
342 @group
343 $ cd ~/emacs
344 $ git clone git://git.savannah.gnu.org/tramp.git
345 @end group
346 @end example
348 @noindent
349 From behind a firewall:
351 @example
352 @group
353 $ git config --global http.proxy http://user:pwd@@proxy.server.com:8080
354 $ git clone https://git.savannah.gnu.org/r/tramp.git
355 @end group
356 @end example
358 @noindent
359 @value{tramp} developers:
361 @example
362 $ git clone login@@git.sv.gnu.org:/srv/git/tramp.git
363 @end example
365 @noindent
366 After one of the above commands, @file{~/emacs/tramp} will
367 containing the latest version of @value{tramp}.
369 @noindent
370 To fetch updates from the repository, use git pull:
372 @example
373 @group
374 $ cd ~/emacs/tramp
375 $ git pull
376 @end group
377 @end example
379 @noindent
380 Run @command{autoconf} as follows to generate an up-to-date
381 @file{configure} script:
383 @example
384 @group
385 $ cd ~/emacs/tramp
386 $ autoconf
387 @end group
388 @end example
391 @node History
392 @chapter History of @value{tramp}
393 @cindex history
394 @cindex development history
396 @value{tramp} development started at the end of November 1998 as
397 @file{rssh.el}.  It provided only one method of access.  It used
398 @command{ssh} for login and @command{scp} to transfer file contents.
399 The name was changed to @file{rcp.el} before it got its present name
400 @value{tramp}.  New methods of remote access were added, so was support
401 for version control.
403 April 2000 was the first time when multi-hop methods were added.  In
404 July 2002, @value{tramp} unified file names with Ange FTP@.  In July
405 2004, proxy hosts replaced multi-hop methods.  Running commands on
406 remote hosts was introduced in December 2005.  Support for gateways
407 since April 2007 (and removed in December 2016).  GVFS integration
408 started in February 2009.  Remote commands on MS Windows hosts since
409 September 2011.  Ad-hoc multi-hop methods (with a changed syntax)
410 re-enabled in November 2011.  In November 2012, added Juergen
411 Hoetzel's @file{tramp-adb.el}.  Archive file names are supported since
412 December 2017.
414 XEmacs support was stopped in January 2016.  Since March 2017,
415 @value{tramp} syntax mandates a method.
417 @c Installation chapter is necessary only in case of standalone
418 @c installation.  Text taken from trampinst.texi.
419 @ifset installchapter
420 @include trampinst.texi
421 @end ifset
424 @node Quick Start Guide
425 @chapter Short introduction how to use @value{tramp}
426 @cindex quick start guide
428 @value{tramp} extends the Emacs file name syntax by a remote
429 component.  A remote file name looks always like
430 @file{@trampfn{method,user@@host,/path/to/file}}.
432 You can use remote files exactly like ordinary files, that means you
433 could open a file or directory by @kbd{C-x C-f
434 @trampfn{method,user@@host,/path/to/file} @key{RET}}, edit the file,
435 and save it.  You can also mix local files and remote files in file
436 operations with two arguments, like @code{copy-file} or
437 @code{rename-file}.  And finally, you can run even processes on a
438 remote host, when the buffer you call the process from has a remote
439 @code{default-directory}.
442 @anchor{Quick Start Guide: File name syntax}
443 @section File name syntax
444 @cindex file name syntax
446 Remote file names are prepended by the @code{method}, @code{user} and
447 @code{host} parts.  All of them, and also the local file name part,
448 are optional, in case of a missing part a default value is assumed.
449 The default value for an empty local file name part is the remote
450 user's home directory.  The shortest remote file name is
451 @file{@trampfn{-,,}}, therefore.  The @samp{-} notation for the
452 default host is used for syntactical reasons, @ref{Default Host}.
454 The @code{method} part describes the connection method used to reach
455 the remote host, see below.
457 The @code{user} part is the user name for accessing the remote host.
458 For the @option{smb} method, this could also require a domain name, in
459 this case it is written as @code{user%domain}.
461 The @code{host} part must be a host name which could be resolved on
462 your local host.  It could be a short host name, a fully qualified
463 domain name, an IPv4 or IPv6 address, @ref{File name syntax}.  Some
464 connection methods support also a notation of the port to be used, in
465 this case it is written as @code{host#port}.
468 @anchor{Quick Start Guide: @option{ssh} and @option{plink} methods}
469 @section Using @option{ssh} and @option{plink}
470 @cindex method ssh
471 @cindex ssh method
472 @cindex method plink
473 @cindex plink method
475 If your local host runs an SSH client, and the remote host runs an SSH
476 server, the most simple remote file name is
477 @file{@trampfn{ssh,user@@host,/path/to/file}}.  The remote file name
478 @file{@trampfn{ssh,,}} opens a remote connection to yourself on the
479 local host, and is taken often for testing @value{tramp}.
481 On MS Windows, PuTTY is often used as SSH client.  Its @command{plink}
482 method can be used there to open a connection to a remote host running
483 an @command{ssh} server:
484 @file{@trampfn{plink,user@@host,/path/to/file}}.
487 @anchor{Quick Start Guide: @option{su}, @option{sudo} and @option{sg} methods}
488 @section Using @option{su}, @option{sudo} and @option{sg}
489 @cindex method su
490 @cindex su method
491 @cindex method sudo
492 @cindex sudo method
493 @cindex method sg
494 @cindex sg method
496 Sometimes, it is necessary to work on your local host under different
497 permissions.  For this, you could use the @option{su} or @option{sudo}
498 connection method.  Both methods use @samp{root} as default user name
499 and the return value of @code{(system-name)} as default host name.
500 Therefore, it is convenient to open a file as
501 @file{@trampfn{sudo,,/path/to/file}}.
503 The method @option{sg} stands for ``switch group''; the changed group
504 must be used here as user name.  The default host name is the same.
507 @anchor{Quick Start Guide: @option{smb} method}
508 @section Using @command{smbclient}
509 @cindex method smb
510 @cindex smb method
511 @cindex ms windows (with smb method)
512 @cindex smbclient
514 In order to access a remote MS Windows host or Samba server, the
515 @command{smbclient} client is used.  The remote file name syntax is
516 @file{@trampfn{smb,user%domain@@host,/path/to/file}}.  The first part
517 of the local file name is the share exported by the remote host,
518 @samp{path} in this example.
521 @anchor{Quick Start Guide: GVFS-based methods}
522 @section Using GVFS-based methods
523 @cindex methods, gvfs
524 @cindex gvfs based methods
525 @cindex method sftp
526 @cindex sftp method
527 @cindex method afp
528 @cindex afp method
529 @cindex method dav
530 @cindex method davs
531 @cindex dav method
532 @cindex davs method
534 On systems, which have installed the virtual file system for the Gnome
535 Desktop (GVFS), its offered methods could be used by @value{tramp}.
536 Examples are @file{@trampfn{sftp,user@@host,/path/to/file}},
537 @file{@trampfn{afp,user@@host,/path/to/file}} (accessing Apple's AFP
538 file system), @file{@trampfn{dav,user@@host,/path/to/file}} and
539 @file{@trampfn{davs,user@@host,/path/to/file}} (for WebDAV shares).
542 @anchor{Quick Start Guide: Google Drive}
543 @section Using Google Drive
544 @cindex method gdrive
545 @cindex gdrive method
546 @cindex google drive
548 Another GVFS-based method allows to access a Google Drive file system.
549 The file name syntax is here always
550 @file{@trampfn{gdrive,john.doe@@gmail.com,/path/to/file}}.
551 @samp{john.doe@@gmail.com} stands here for your Google Drive account.
554 @anchor{Quick Start Guide: Android}
555 @section Using Android
556 @cindex method adb
557 @cindex adb method
558 @cindex android
560 An Android device, which is connected via USB to your local host, can
561 be accessed via the @command{adb} command.  No user or host name is
562 needed.  The file name syntax is @file{@trampfn{adb,,/path/to/file}}.
565 @node Configuration
566 @chapter Configuring @value{tramp}
567 @cindex configuration
568 @cindex default configuration
570 @value{tramp} is initially configured to use the @command{scp} program
571 to connect to the remote host.  Just type @kbd{C-x C-f} and then enter
572 file name @file{@trampfn{scp,user@@host,/path/to/file}}.  For details,
573 @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
575 For problems related to the behavior of the remote shell, @xref{Remote
576 shell setup}.
578 For changing the connection type and file access method from the
579 defaults to one of several other options, @xref{Connection types}.
581 @strong{Note} that some user options described in these examples are
582 not auto loaded by Emacs.  All examples require @value{tramp} is
583 installed and loaded:
585 @lisp
586 (customize-set-variable 'tramp-verbose 6 "Enable remote command traces")
587 @end lisp
590 @menu
591 * Connection types::            Types of connections to remote hosts.
592 * Inline methods::              Inline methods.
593 * External methods::            External methods.
594 * GVFS based methods::          GVFS based external methods.
595 * Default Method::              Selecting a default method.
596                                   Here we also try to help those who
597                                   don't have the foggiest which method
598                                   is right for them.
599 * Default User::                Selecting a default user.
600 * Default Host::                Selecting a default host.
601 * Multi-hops::                  Connecting to a remote host using multiple hops.
602 * Firewalls::                   Passing firewalls.
603 * Customizing Methods::         Using Non-Standard Methods.
604 * Customizing Completion::      Selecting config files for user/host name completion.
605 * Password handling::           Reusing passwords for several connections.
606 * Connection caching::          Reusing connection related information.
607 * Predefined connection information::
608                                 Setting own connection related information.
609 * Remote programs::             How @value{tramp} finds and uses programs on the remote host.
610 * Remote shell setup::          Remote shell setup hints.
611 * Android shell setup::         Android shell setup hints.
612 * Auto-save and Backup::        Auto-save and Backup.
613 * Windows setup hints::         Issues with Cygwin ssh.
614 @end menu
617 @node Connection types
618 @section Types of connections to remote hosts
619 @cindex connection types, overview
621 @dfn{Inline method} and @dfn{external method} are the two basic types
622 of access methods.  While they both use the same remote shell access
623 programs, such as @command{rsh}, @command{ssh}, or @command{telnet},
624 they differ in the file access methods.  Choosing the right method
625 becomes important for editing files, transferring large files, or
626 operating on a large number of files.
628 The performance of the external methods is generally better than that
629 of the inline methods, at least for large files.  This is caused by
630 the need to encode and decode the data when transferring inline.
632 The one exception to this rule are the @option{scp}-based access
633 methods.  While these methods do see better performance when actually
634 transferring files, the overhead of the cryptographic negotiation at
635 startup may drown out the improvement in file transfer times.
637 External methods should be configured such a way that they don't
638 require a password (with @command{ssh-agent}, or such alike).  Modern
639 @command{scp} implementations offer options to reuse existing
640 @command{ssh} connections, which will be enabled by default if
641 available.  If it isn't possible, you should consider @ref{Password
642 handling}, otherwise you will be prompted for a password every copy
643 action.
646 @node Inline methods
647 @section Inline methods
648 @cindex inline methods
649 @cindex methods, inline
651 Inline methods use the same login connection to transfer file
652 contents.  Inline methods are quick and easy for small files.  They
653 depend on the availability of suitable encoding and decoding programs
654 on the remote host.  For local source and destination, @value{tramp}
655 may use built-in equivalents of such programs in Emacs.
657 Inline methods can work in situations where an external transfer
658 program is unavailable.  Inline methods also work when transferring
659 files between different @emph{user identities} on the same host.
661 @cindex uuencode
662 @cindex mimencode
663 @cindex base-64 encoding
665 @value{tramp} checks the remote host for the availability and
666 usability of @command{mimencode} (part of the @command{metamail}
667 package) or @command{uuencode}.  @value{tramp} uses the first reliable
668 command it finds.  @value{tramp}'s search path can be customized, see
669 @ref{Remote programs}.
671 In case both @command{mimencode} and @command{uuencode} are
672 unavailable, @value{tramp} first transfers a small Perl program to the
673 remote host, and then tries that program for encoding and decoding.
675 To increase transfer speeds for large text files, use compression
676 before encoding.  The user option
677 @option{tramp-inline-compress-start-size} specifies the file size for
678 such optimization.
680 @table @asis
681 @item @option{rsh}
682 @cindex method rsh
683 @cindex rsh method
685 @command{rsh} is an option for connecting to hosts within local
686 networks since @command{rsh} is not as secure as other methods.
688 @item @option{ssh}
689 @cindex method ssh
690 @cindex ssh method
692 @command{ssh} is a more secure option than others to connect to a
693 remote host.
695 @command{ssh} can also take extra parameters as port numbers.  For
696 example, a host on port 42 is specified as @file{host#42} (the real
697 host name, a hash sign, then a port number).  It is the same as passing
698 @samp{-p 42} to the @command{ssh} command.
700 @item @option{telnet}
701 @cindex method telnet
702 @cindex telnet method
704 Connecting to a remote host with @command{telnet} is as insecure
705 as the @option{rsh} method.
707 @item @option{su}
708 @cindex method su
709 @cindex su method
711 Instead of connecting to a remote host, @command{su} program allows
712 editing as another user.  The host can be either @samp{localhost} or
713 the host returned by the function @command{(system-name)}.  See
714 @ref{Multi-hops} for an exception to this behavior.
716 @item @option{sudo}
717 @cindex method sudo
718 @cindex sudo method
720 Similar to @option{su} method, @option{sudo} uses @command{sudo}.
721 @command{sudo} must have sufficient rights to start a shell.
723 @item @option{doas}
724 @cindex method doas
725 @cindex doas method
727 This method is used on OpenBSD like the @command{sudo} command.
729 @item @option{sg}
730 @cindex method sg
731 @cindex sg method
733 The @command{sg} program allows editing as different group.  The host
734 can be either @samp{localhost} or the host returned by the function
735 @command{(system-name)}.  The user name must be specified, but it
736 denotes a group name.  See @ref{Multi-hops} for an exception to this
737 behavior.
739 @item @option{sshx}
740 @cindex method sshx
741 @cindex sshx method
743 Works like @option{ssh} but without the extra authentication prompts.
744 @option{sshx} uses @samp{ssh -t -t @var{host} -l @var{user} /bin/sh}
745 to open a connection with a ``standard'' login shell.
747 @strong{Note} that @option{sshx} does not bypass authentication
748 questions.  For example, if the host key of the remote host is not
749 known, @option{sshx} will still ask ``Are you sure you want to
750 continue connecting?''.  @value{tramp} cannot handle such questions.
751 Connections will have to be setup where logins can proceed without
752 such questions.
754 @option{sshx} is useful for MS Windows users when @command{ssh}
755 triggers an error about allocating a pseudo tty.  This happens due to
756 missing shell prompts that confuses @value{tramp}.
758 @option{sshx} supports the @samp{-p} argument.
760 @item @option{krlogin}
761 @cindex method krlogin
762 @cindex krlogin method
763 @cindex kerberos (with krlogin method)
765 This method is also similar to @option{ssh}.  It uses the
766 @command{krlogin -x} command only for remote host login.
768 @item @option{ksu}
769 @cindex method ksu
770 @cindex ksu method
771 @cindex kerberos (with ksu method)
773 This is another method from the Kerberos suite.  It behaves like @option{su}.
775 @item @option{plink}
776 @cindex method plink
777 @cindex plink method
779 @option{plink} method is for MS Windows users with the PuTTY
780 implementation of SSH@.  It uses @samp{plink -ssh} to log in to the
781 remote host.
783 Check the @samp{Share SSH connections if possible} control for that
784 session.
786 @option{plink} method supports the @samp{-P} argument.
788 @item @option{plinkx}
789 @cindex method plinkx
790 @cindex plinkx method
792 Another method using PuTTY on MS Windows with session names instead of
793 host names.  @option{plinkx} calls @samp{plink -load @var{session}
794 -t}.  User names and port numbers must be defined in the session.
796 Check the @samp{Share SSH connections if possible} control for that
797 session.
799 @end table
802 @node External methods
803 @section External methods
804 @cindex methods, external
805 @cindex external methods
807 External methods operate over multiple channels, using the remote
808 shell connection for some actions while delegating file transfers to
809 an external transfer program.
811 External methods save on the overhead of encoding and decoding of
812 inline methods.
814 Since external methods have the overhead of opening a new channel,
815 files smaller than @var{tramp-copy-size-limit} still use inline
816 methods.
818 @table @asis
819 @item @option{rcp}
820 @cindex method rcp
821 @cindex rcp method
822 @cindex rcp (with rcp method)
823 @cindex rsh (with rcp method)
825 This method uses the @command{rsh} and @command{rcp} commands to
826 connect to the remote host and transfer files.  This is the fastest
827 access method available.
829 The alternative method @option{remcp} uses the @command{remsh} and
830 @command{rcp} commands.
832 @item @option{scp}
833 @cindex method scp
834 @cindex scp method
835 @cindex scp (with scp method)
836 @cindex ssh (with scp method)
838 Using a combination of @command{ssh} to connect and @command{scp} to
839 transfer is the most secure.  While the performance is good, it is
840 slower than the inline methods for smaller files.  Though there is no
841 overhead of encoding and decoding of the inline methods,
842 @command{scp}'s cryptographic handshake negates those speed gains.
844 @option{ssh}-based methods support @samp{-p} feature for specifying
845 port numbers.  For example, @file{host#42} passes @samp{-p 42} in the
846 argument list to @command{ssh}, and @samp{-P 42} in the argument list
847 to @command{scp}.
849 @item @option{rsync}
850 @cindex method rsync
851 @cindex rsync method
852 @cindex rsync (with rsync method)
853 @cindex ssh (with rsync method)
855 @command{ssh} command to connect in combination with @command{rsync}
856 command to transfer is similar to the @option{scp} method.
858 @command{rsync} performs much better than @command{scp} when
859 transferring files that exist on both hosts.  However, this advantage
860 is lost if the file exists only on one side of the connection.
862 This method supports the @samp{-p} argument.
864 @item @option{scpx}
865 @cindex method scpx
866 @cindex scpx method
867 @cindex scp (with scpx method)
868 @cindex ssh (with scpx method)
870 @option{scpx} is useful to avoid login shell questions.  It is similar
871 in performance to @option{scp}.  @option{scpx} uses @samp{ssh -t -t
872 @var{host} -l @var{user} /bin/sh} to open a connection.
874 @option{scpx} is useful for MS Windows users when @command{ssh}
875 triggers an error about allocating a pseudo tty.  This happens due to
876 missing shell prompts that confuses @value{tramp}.
878 This method supports the @samp{-p} argument.
880 @item @option{pscp}
881 @item @option{psftp}
882 @cindex method pscp
883 @cindex pscp method
884 @cindex pscp (with pscp method)
885 @cindex plink (with pscp method)
886 @cindex putty (with pscp method)
887 @cindex method psftp
888 @cindex psftp method
889 @cindex pscp (with psftp method)
890 @cindex plink (with psftp method)
891 @cindex putty (with psftp method)
893 These methods are similar to @option{scp} or @option{sftp}, but they
894 use the @command{plink} command to connect to the remote host, and
895 they use @command{pscp} or @command{psftp} for transferring the files.
896 These programs are part of PuTTY, an SSH implementation for MS Windows.
898 Check the @samp{Share SSH connections if possible} control for that
899 session.
901 These methods support the @samp{-P} argument.
903 @item @option{fcp}
904 @cindex method fcp
905 @cindex fcp method
906 @cindex fsh (with fcp method)
907 @cindex fcp (with fcp method)
909 This method is similar to @option{scp}, but uses @command{fsh} to
910 connect and @command{fcp} to transfer files.  @command{fsh/fcp}, a
911 front-end for @command{ssh}, reuse @command{ssh} session by
912 submitting several commands.  This avoids the startup overhead due to
913 @command{scp}'s secure connection.  Inline methods have similar
914 benefits.
916 The command used for this connection is: @samp{fsh @var{host} -l
917 @var{user} /bin/sh -i}
919 @cindex method fsh
920 @cindex fsh method
922 @option{fsh} has no inline method since the multiplexing it offers is
923 not useful for @value{tramp}.  @command{fsh} connects to remote host
924 and @value{tramp} keeps that one connection open.
926 @item @option{nc}
927 @cindex method nc
928 @cindex nc method
929 @cindex nc (with nc method)
930 @cindex telnet (with nc method)
932 Using @command{telnet} to connect and @command{nc} to transfer files
933 is sometimes the only combination suitable for accessing routers or
934 NAS hosts.  These dumb devices have severely restricted local shells,
935 such as the @command{busybox} and do not host any other encode or
936 decode programs.
938 @item @option{ftp}
939 @cindex method ftp
940 @cindex ftp method
942 When @value{tramp} uses @option{ftp}, it forwards requests to whatever
943 ftp program is specified by Ange FTP.  This external program must be
944 capable of servicing requests from @value{tramp}.
946 @item @option{smb}
947 @cindex method smb
948 @cindex smb method
949 @cindex ms windows (with smb method)
950 @cindex smbclient
952 This non-native @value{tramp} method connects via the Server Message
953 Block (SMB) networking protocol to hosts running file servers that are
954 typically based on @url{https://www.samba.org/,,Samba} or MS Windows.
956 Using @command{smbclient} requires a few tweaks when working with
957 @value{tramp}:
959 The first directory in the localname must be a share name on the
960 remote host.
962 Since some SMB share names end in the @code{$} character,
963 @value{tramp} must use @code{$$} when specifying those shares to avoid
964 environment variable substitutions.
966 When @value{tramp} is not specific about the share name or uses the
967 generic remote directory @file{/}, @command{smbclient} returns all
968 available shares.
970 Since SMB authentication is based on each SMB share, @value{tramp}
971 prompts for a password even when accessing a different share on the
972 same SMB host.  This prompting can be suppressed by @ref{Password
973 handling}.
975 To accommodate user name/domain name syntax required by MS Windows
976 authorization, @value{tramp} provides for an extended syntax in
977 @code{user%domain} format (where @code{user} is the user name,
978 @code{%} is the percent symbol, and @code{domain} is the MS Windows
979 domain name).  An example:
981 @example
982 @trampfn{smb,daniel%BIZARRE@@melancholia,/daniel$$/.emacs}
983 @end example
985 where user @code{daniel} connects as a domain user to the SMB host
986 @code{melancholia} in the MS Windows domain @code{BIZARRE} to edit
987 @file{.emacs} located in the home directory (share @code{daniel$}).
989 Alternatively, for local WINS users (as opposed to domain users),
990 substitute the domain name with the name of the local host in
991 UPPERCASE as shown here:
993 @example
994 @trampfn{smb,daniel%MELANCHOLIA@@melancholia,/daniel$$/.emacs}
995 @end example
997 where user @code{daniel} connects as local user to the SMB host
998 @code{melancholia} in the local domain @code{MELANCHOLIA} to edit
999 @file{.emacs} located in the home directory (share @code{daniel$}).
1001 The domain name and user name are optional for @command{smbclient}
1002 authentication.  When user name is not specified, @command{smbclient}
1003 uses the anonymous user (without prompting for password).  This
1004 behavior is unlike other @value{tramp} methods, where local user name
1005 is substituted.
1007 The @option{smb} method is unavailable if Emacs is run under a local
1008 user authentication context in MS Windows.  However such users can
1009 still access remote files using UNC file names instead of @value{tramp}:
1011 @example
1012 //melancholia/daniel$$/.emacs
1013 @end example
1015 UNC file name specification does not allow the specification of a
1016 different user name for authentication like the @command{smbclient}
1017 can.
1020 @item @option{adb}
1021 @cindex method adb
1022 @cindex adb method
1023 @cindex android (with adb method)
1025 This method uses Android Debug Bridge program for accessing Android
1026 devices.  The Android Debug Bridge must be installed locally for
1027 @value{tramp} to work.  Some GNU/Linux distributions provide Android
1028 Debug Bridge as an installation package.  Alternatively, the program
1029 is installed as part of the Android SDK@.  @value{tramp} finds the
1030 @command{adb} program either via the @env{PATH} environment variable
1031 or the absolute path set in the user option @option{tramp-adb-program}.
1033 @value{tramp} connects to Android devices with @option{adb} only when
1034 the user option @option{tramp-adb-connect-if-not-connected} is not
1035 @code{nil}.  Otherwise, the connection must be established outside
1036 Emacs.
1038 @value{tramp} does not require a host name part of the remote file
1039 name when a single Android device is connected to @command{adb}.
1040 @value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
1041 @command{adb devices} shows available host names.
1043 @option{adb} method normally does not need user name to authenticate
1044 on the Android device because it runs under the @command{adbd}
1045 process.  But when a user name is specified, however, @value{tramp}
1046 applies an @command{su} in the syntax.  When authentication does not
1047 succeed, especially on un-rooted Android devices, @value{tramp}
1048 displays login errors.
1050 For Android devices connected through TCP/IP, a port number can be
1051 specified using @file{device#42} host name syntax or @value{tramp} can
1052 use the default value as declared in @command{adb} command.  Port
1053 numbers are not applicable to Android devices connected through USB@.
1055 @end table
1058 @node GVFS based methods
1059 @section GVFS based external methods
1060 @cindex methods, gvfs
1061 @cindex gvfs based methods
1062 @cindex dbus
1064 GVFS is the virtual file system for the Gnome Desktop,
1065 @uref{https://en.wikipedia.org/wiki/GVFS}.  Remote files on GVFS are
1066 mounted locally through FUSE and @value{tramp} uses this locally
1067 mounted directory internally.
1069 Emacs uses the D-Bus mechanism to communicate with GVFS@.  Emacs must
1070 have the message bus system, D-Bus integration active, @pxref{Top, ,
1071 D-Bus, dbus}.
1073 @table @asis
1074 @item @option{afp}
1075 @cindex method afp
1076 @cindex afp method
1078 This method is for connecting to remote hosts with the Apple Filing
1079 Protocol for accessing files on macOS volumes.  @value{tramp} access
1080 syntax requires a leading volume (share) name, for example:
1081 @file{@trampfn{afp,user@@host,/volume}}.
1083 @item @option{dav}
1084 @item @option{davs}
1085 @cindex method dav
1086 @cindex method davs
1087 @cindex dav method
1088 @cindex davs method
1090 @option{dav} method provides access to WebDAV files and directories
1091 based on standard protocols, such as HTTP@.  @option{davs} does the same
1092 but with SSL encryption.  Both methods support the port numbers.
1094 @item @option{gdrive}
1095 @cindex method gdrive
1096 @cindex gdrive method
1097 @cindex google drive
1099 Via the @option{gdrive} method it is possible to access your Google
1100 Drive online storage.  User and host name of the remote file name are
1101 your email address of the Google Drive credentials, like
1102 @file{@trampfn{gdrive,john.doe@@gmail.com,/}}.  These credentials must
1103 be populated in your @command{Online Accounts} application outside Emacs.
1105 Since Google Drive uses cryptic blob file names internally,
1106 @value{tramp} works with the @code{display-name} of the files.  This
1107 could produce unexpected behavior in case two files in the same
1108 directory have the same @code{display-name}, such a situation must be avoided.
1110 @item @option{obex}
1111 @cindex method obex
1112 @cindex obex method
1114 OBEX is an FTP-like access protocol for cell phones and similar simple
1115 devices.  @value{tramp} supports OBEX over Bluetooth.
1117 @item @option{sftp}
1118 @cindex method sftp
1119 @cindex sftp method
1121 This method uses @command{sftp} in order to securely access remote
1122 hosts.  @command{sftp} is a more secure option for connecting to hosts
1123 that for security reasons refuse @command{ssh} connections.
1125 @item @option{synce}
1126 @cindex method synce
1127 @cindex synce method
1129 @option{synce} method allows connecting to MS Windows Mobile devices.
1130 It uses GVFS for mounting remote files and directories via FUSE and
1131 requires the SYNCE-GVFS plugin.
1133 @end table
1135 @defopt tramp-gvfs-methods
1136 This user option is a list of external methods for GVFS@.  By default,
1137 this list includes @option{afp}, @option{dav}, @option{davs},
1138 @option{gdrive}, @option{obex}, @option{sftp} and @option{synce}.
1139 Other methods to include are @option{ftp}, @option{http},
1140 @option{https} and @option{smb}.  These methods are not intended to be
1141 used directly as GVFS based method.  Instead, they are added here for
1142 the benefit of @ref{Archive file names}.
1143 @end defopt
1146 @node Default Method
1147 @section Selecting a default method
1148 @cindex default method
1150 In a remote file name, the use of a default method is indicated by the
1151 pseudo method @option{-}, @ref{File name syntax}.
1153 @defopt tramp-default-method
1154 Default method is for transferring files.  The user option
1155 @option{tramp-default-method} sets it.  @value{tramp} uses this user
1156 option to determine the default method for remote file names that do
1157 not have one specified.
1159 @lisp
1160 (customize-set-variable 'tramp-default-method "ssh")
1161 @end lisp
1162 @end defopt
1164 @defopt tramp-default-method-alist
1165 Default methods for transferring files can be customized for specific
1166 user and host combinations through the user option
1167 @option{tramp-default-method-alist}.
1169 For example, the following two lines specify to use the @option{ssh}
1170 method for all user names matching @samp{john} and the @option{rsync}
1171 method for all host names matching @samp{lily}.  The third line
1172 specifies to use the @option{su} method for the user @samp{root} on
1173 the host @samp{localhost}.
1175 @lisp
1176 @group
1177 (add-to-list 'tramp-default-method-alist '("" "john" "ssh"))
1178 (add-to-list 'tramp-default-method-alist '("lily" "" "rsync"))
1179 (add-to-list 'tramp-default-method-alist
1180              '("\\`localhost\\'" "\\`root\\'" "su"))
1181 @end group
1182 @end lisp
1183 @end defopt
1185 @noindent
1186 External methods performance faster for large files.  @pxref{Inline
1187 methods}.  @pxref{External methods}.
1189 Choosing the access method also depends on the security environment.
1190 For example, @option{rsh} and @option{telnet} methods that use clear
1191 text password transfers are inappropriate for over the Internet
1192 connections.  Secure remote connections should use @option{ssh} that
1193 provide encryption.
1196 @subsection Which method to use?
1197 @cindex choosing the right method
1199 @value{tramp} provides maximum number of choices for maximum
1200 flexibility.  Choosing which method depends on the hosts, clients,
1201 network speeds, and the security context.
1203 Start by using an inline method.
1205 External methods might be more efficient for large files, but most
1206 @value{tramp} users edit small files more often than large files.
1208 Enable compression, @var{tramp-inline-compress-start-size}, for a
1209 performance boost for large files.
1211 Since @command{ssh} has become the most common method of remote host
1212 access and it has the most reasonable security protocols, use
1213 @option{ssh} method.  Typical @option{ssh} usage to edit the
1214 @file{/etc/motd} file on the otherhost:
1216 @example
1217 @kbd{C-x C-f @trampfn{ssh,root@@otherhost,/etc/motd} @key{RET}}
1218 @end example
1220 If @option{ssh} is unavailable for whatever reason, look for other
1221 obvious options.  For MS Windows, try the @option{plink} method.  For
1222 Kerberos, try @option{krlogin}.
1224 For editing local files as @option{su} or @option{sudo} methods, try
1225 the shortened syntax of @samp{root}:
1227 @example
1228 @kbd{C-x C-f @trampfn{su,,/etc/motd} @key{RET}}
1229 @end example
1231 For editing large files, @option{scp} is faster than @option{ssh}.
1232 @option{pscp} is faster than @option{plink}.  But this speed
1233 improvement is not always true.
1236 @node Default User
1237 @section Selecting a default user
1238 @cindex default user
1240 @defopt tramp-default-user
1241 @value{tramp} file name can omit the user name part since
1242 @value{tramp} substitutes the currently logged-in user name.  However
1243 this substitution can be overridden with @option{tramp-default-user}.
1244 For example:
1246 @lisp
1247 (customize-set-variable 'tramp-default-user "root")
1248 @end lisp
1249 @end defopt
1251 @defopt tramp-default-user-alist
1252 Instead of a single default user, @option{tramp-default-user-alist}
1253 allows multiple default user values based on access method or host
1254 name combinations.  The alist can hold multiple values.  For example, to
1255 use the @samp{john} as the default user for the domain
1256 @samp{somewhere.else} only:
1258 @lisp
1259 @group
1260 (add-to-list 'tramp-default-user-alist
1261              '("ssh" ".*\\.somewhere\\.else\\'" "john"))
1262 @end group
1263 @end lisp
1265 A Caution: @value{tramp} will override any default user specified in
1266 the configuration files outside Emacs, such as @file{~/.ssh/config}.
1267 To stop @value{tramp} from applying the default value, set the
1268 corresponding alist entry to nil:
1270 @lisp
1271 @group
1272 (add-to-list 'tramp-default-user-alist
1273              '("ssh" "\\`here\\.somewhere\\.else\\'" nil))
1274 @end group
1275 @end lisp
1277 The last entry in @option{tramp-default-user-alist} should be reserved
1278 for catch-all or most often used login.
1280 @lisp
1281 @group
1282 (add-to-list 'tramp-default-user-alist
1283              '(nil nil "jonas") t)
1284 @end group
1285 @end lisp
1286 @end defopt
1289 @node Default Host
1290 @section Selecting a default host
1291 @cindex default host
1293 @defopt tramp-default-host
1294 When host name is omitted, @value{tramp} substitutes the value from
1295 the @option{tramp-default-host} user option.  It is initially
1296 populated with the local host name where Emacs is running.  The
1297 default method, default user and default host can be overridden as
1298 follows:
1300 @lisp
1301 @group
1302 (custom-set-variables
1303  '(tramp-default-method "ssh")
1304  '(tramp-default-user "john")
1305  '(tramp-default-host "target"))
1306 @end group
1307 @end lisp
1309 With all defaults set, @samp{@trampfn{-,,}} will connect @value{tramp}
1310 to John's home directory on @code{target} via @code{ssh}.
1311 @end defopt
1313 @defopt tramp-default-host-alist
1314 Instead of a single default host, @option{tramp-default-host-alist}
1315 allows multiple default host values based on access method or user
1316 name combinations.  The alist can hold multiple values.  While
1317 @option{tramp-default-host} is sufficient in most cases, some methods,
1318 like @option{adb}, require defaults overwritten.
1319 @end defopt
1322 @node Multi-hops
1323 @section Connecting to a remote host using multiple hops
1324 @cindex multi-hop
1325 @cindex proxy hosts
1327 Multi-hops are methods to reach hosts behind firewalls or to reach the
1328 outside world from inside a bastion host.  With multi-hops,
1329 @value{tramp} can negotiate these hops with the appropriate user/host
1330 authentication at each hop.  All methods until now have been the single
1331 hop kind, where the start and end points of the connection did not
1332 have intermediate check points.
1334 @defopt tramp-default-proxies-alist
1335 @option{tramp-default-proxies-alist} specifies proxy hosts to pass
1336 through.  This user option is list of triples consisting of
1337 @code{(@var{host} @var{user} @var{proxy})}.
1339 The first match is the proxy host through which passes the file name
1340 and the target host matching @var{user}@@@var{host}.  @var{host} and
1341 @var{user} are regular expressions or @code{nil}, interpreted as a
1342 regular expression which always matches.
1344 @var{proxy} is a literal @value{tramp} file name whose local name part
1345 is ignored, and the method and user name parts are optional.
1347 The method must be an inline method (@pxref{Inline methods}).  If
1348 @var{proxy} is @code{nil}, no additional hop is required reaching
1349 @var{user}@@@var{host}.
1351 For example, to pass through the host @samp{bastion.your.domain} as
1352 user @samp{bird} to reach remote hosts outside the local domain:
1354 @lisp
1355 @group
1356 (add-to-list 'tramp-default-proxies-alist
1357              '("\\." nil "@trampfn{ssh,bird@@bastion.your.domain,}"))
1358 (add-to-list 'tramp-default-proxies-alist
1359              '("\\.your\\.domain\\'" nil nil))
1360 @end group
1361 @end lisp
1363 @strong{Note}: @code{add-to-list} adds elements at the beginning of a
1364 list.  Therefore, most relevant rules must come last in the list.
1366 Proxy hosts can be cascaded in the alist.  If there is another host
1367 called @samp{jump.your.domain}, which is the only host allowed to
1368 connect to @samp{bastion.your.domain}, then:
1370 @lisp
1371 @group
1372 (add-to-list 'tramp-default-proxies-alist
1373              '("\\`bastion\\.your\\.domain\\'"
1374                "\\`bird\\'"
1375                "@trampfn{ssh,jump.your.domain,}"))
1376 @end group
1377 @end lisp
1379 @var{proxy} can take patterns @code{%h} or @code{%u} for @var{host} or
1380 @var{user} respectively.
1382 To login as @samp{root} on remote hosts in the domain
1383 @samp{your.domain}, but login as @samp{root} is disabled for non-local
1384 access, then use this alist entry:
1386 @lisp
1387 @group
1388 (add-to-list 'tramp-default-proxies-alist
1389              '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
1390 @end group
1391 @end lisp
1393 Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
1394 to @samp{randomhost.your.domain} via @code{ssh} under your account
1395 name, and then performs @code{sudo -u root} on that host.
1397 It is key for the sudo method in the above example to be applied on
1398 the host after reaching it and not on the local host.
1400 @var{host}, @var{user} and @var{proxy} can also take Lisp forms.  These
1401 forms when evaluated must return either a string or @code{nil}.
1403 To generalize (from the previous example): For all hosts, except my
1404 local one, first connect via @command{ssh}, and then apply
1405 @command{sudo -u root}:
1407 @lisp
1408 @group
1409 (add-to-list 'tramp-default-proxies-alist
1410              '(nil "\\`root\\'" "@trampfn{ssh,%h,}"))
1411 (add-to-list 'tramp-default-proxies-alist
1412              '((regexp-quote (system-name)) nil nil))
1413 @end group
1414 @end lisp
1415 @end defopt
1417 Passing through hops involves dealing with restricted shells, such as
1418 @command{rbash}.  If @value{tramp} is made aware, then it would use
1419 them for proxies only.
1421 @defopt tramp-restricted-shell-hosts-alist
1422 An alist of regular expressions of hosts running restricted shells,
1423 such as @command{rbash}.  @value{tramp} will then use them only as
1424 proxies.
1426 To specify the bastion host from the example above as running a
1427 restricted shell:
1429 @lisp
1430 @group
1431 (add-to-list 'tramp-restricted-shell-hosts-alist
1432              "\\`bastion\\.your\\.domain\\'")
1433 @end group
1434 @end lisp
1435 @end defopt
1438 @node Firewalls
1439 @section Passing firewalls
1440 @cindex http tunnel
1441 @cindex proxy hosts, http tunnel
1443 Sometimes, it is not possible to reach a remote host directly.  A
1444 firewall might be in the way, which could be passed via a proxy
1445 server.
1447 Both ssh and PuTTY support such proxy settings, using an HTTP tunnel
1448 via the @command{CONNECT} command (conforming to RFC 2616, 2817
1449 specifications).  Proxy servers using HTTP version 1.1 or later
1450 protocol support this command.
1452 @subsection Tunneling with ssh
1454 With ssh, you could use the @code{ProxyCommand} entry in the
1455 @file{~/.ssh/config}:
1457 @example
1458 @group
1459 Host host.other.domain
1460      ProxyCommand nc -X connect -x proxy.your.domain:3128 %h %p
1461 @end group
1462 @end example
1464 @code{nc} is BSD's netcat program, which establishes HTTP tunnels. Any
1465 other program with such a feature could be used as well.
1467 In the example, opening @file{@trampfn{ssh,host.your.domain,}} passes
1468 the HTTP proxy server @samp{proxy.your.domain} on port 3128.
1470 @subsection Tunneling with PuTTY
1472 PuTTY does not need an external program, HTTP tunnel support is
1473 built-in.  In the PuTTY config program, create a session for
1474 @samp{host.your.domain}.  In the @option{Connection/Data} entry,
1475 select the @option{HTTP} option, and add @samp{proxy.your.domain} as
1476 @option{Proxy hostname}, and 3128 as @option{Port}.
1478 Opening @file{@trampfn{plinkx,host.your.domain,}} passes the HTTP
1479 proxy server @samp{proxy.your.domain} on port 3128.
1482 @node Customizing Methods
1483 @section Using Non-Standard Methods
1484 @cindex customizing methods
1485 @cindex using non-standard methods
1486 @cindex create your own methods
1488 The @code{tramp-methods} variable currently has an exhaustive list of
1489 predefined methods.  Any part of this list can be modified with more
1490 suitable settings.  Refer to the Lisp documentation of that variable,
1491 accessible with @kbd{C-h v tramp-methods @key{RET}}.
1494 @node Customizing Completion
1495 @section Selecting config files for user/host name completion
1496 @cindex customizing completion
1497 @cindex selecting config files
1498 @vindex tramp-completion-function-alist
1500 @code{tramp-completion-function-alist} uses predefined files for user
1501 and host name completion (@pxref{File name completion}).  For each
1502 method, it keeps a set of configuration files and a function that can
1503 parse that file.  Each entry in @code{tramp-completion-function-alist}
1504 is of the form (@var{method} @var{pair1} @var{pair2} @dots{}).
1506 Each @var{pair} is composed of (@var{function} @var{file}).
1507 @var{function} is responsible for extracting user names and host names
1508 from @var{file} for completion.  There are two functions which access
1509 this variable:
1511 @defun tramp-get-completion-function method
1512 This function returns the list of completion functions for @var{method}.
1514 Example:
1515 @example
1516 @group
1517 (tramp-get-completion-function "rsh")
1519      @result{} ((tramp-parse-rhosts "/etc/hosts.equiv")
1520          (tramp-parse-rhosts "~/.rhosts"))
1521 @end group
1522 @end example
1523 @end defun
1525 @defun tramp-set-completion-function method function-list
1526 This function sets @var{function-list} as list of completion functions
1527 for @var{method}.
1529 Example:
1530 @example
1531 @group
1532 (tramp-set-completion-function "ssh"
1533  '((tramp-parse-sconfig "/etc/ssh_config")
1534    (tramp-parse-sconfig "~/.ssh/config")))
1536      @result{} ((tramp-parse-sconfig "/etc/ssh_config")
1537          (tramp-parse-sconfig "~/.ssh/config"))
1538 @end group
1539 @end example
1540 @end defun
1542 The following predefined functions parsing configuration files exist:
1544 @table @asis
1545 @item @code{tramp-parse-rhosts}
1546 @findex tramp-parse-rhosts
1548 This function parses files which are syntactical equivalent to
1549 @file{~/.rhosts}.  It returns both host names and user names, if
1550 specified.
1552 @item @code{tramp-parse-shosts}
1553 @findex tramp-parse-shosts
1555 This function parses files which are syntactical equivalent to
1556 @file{~/.ssh/known_hosts}.  Since there are no user names specified
1557 in such files, it can return host names only.
1559 @item @code{tramp-parse-sconfig}
1560 @findex tramp-parse-sconfig
1562 This function returns the host nicknames defined by @code{Host} entries
1563 in @file{~/.ssh/config} style files.
1565 @item @code{tramp-parse-shostkeys}
1566 @findex tramp-parse-shostkeys
1568 SSH2 parsing of directories @file{/etc/ssh2/hostkeys/*} and
1569 @file{~/ssh2/hostkeys/*}.  Hosts are coded in file names
1570 @file{hostkey_@var{portnumber}_@var{host-name}.pub}.  User names
1571 are always @code{nil}.
1573 @item @code{tramp-parse-sknownhosts}
1574 @findex tramp-parse-sknownhosts
1576 Another SSH2 style parsing of directories like
1577 @file{/etc/ssh2/knownhosts/*} and @file{~/ssh2/knownhosts/*}.  This
1578 case, hosts names are coded in file names
1579 @file{@var{host-name}.@var{algorithm}.pub}.  User names are always @code{nil}.
1581 @item @code{tramp-parse-hosts}
1582 @findex tramp-parse-hosts
1584 A function dedicated to @file{/etc/hosts} for host names.
1586 @item @code{tramp-parse-passwd}
1587 @findex tramp-parse-passwd
1589 A function which parses @file{/etc/passwd} files for user names.
1591 @item @code{tramp-parse-etc-group}
1592 @findex tramp-parse-etc-group
1594 A function which parses @file{/etc/group} files for group names.
1596 @item @code{tramp-parse-netrc}
1597 @findex tramp-parse-netrc
1599 A function which parses @file{~/.netrc} and @file{~/.authinfo}-style files.
1601 @end table
1603 To keep a custom file with custom data in a custom structure, a custom
1604 function has to be provided.  This function must meet the following
1605 conventions:
1607 @defun my-tramp-parse file
1608 @var{file} must be either a file on the host, or @code{nil}.  The
1609 function must return a list of (@var{user} @var{host}), which are
1610 taken as candidates for completion for user and host names.
1612 Example:
1613 @example
1614 @group
1615 (my-tramp-parse "~/.my-tramp-hosts")
1617      @result{} ((nil "toto") ("daniel" "melancholia"))
1618 @end group
1619 @end example
1620 @end defun
1623 @node Password handling
1624 @section Reusing passwords for several connections
1625 @cindex passwords
1627 To avoid repeated prompts for passwords, consider native caching
1628 mechanisms, such as @command{ssh-agent} for @option{ssh}-like
1629 methods, or @command{pageant} for @option{plink}-like methods.
1631 @value{tramp} offers alternatives when native solutions cannot meet
1632 the need.
1635 @anchor{Using an authentication file}
1636 @subsection Using an authentication file
1637 @vindex auth-sources
1639 The package @file{auth-source.el}, originally developed for No Gnus,
1640 reads passwords from different sources, @xref{Help for users, ,
1641 auth-source, auth}.  The default authentication file is
1642 @file{~/.authinfo.gpg}, but this can be changed via the variable
1643 @code{auth-sources}.
1645 @noindent
1646 A typical entry in the authentication file:
1648 @example
1649 machine melancholia port scp login daniel password geheim
1650 @end example
1652 The port can take any @value{tramp} method (@pxref{Inline methods},
1653 @pxref{External methods}).  Omitting port values matches all
1654 @value{tramp} methods.  Domain and ports, as used in @value{tramp}
1655 file name syntax, must be appended to the machine and login items:
1657 @example
1658 machine melancholia#4711 port davs login daniel%BIZARRE password geheim
1659 @end example
1661 @vindex auth-source-debug
1662 Set @code{auth-source-debug} to @code{t} to debug messages.
1665 @anchor{Caching passwords}
1666 @subsection Caching passwords
1668 @value{tramp} can cache passwords as entered and reuse when needed for
1669 the same user or host name independent of the access method.
1671 @vindex password-cache-expiry
1672 @code{password-cache-expiry} sets the duration (in seconds) the
1673 passwords are remembered.  Passwords are never saved permanently nor
1674 can they extend beyond the lifetime of the current Emacs session.  Set
1675 @code{password-cache-expiry} to @code{nil} to disable expiration.
1677 @vindex password-cache
1678 Set @code{password-cache} to @code{nil} to disable password caching.
1681 @node Connection caching
1682 @section Reusing connection related information
1683 @cindex caching
1684 @vindex tramp-persistency-file-name
1686 For faster initial connection times, @value{tramp} stores previous
1687 connection properties in a file specified by the user option
1688 @option{tramp-persistency-file-name}.
1690 The default file name for @option{tramp-persistency-file-name} is
1691 @file{~/.emacs.d/tramp}.
1693 @value{tramp} reads this file during Emacs startup, and writes to it
1694 when exiting Emacs.  Delete this file for @value{tramp} to recreate a
1695 new one on next Emacs startup.
1697 Set @option{tramp-persistency-file-name} to @code{nil} to disable
1698 storing connections persistently.
1700 When @value{tramp} detects a change in the operating system version in
1701 a remote host (via the command @command{uname -sr}), it flushes all
1702 connection related information for that host and creates a new entry.
1705 @node Predefined connection information
1706 @section Setting own connection related information
1707 @vindex tramp-connection-properties
1709 For more precise customization, parameters specified by
1710 @code{tramp-methods} can be overwritten manually.
1712 Set @option{tramp-connection-properties} to manually override
1713 @code{tramp-methods}.  Properties in this list are in the form
1714 @code{(@var{regexp} @var{property} @var{value})}.  @var{regexp}
1715 matches remote file names.  Use @code{nil} to match all.
1716 @var{property} is the property's name, and @var{value} is the
1717 property's value.
1719 @var{property} is any method specific parameter contained in
1720 @code{tramp-methods}.  The parameter key in @code{tramp-methods} is a
1721 symbol name @code{tramp-<foo>}.  To overwrite that property, use the
1722 string @samp{<foo>} for @var{property}.  For example, this changes the
1723 remote shell:
1725 @lisp
1726 @group
1727 (add-to-list 'tramp-connection-properties
1728              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1729                    "remote-shell" "/bin/ksh"))
1730 @end group
1732 @group
1733 (add-to-list 'tramp-connection-properties
1734              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1735                    "remote-shell-login" '("-")))
1736 @end group
1737 @end lisp
1739 The parameters @code{tramp-remote-shell} and
1740 @code{tramp-remote-shell-login} in @code{tramp-methods} now have new
1741 values for the remote host.
1743 @var{property} could also be any property found in
1744 @option{tramp-persistency-file-name}.
1746 To get around how restricted shells randomly drop connections, set the
1747 special property @samp{busybox}.  For example:
1749 @lisp
1750 @group
1751 (add-to-list 'tramp-connection-properties
1752              (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}")
1753                    "busybox" t))
1754 @end group
1755 @end lisp
1758 @node Remote programs
1759 @section How @value{tramp} finds and uses programs on the remote host
1761 @value{tramp} requires access to and rights to several commands on
1762 remote hosts: @command{ls}, @command{test}, @command{find} and
1763 @command{cat}.
1765 Besides there are other required programs for @ref{Inline methods} and
1766 @ref{External methods} of connection.
1768 To improve performance and accuracy of remote file access,
1769 @value{tramp} uses @command{perl} (or @command{perl5}) and
1770 @command{grep} when available.
1772 @defopt tramp-remote-path
1773 @option{tramp-remote-path} specifies which remote directory paths
1774 @value{tramp} can search for @ref{Remote programs}.
1776 @vindex tramp-default-remote-path
1777 @value{tramp} uses standard defaults, such as @file{/bin} and
1778 @file{/usr/bin}, which are reasonable for most hosts.  To accommodate
1779 differences in hosts and paths, for example, @file{/bin:/usr/bin} on
1780 Debian GNU/Linux or
1781 @file{/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/opt/SUNWspro/bin} on
1782 Solaris, @value{tramp} queries the remote host with @command{getconf
1783 PATH} and updates the symbol @code{tramp-default-remote-path}.
1785 For instances where hosts keep obscure locations for paths for
1786 security reasons, manually add such paths to local @file{.emacs} as
1787 shown below for @value{tramp} to use when connecting.
1789 @lisp
1790 (add-to-list 'tramp-remote-path "/usr/local/perl/bin")
1791 @end lisp
1793 @vindex tramp-own-remote-path
1794 Another way to find the remote path is to use the path assigned to the
1795 remote user by the remote host.  @value{tramp} does not normally retain
1796 this remote path after login.  However, @code{tramp-own-remote-path}
1797 preserves the path value, which can be used to update
1798 @option{tramp-remote-path}.
1800 @lisp
1801 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
1802 @end lisp
1804 @strong{Note} that this works only if your remote @command{/bin/sh}
1805 shell supports the login argument @samp{-l}.
1806 @end defopt
1808 When remote search paths are changed, local @value{tramp} caches must
1809 be recomputed.  To force @value{tramp} to recompute afresh, exit
1810 Emacs, remove the persistent file (@pxref{Connection caching}), and
1811 restart Emacs.
1814 @node Remote shell setup
1815 @section Remote shell setup hints
1816 @cindex remote shell setup
1817 @cindex @file{.profile} file
1818 @cindex @file{.login} file
1819 @cindex shell init files
1821 @value{tramp} checks for the availability of standard programs in the
1822 usual locations.  Common tactics include successively trying
1823 @command{test -e}, @command{/usr/bin/test -e}, and @command{/bin/test
1824 -e}.  @command{ls -d} is another approach.  But these approaches do not
1825 help with these new login patterns.
1827 When @value{tramp} encounters two-factor logins or additional challenge
1828 questions, such as entering birth date or security code or passphrase,
1829 @value{tramp} needs a few more configuration steps to accommodate
1830 them.
1832 The difference between a password prompt and a passphrase prompt is
1833 that the password for completing the login while the passphrase is
1834 for authorizing access to local authentication information, such as
1835 the ssh key.
1837 There is no one configuration to accommodate all the variations in
1838 login security, especially not the exotic ones.  However, @value{tramp}
1839 provides a few tweaks to address the most common ones.
1841 @table @asis
1842 @item @option{tramp-shell-prompt-pattern}
1843 @vindex tramp-shell-prompt-pattern
1845 @option{tramp-shell-prompt-pattern} is for remote login shell prompt,
1846 which may not be the same as the local login shell prompt,
1847 @code{shell-prompt-pattern}.  Since most hosts use identical prompts,
1848 @value{tramp} sets a similar default value for both prompts.
1850 @item @option{tramp-password-prompt-regexp}
1851 @item @option{tramp-wrong-passwd-regexp}
1852 @vindex tramp-password-prompt-regexp
1853 @vindex tramp-wrong-passwd-regexp
1855 @value{tramp} uses @option{tramp-password-prompt-regexp} to
1856 distinguish between prompts for passwords and prompts for passphrases.
1857 By default, @option{tramp-password-prompt-regexp} handles the
1858 detection in English language environments.  See a localization
1859 example below:
1861 @lisp
1862 @group
1863 (customize-set-variable
1864  'tramp-password-prompt-regexp
1865   (concat
1866    "^.*"
1867    (regexp-opt
1868     '("passphrase" "Passphrase"
1869       ;; English
1870       "password" "Password"
1871       ;; Deutsch
1872       "passwort" "Passwort"
1873       ;; Français
1874       "mot de passe" "Mot de passe")
1875     t)
1876    ".*:\0? *"))
1877 @end group
1878 @end lisp
1880 Similar localization may be necessary for handling wrong password
1881 prompts, for which @value{tramp} uses @option{tramp-wrong-passwd-regexp}.
1883 @item @command{tset} and other questions
1884 @cindex unix command tset
1885 @cindex tset unix command
1886 @vindex tramp-terminal-type
1888 To suppress inappropriate prompts for terminal type, @value{tramp}
1889 sets the @env{TERM} to @code{dumb} before the remote login process
1890 begins via the user option @option{tramp-terminal-type}.  This will
1891 silence common @command{tset} related prompts.
1893 @value{tramp}'s strategy for handling such prompts (commonly triggered
1894 from login scripts on remote hosts) is to set the environment
1895 variables so that no prompts interrupt the shell initialization
1896 process.
1898 @vindex tramp-actions-before-shell
1899 An alternative approach is to configure @value{tramp} with strings
1900 that can identify such questions using
1901 @code{tramp-actions-before-shell}.  Example:
1903 @lisp
1904 @group
1905 (defconst my-tramp-prompt-regexp
1906   (concat (regexp-opt '("Enter the birth date of your mother:") t)
1907           "\\s-*")
1908   "Regular expression matching my login prompt question.")
1909 @end group
1911 @group
1912 (defun my-tramp-action (proc vec)
1913   "Enter \"19000101\" in order to give a correct answer."
1914   (save-window-excursion
1915     (with-current-buffer (tramp-get-connection-buffer vec)
1916       (tramp-message vec 6 "\n%s" (buffer-string))
1917       (tramp-send-string vec "19000101"))))
1918 @end group
1920 @group
1921 (add-to-list 'tramp-actions-before-shell
1922              '(my-tramp-prompt-regexp my-tramp-action))
1923 @end group
1924 @end lisp
1927 @item Conflicting names for users and variables in @file{.profile}
1929 When a user name is the same as a variable name in a local file, such
1930 as @file{.profile}, then @value{tramp} may send incorrect values for
1931 environment variables.  To avoid incorrect values, change the local
1932 variable name to something different from the user name.  For example,
1933 if the user name is @env{FRUMPLE}, then change the variable name to
1934 @env{FRUMPLE_DIR}.
1937 @item Non-Bourne commands in @file{.profile}
1939 When the remote host's @file{.profile} is also used for shells other
1940 than Bourne shell, then some incompatible syntaxes for commands in
1941 @file{.profile} may trigger errors in Bourne shell on the host and may
1942 not complete client's @value{tramp} connections.
1944 One example of a Bourne shell incompatible syntax in @file{.profile}:
1945 using @command{export FOO=bar} instead of @command{FOO=bar; export
1946 FOO}.  After remote login, @value{tramp} will trigger an error during
1947 its execution of @command{/bin/sh} on the remote host because Bourne
1948 shell does not recognize the export command as entered in
1949 @file{.profile}.
1951 Likewise, (@code{~}) character in paths will cause errors because
1952 Bourne shell does not do (@code{~}) character expansions.
1954 One approach to avoiding these incompatibilities is to make all
1955 commands in @file{~/.shrc} and @file{~/.profile} Bourne shell
1956 compatible so @value{tramp} can complete connections to that remote.
1957 To accommodate using non-Bourne shells on that remote, use other
1958 shell-specific config files.  For example, bash can use
1959 @file{~/.bash_profile} and ignore @file{.profile}.
1962 @item Interactive shell prompt
1964 @value{tramp} redefines the remote shell prompt internally for robust
1965 parsing.  This redefinition affects the looks of a prompt in an
1966 interactive remote shell through commands, such as @kbd{M-x
1967 shell}.  Such prompts, however, can be reset to something more readable
1968 and recognizable using these @value{tramp} variables.
1970 @value{tramp} sets the @env{INSIDE_EMACS} variable in the startup
1971 script file @file{~/.emacs_SHELLNAME}.
1973 @env{SHELLNAME} is @code{bash} or equivalent shell names.  Change it by
1974 setting the environment variable @env{ESHELL} in the @file{.emacs} as
1975 follows:
1977 @lisp
1978 (setenv "ESHELL" "bash")
1979 @end lisp
1981 Then re-set the prompt string in @file{~/.emacs_SHELLNAME} as follows:
1983 @example
1984 @group
1985 # Reset the prompt for remote @value{tramp} shells.
1986 if [ "$@{INSIDE_EMACS/*tramp*/tramp@}" == "tramp" ] ; then
1987    PS1="[\u@@\h \w]$ "
1989 @end group
1990 @end example
1992 @ifinfo
1993 @xref{Interactive Shell, , , emacs}.
1994 @end ifinfo
1996 @item @command{busybox} / @command{nc}
1997 @cindex unix command nc
1998 @cindex nc unix command
2000 @value{tramp}'s @option{nc} method uses the @command{nc} command to
2001 install and execute a listener as follows (see @code{tramp-methods}):
2003 @example
2004 $ nc -l -p 42
2005 @end example
2007 The above command-line syntax has changed with @command{busybox}
2008 versions.  If @command{nc} refuses the @samp{-p} parameter, then
2009 overwrite as follows:
2011 @lisp
2012 @group
2013 (add-to-list
2014  'tramp-connection-properties
2015  `(,(regexp-quote "192.168.0.1")
2016    "remote-copy-args" (("-l") ("%r"))))
2017 @end group
2018 @end lisp
2020 @noindent
2021 where @samp{192.168.0.1} is the remote host IP address
2022 (@pxref{Predefined connection information}).
2024 @end table
2027 @node Android shell setup
2028 @section Android shell setup hints
2029 @cindex android shell setup for ssh
2031 @value{tramp} uses the @option{adb} method to access Android devices.
2032 Android devices provide a restricted shell access through an USB
2033 connection.  The local host must have the @command{adb} program
2034 installed.  Usually, it is sufficient to open the file
2035 @file{@trampfn{adb,,/}}.  Then you can navigate in the filesystem via
2036 @code{dired}.
2038 Alternatively, applications such as @code{SSHDroid} that run
2039 @command{sshd} process on the Android device can accept any
2040 @option{ssh}-based methods provided these settings are adjusted:
2042 @itemize
2043 @item
2044 @command{sh} must be specified for remote shell since Android devices
2045 do not provide @command{/bin/sh}.  @command{sh} will then invoke
2046 whatever shell is installed on the device with this setting:
2048 @lisp
2049 @group
2050 (add-to-list 'tramp-connection-properties
2051              (list (regexp-quote "192.168.0.26") "remote-shell" "sh"))
2052 @end group
2053 @end lisp
2055 @noindent
2056 where @samp{192.168.0.26} is the Android device's IP address.
2057 (@pxref{Predefined connection information}).
2059 @item
2060 @value{tramp} requires preserving @env{PATH} environment variable from
2061 user settings.  Android devices prefer @file{/system/xbin} path over
2062 @file{/system/bin}.  Both of these are set as follows:
2064 @lisp
2065 @group
2066 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
2067 (add-to-list 'tramp-remote-path "/system/xbin")
2068 @end group
2069 @end lisp
2071 @item
2072 When the Android device is not @samp{rooted}, specify a writable
2073 directory for temporary files:
2075 @lisp
2076 (add-to-list 'tramp-remote-process-environment "TMPDIR=$HOME")
2077 @end lisp
2079 @item
2080 Open a remote connection with the command @kbd{C-x C-f
2081 @trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
2082 on port @samp{2222}.
2084 To add a corresponding entry to the @file{~/.ssh/config} file
2085 (recommended), use this:
2087 @example
2088 @group
2089 Host android
2090      HostName 192.168.0.26
2091      User root
2092      Port 2222
2093 @end group
2094 @end example
2096 @noindent
2097 To use the host name @samp{android} instead of the IP address shown in
2098 the previous example, fix the connection properties as follows:
2100 @lisp
2101 @group
2102 (add-to-list 'tramp-connection-properties
2103              (list (regexp-quote "android") "remote-shell" "sh"))
2104 @end group
2105 @end lisp
2107 @noindent
2108 Open a remote connection with a more concise command @kbd{C-x C-f
2109 @trampfn{ssh,android,}}.
2110 @end itemize
2113 @node Auto-save and Backup
2114 @section Auto-save and Backup configuration
2115 @cindex auto-save
2116 @cindex backup
2117 @vindex backup-directory-alist
2119 To avoid @value{tramp} from saving backup files owned by @samp{root}
2120 to locations accessible to others, default backup settings in
2121 @option{backup-directory-alist} have to be altered.
2123 Here's a scenario where files could be inadvertently exposed.  Emacs
2124 by default writes backup files to the same directory as the original
2125 files unless changed to another location, such as
2126 @file{~/.emacs.d/backups/}.  Such a directory will also be used by
2127 default by @value{tramp} when using, say, a restricted file
2128 @file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup file
2129 of the secretfile is now owned by the user logged in from
2130 @value{tramp} and not @samp{root}.
2132 When @option{backup-directory-alist} is @code{nil} (the default), such
2133 problems do not occur.
2135 To ``turn off'' the backup feature for @value{tramp} files and stop
2136 @value{tramp} from saving to the backup directory, use this:
2138 @lisp
2139 @group
2140 (add-to-list 'backup-directory-alist
2141              (cons tramp-file-name-regexp nil))
2142 @end group
2143 @end lisp
2145 @noindent
2146 Disabling backups can be targeted to just the @option{su} and
2147 @option{sudo} methods:
2149 @lisp
2150 @group
2151 (setq backup-enable-predicate
2152       (lambda (name)
2153         (and (normal-backup-enable-predicate name)
2154              (not
2155               (let ((method (file-remote-p name 'method)))
2156                 (when (stringp method)
2157                   (member method '("su" "sudo"))))))))
2158 @end group
2159 @end lisp
2161 Another option is to create better backup file naming with user and
2162 host names prefixed to the file name.  For example, transforming
2163 @file{/etc/secretfile} to
2164 @file{~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile}, set the
2165 @value{tramp} user option @option{tramp-backup-directory-alist} from
2166 the existing user option @option{backup-directory-alist}.
2168 Then @value{tramp} backs up to a file name that is transformed with a
2169 prefix consisting of the DIRECTORY name.  This file name prefixing
2170 happens only when the DIRECTORY is an absolute local file name.
2172 @noindent
2173 Example:
2175 @lisp
2176 @group
2177 (add-to-list 'backup-directory-alist
2178              (cons "." "~/.emacs.d/backups/"))
2179 (customize-set-variable
2180  'tramp-backup-directory-alist backup-directory-alist)
2181 @end group
2182 @end lisp
2184 @noindent
2185 The backup file name of
2186 @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
2187 @ifset unified
2188 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
2189 @end ifset
2190 @ifset separate
2191 @file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
2192 @end ifset
2194 Just as for backup files, similar issues of file naming affect
2195 auto-saving @value{tramp} files.  Auto-saved files are saved in the
2196 directory specified by the user option
2197 @option{auto-save-file-name-transforms}.  By default this is set to
2198 the local temporary directory.  But in some versions of Debian
2199 GNU/Linux, this points to the source directory where the Emacs was
2200 compiled.  Reset such values to a valid directory.
2202 Set @option{auto-save-file-name-transforms} to @code{nil} to save
2203 auto-saved files to the same directory as the original file.
2205 Alternatively, set the user option @option{tramp-auto-save-directory}
2206 to direct all auto saves to that location.
2208 @node Windows setup hints
2209 @section Issues with Cygwin ssh
2210 @cindex cygwin, issues
2212 This section is incomplete.  Please share your solutions.
2214 @cindex method sshx with cygwin
2215 @cindex sshx method with cygwin
2217 Cygwin's @command{ssh} works only with a Cygwin version of Emacs.  To
2218 check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
2219 test.host}.  Incompatibilities trigger this message:
2221 @example
2222 Pseudo-terminal will not be allocated because stdin is not a terminal.
2223 @end example
2225 Some older versions of Cygwin's @command{ssh} work with the
2226 @option{sshx} access method.  Consult Cygwin's FAQ at
2227 @uref{https://cygwin.com/faq/} for details.
2229 @cindex cygwin and fakecygpty
2230 @cindex fakecygpty and cygwin
2232 On @uref{https://www.emacswiki.org/emacs/SshWithNTEmacs, the Emacs
2233 Wiki} it is explained how to use the helper program @code{fakecygpty}
2234 to fix this problem.
2236 @cindex method scpx with cygwin
2237 @cindex scpx method with cygwin
2239 When using the @option{scpx} access method, Emacs may call
2240 @command{scp} with MS Windows file naming, such as @code{c:/foo}.  But
2241 the version of @command{scp} that is installed with Cygwin does not
2242 know about MS Windows file naming, which causes it to incorrectly look
2243 for a host named @code{c}.
2245 A workaround: write a wrapper script for @option{scp} to convert
2246 Windows file names to Cygwin file names.
2248 @cindex cygwin and ssh-agent
2249 @cindex SSH_AUTH_SOCK and emacs on ms windows
2251 When using the @command{ssh-agent} on MS Windows for password-less
2252 interaction, @option{ssh} methods depend on the environment variable
2253 @env{SSH_AUTH_SOCK}.  But this variable is not set when Emacs is
2254 started from a Desktop shortcut and authentication fails.
2256 One workaround is to use an MS Windows based SSH Agent, such as
2257 Pageant.  It is part of the Putty Suite of tools.
2259 The fallback is to start Emacs from a shell.
2262 @node Usage
2263 @chapter Using @value{tramp}
2264 @cindex using @value{tramp}
2266 @value{tramp} operates transparently, accessing remote files as if
2267 they are local.  However, @value{tramp} employs a formalized remote
2268 file naming syntax to perform its functions transparently.  This
2269 syntax consists of many parts specifying access methods,
2270 authentication, host names, and file names.  Ange FTP uses a similar
2271 syntax.
2273 @cindex type-ahead
2275 Unlike opening local files in Emacs, which are instantaneous, opening
2276 remote files in @value{tramp} is slower at first.  Sometimes there is
2277 a noticeable delay before the prompts for passwords or authentication
2278 appear in the minibuffer.  Hitting @kbd{@key{RET}} or other keys
2279 during this gap will be processed by Emacs.  This type-ahead facility
2280 is a feature of Emacs that may cause missed prompts when using
2281 @value{tramp}.
2283 @menu
2284 * File name syntax::            @value{tramp} file name conventions.
2285 @ifset unified
2286 * Change file name syntax::     Alternative file name syntax.
2287 @end ifset
2288 * File name completion::        File name completion.
2289 * Ad-hoc multi-hops::           Declaring multiple hops in the file name.
2290 * Remote processes::            Integration with other Emacs packages.
2291 * Cleanup remote connections::  Cleanup remote connections.
2292 * Archive file names::          Access to files in file archives.
2293 @end menu
2296 @node File name syntax
2297 @section @value{tramp} file name conventions
2298 @cindex file name syntax
2299 @cindex file name examples
2301 @file{@trampfn{method,host,/path/to/file}} opens file @var{/path/to/file}
2302 on the remote host @var{host}, using the method @var{method}.
2304 @table @file
2305 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}.emacs
2306 For the file @file{.emacs} located in the home directory, on the host
2307 @code{melancholia}, using method @code{ssh}.
2309 @item @value{prefix}ssh@value{postfixhop}melancholia.danann.net@value{postfix}.emacs
2310 For the file @file{.emacs} specified using the fully qualified domain name of
2311 the host.
2313 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~/.emacs
2314 For the file @file{.emacs} specified using the @file{~}, which is expanded.
2316 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}~daniel/.emacs
2317 For the file @file{.emacs} located in @code{daniel}'s home directory
2318 on the host, @code{melancholia}.  The @file{~<user>} construct is
2319 expanded to the home directory of that user on the remote host.
2321 @item @value{prefix}ssh@value{postfixhop}melancholia@value{postfix}/etc/squid.conf
2322 For the file @file{/etc/squid.conf} on the host @code{melancholia}.
2324 @end table
2326 @var{host} can take IPv4 or IPv6 address, as in
2327 @file{@trampfn{ssh,127.0.0.1,.emacs}} or
2328 @file{@trampfn{ssh,@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
2329 @ifset unified
2330 For syntactical reasons, IPv6 addresses must be embedded in square
2331 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
2332 @end ifset
2334 By default, @value{tramp} will use the current local user name as the
2335 remote user name for log in to the remote host.  Specifying a different
2336 name using the proper syntax will override this default behavior:
2338 @example
2339 @trampfn{method,user@@host,path/to/file}
2340 @end example
2342 @file{@trampfn{ssh,daniel@@melancholia,.emacs}} is for file
2343 @file{.emacs} in @code{daniel}'s home directory on the host,
2344 @code{melancholia}, accessing via method @code{ssh}.
2346 For specifying port numbers, affix @file{#<port>} to the host
2347 name.  For example: @file{@trampfn{ssh,daniel@@melancholia#42,.emacs}}.
2349 All method, user name, host name, port number and local name parts are
2350 optional, @xref{Default Method}, @xref{Default User}, @xref{Default Host}.
2351 @ifset unified
2352 For syntactical reasons, the default method must be indicated by the
2353 pseudo method @file{-}.
2354 @end ifset
2357 @ifset unified
2358 @node Change file name syntax
2359 @section Alternative file name syntax
2360 @cindex change file name syntax
2361 @cindex alternative file name syntax
2363 The syntax described in @ref{File name syntax} is the @code{default}
2364 syntax, which is active after Emacs startup.  However, this can be
2365 changed.
2367 @deffn Command tramp-change-syntax syntax
2368 This command changes the syntax @value{tramp} uses for remote file
2369 names.  Beside the @code{default} value, @var{syntax} can be
2371 @itemize
2372 @item @code{simplified}
2373 @cindex simplified syntax
2375 The remote file name syntax is similar to the syntax used by Ange FTP.
2376 A remote file name has the form
2377 @code{@value{prefix}user@@host@value{postfix}path/to/file}.  The
2378 @code{user@@} part is optional, and the method is determined by
2379 @ref{Default Method}.
2381 @item @code{separate}
2382 @cindex separate syntax
2384 @clear unified
2385 @set separate
2386 @include trampver.texi
2387 The remote file name syntax is similar to the syntax used by XEmacs.
2388 A remote file name has the form
2389 @code{@trampfn{method,user@@host,path/to/file}}.  The @code{method}
2390 and @code{user@@} parts are optional.
2391 @clear separate
2392 @set unified
2393 @include trampver.texi
2394 @end itemize
2395 @end deffn
2397 @defvar tramp-file-name-regexp
2398 This variable keeps a regexp which matches the selected remote file
2399 name syntax.  However, it is not recommended to use this variable in
2400 external packages, a call of @code{file-remote-p} is much more
2401 appropriate.
2402 @ifinfo
2403 @pxref{Magic File Names, , , elisp}
2404 @end ifinfo
2405 @end defvar
2406 @end ifset
2409 @node File name completion
2410 @section File name completion
2411 @cindex file name completion
2413 @value{tramp} can complete the following @value{tramp} file name
2414 components: method names, user names, host names, and file names
2415 located on remote hosts.  Enable this by activating partial completion
2416 in @file{.emacs}.
2417 @ifinfo
2418 @xref{Completion Options, , , emacs}.
2419 @end ifinfo
2421 For example, type @kbd{C-x C-f @value{prefixwithspace} s @key{TAB}},
2422 @value{tramp} completion choices show up as
2424 @example
2425 @group
2426 @multitable @columnfractions .2 .2 .2 .2 .2
2427 @item @c
2428   sbin/ @tab @c
2429   @value{prefixhop}scp@value{postfix} @tab @c
2430   @value{prefixhop}scpx@value{postfix} @tab @c
2431   @value{prefixhop}sftp@value{postfix} @tab @c
2432   @value{prefixhop}sg@value{postfix}
2433 @item @c
2434   @value{prefixhop}smb@value{postfix} @tab @c
2435   srv/ @tab @c
2436   @value{prefixhop}ssh@value{postfix} @tab @c
2437   @value{prefixhop}sshx@value{postfix} @tab @c
2438   @value{prefixhop}su@value{postfix}
2439 @item @c
2440   @value{prefixhop}sudo@value{postfix} @tab @c
2441   sys/
2442 @end multitable
2443 @end group
2444 @end example
2446 @samp{@value{prefixhop}ssh@value{postfixhop}} is a possible
2447 completion for the respective method, and @samp{sbin/} stands for the
2448 directory @file{/sbin} on your local host.
2450 Type @kbd{s h @value{postfixhop}} for the minibuffer completion to
2451 @samp{@value{prefix}ssh@value{postfixhop}}.  Typing @kbd{@key{TAB}}
2452 shows host names @value{tramp} extracts from @file{~/.ssh/config}
2453 file, for example.
2455 @example
2456 @group
2457 @multitable @columnfractions .5 .5
2458 @item @c
2459   @value{prefixhop}ssh@value{postfixhop}127.0.0.1@value{postfix} @tab @c
2460   @value{prefixhop}ssh@value{postfixhop}192.168.0.1@value{postfix}
2461 @item @c
2462   @value{prefixhop}ssh@value{postfixhop}@value{ipv6prefix}::1@value{ipv6postfix}@value{postfix} @tab @c
2463   @value{prefixhop}ssh@value{postfixhop}localhost@value{postfix}
2464 @item @c
2465   @value{prefixhop}ssh@value{postfixhop}melancholia.danann.net@value{postfix} @tab @c
2466   @value{prefixhop}ssh@value{postfixhop}melancholia@value{postfix}
2467 @end multitable
2468 @end group
2469 @end example
2471 Choose a host from the above list and then continue to complete file
2472 names on that host.
2474 When the configuration (@pxref{Customizing Completion}) includes user
2475 names, then the completion lists will account for the user names as well.
2477 Remote hosts previously visited or hosts whose connections are kept
2478 persistently (@pxref{Connection caching}) will be included in the
2479 completion lists.
2481 After remote host name completion comes completion of file names on
2482 the remote host.  It works the same as with local host file completion
2483 except that killing with double-slash @file{//} kills only the file
2484 name part of the @value{tramp} file name syntax.  A triple-slash
2485 stands for the default behavior.
2486 @ifinfo
2487 @xref{Minibuffer File, , , emacs}.
2488 @end ifinfo
2490 @noindent
2491 Example:
2493 @example
2494 @group
2495 @kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin//etc} @key{TAB}}
2496      @print{} @trampfn{ssh,melancholia,/etc}
2498 @kbd{C-x C-f @trampfn{ssh,melancholia,//etc} @key{TAB}}
2499      @print{} /etc
2501 @kbd{C-x C-f @trampfn{ssh,melancholia,/usr/local/bin///etc} @key{TAB}}
2502      @print{} /etc
2503 @end group
2504 @end example
2506 During file name completion, remote directory contents are re-read
2507 regularly to account for any changes in the filesystem that may affect
2508 the completion candidates.  Such re-reads can account for changes to
2509 the file system by applications outside Emacs (@pxref{Connection
2510 caching}).
2512 @defopt tramp-completion-reread-directory-timeout
2513 The timeout is number of seconds since last remote command for
2514 rereading remote directory contents.  A value of 0 re-reads
2515 immediately during file name completion, @code{nil} uses cached
2516 directory contents.
2517 @end defopt
2520 @node Ad-hoc multi-hops
2521 @section Declaring multiple hops in the file name
2522 @cindex multi-hop, ad-hoc
2523 @cindex proxy hosts, ad-hoc
2525 @value{tramp} file name syntax can accommodate ad hoc specification of
2526 multiple proxies without using @option{tramp-default-proxies-alist}
2527 configuration setup(@pxref{Multi-hops}).
2529 Each proxy is specified using the same syntax as the remote host
2530 specification minus the file name part.  Each hop is separated by a
2531 @samp{|}.  Chain the proxies from the starting host to the destination
2532 remote host name and file name.  For example, hopping over a single
2533 proxy @samp{bird@@bastion} to a remote file on @samp{you@@remotehost}:
2535 @example
2536 @c @kbd{C-x C-f @trampfn{ssh@value{postfixhop}bird@@bastion|ssh,you,remotehost,/path}}
2537 @kbd{C-x C-f @value{prefix}ssh@value{postfixhop}bird@@bastion|ssh@value{postfixhop}you@@remotehost@value{postfix}/path}
2538 @end example
2540 Proxies can take patterns @code{%h} or @code{%u}.
2542 @value{tramp} adds the ad-hoc definitions on the fly to
2543 @option{tramp-default-proxies-alist} and is available for re-use
2544 during that Emacs session.  Subsequent @value{tramp} connections to
2545 the same remote host can then use the shortcut form:
2546 @samp{@trampfn{ssh,you@@remotehost,/path}}.
2548 @defopt tramp-save-ad-hoc-proxies
2549 For ad-hoc definitions to be saved automatically in
2550 @option{tramp-default-proxies-alist} for future Emacs sessions, set
2551 @option{tramp-save-ad-hoc-proxies} to non-@code{nil}.
2553 @lisp
2554 (customize-set-variable 'tramp-save-ad-hoc-proxies t)
2555 @end lisp
2556 @end defopt
2559 @node Remote processes
2560 @section Integration with other Emacs packages
2561 @cindex compile
2562 @cindex recompile
2564 @value{tramp} supports starting new running processes on the remote
2565 host for discovering remote file names.  Emacs packages on the remote
2566 host need no specific modifications for @value{tramp}'s use.
2568 This type of integration does not work with the @option{ftp} method,
2569 and does not support the pty association as specified in
2570 @code{start-file-process}.
2572 @code{process-file} and @code{start-file-process} work on the remote
2573 host when the variable @code{default-directory} is remote:
2575 @lisp
2576 @group
2577 (let ((default-directory "/ssh:remote.host:"))
2578   (start-file-process "grep" (get-buffer-create "*grep*")
2579                       "/bin/sh" "-c" "grep -e tramp *"))
2580 @end group
2581 @end lisp
2583 Remote processes do not apply to GVFS (see @ref{GVFS based methods})
2584 because the remote file system is mounted on the local host and
2585 @value{tramp} just accesses by changing the @code{default-directory}.
2587 @value{tramp} starts a remote process when a command is executed in a
2588 remote file or directory buffer.  As of now, these packages have been
2589 integrated to work with @value{tramp}: @file{compile.el} (commands
2590 like @code{compile} and @code{grep}) and @file{gud.el} (@code{gdb} or
2591 @code{perldb}).
2593 For @value{tramp} to find the command on the remote, it must be
2594 accessible through the default search path as setup by @value{tramp}
2595 upon first connection.  Alternatively, use an absolute path or extend
2596 @option{tramp-remote-path} (see @ref{Remote programs}):
2598 @lisp
2599 @group
2600 (add-to-list 'tramp-remote-path "~/bin")
2601 (add-to-list 'tramp-remote-path "/appli/pub/bin")
2602 @end group
2603 @end lisp
2605 Customize user option @option{tramp-remote-process-environment} to
2606 suit the remote program's environment for the remote host.
2607 @option{tramp-remote-process-environment} is a list of strings
2608 structured similar to @code{process-environment}, where each element
2609 is a string of the form @samp{ENVVARNAME=VALUE}.
2611 To avoid any conflicts with local host environment variables set
2612 through local configuration files, such as @file{~/.profile}, use
2613 @samp{ENVVARNAME=} to unset them for the remote environment.
2615 @noindent
2616 Use @code{add-to-list} to add entries:
2618 @lisp
2619 (add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
2620 @end lisp
2622 Modifying or deleting already existing values in the
2623 @option{tramp-remote-process-environment} list may not be feasible on
2624 restricted remote hosts.  For example, some system administrators
2625 disallow changing @env{HISTORY} environment variable.  To accommodate
2626 such restrictions when using @value{tramp}, fix the
2627 @option{tramp-remote-process-environment} by the following code in the
2628 local @file{.emacs} file:
2630 @lisp
2631 @group
2632 (let ((process-environment tramp-remote-process-environment))
2633   (setenv "HISTORY" nil)
2634   (setq tramp-remote-process-environment process-environment))
2635 @end group
2636 @end lisp
2638 Setting the @env{ENV} environment variable instructs some shells to
2639 read an initialization file.  Per default, @value{tramp} has disabled
2640 this.  You could overwrite this behavior by evaluating
2642 @lisp
2643 @group
2644 (let ((process-environment tramp-remote-process-environment))
2645   (setenv "ENV" "$HOME/.profile")
2646   (setq tramp-remote-process-environment process-environment))
2647 @end group
2648 @end lisp
2650 @value{tramp} does not use the defaults specified in
2651 @code{process-environment} for running @code{process-file} or
2652 @code{start-file-process} on remote hosts.  When values from
2653 @code{process-environment} are needed for remote processes, then set
2654 them as follows:
2656 @lisp
2657 @group
2658 (let ((process-environment (cons "HGPLAIN=1" process-environment)))
2659   (process-file @dots{}))
2660 @end group
2661 @end lisp
2663 This works only for environment variables not already set in the
2664 @code{process-environment}.
2666 For integrating other Emacs packages so @value{tramp} can execute
2667 remotely, please file a bug report.  @xref{Bug Reports}.
2670 @subsection Running remote programs that create local X11 windows
2672 To allow a remote program to create an X11 window on the local host,
2673 set the @env{DISPLAY} environment variable for the remote host as
2674 follows in the local @file{.emacs} file:
2676 @lisp
2677 @group
2678 (add-to-list 'tramp-remote-process-environment
2679              (format "DISPLAY=%s" (getenv "DISPLAY")))
2680 @end group
2681 @end lisp
2683 @noindent
2684 @code{(getenv "DISPLAY")} should return a recognizable name for the
2685 local host that the remote host can redirect X11 window
2686 interactions.  If querying for a recognizable name is not possible for
2687 whatever reason, then replace @code{(getenv "DISPLAY")} with a
2688 hard-coded, fixed name.  Note that using @code{:0} for X11 display name
2689 here will not work as expected.
2691 An alternate approach is specify @code{ForwardX11 yes} or
2692 @code{ForwardX11Trusted yes} in the file @file{~/.ssh/config} on the
2693 local host.
2696 @subsection Running @code{shell} on a remote host
2697 @cindex shell
2699 Set @option{explicit-shell-file-name} to the appropriate shell name
2700 when using @value{tramp} between two hosts with different operating
2701 systems, such as @samp{windows-nt} and @samp{gnu/linux}.  This option
2702 ensures the correct name of the remote shell program.
2704 When @option{explicit-shell-file-name} is equal to @code{nil}, calling
2705 @code{shell} interactively will prompt for a shell name.
2707 Starting with Emacs 26, you could use connection-local variables for
2708 setting different values of @option{explicit-shell-file-name} for
2709 different remote hosts.
2710 @ifinfo
2711 @pxref{Connection Local Variables, , , elisp}
2712 @end ifinfo
2714 @lisp
2715 @group
2716 (connection-local-set-profile-variables
2717   'remote-bash
2718   '((explicit-shell-file-name . "/bin/bash")
2719     (explicit-bash-args . ("-i"))))
2720 @end group
2722 @group
2723 (connection-local-set-profile-variables
2724   'remote-ksh
2725   '((explicit-shell-file-name . "/bin/ksh")
2726     (explicit-ksh-args . ("-i"))))
2727 @end group
2729 @group
2730 (connection-local-set-profiles
2731   '(:application tramp :protocol "ssh" :machine "localhost")
2732   'remote-bash)
2733 @end group
2735 @group
2736 (connection-local-set-profiles
2737   `(:application tramp :protocol "sudo"
2738     :user "root" :machine ,(system-name))
2739   'remote-ksh)
2740 @end group
2741 @end lisp
2744 @subsection Running @code{shell-command} on a remote host
2745 @cindex shell-command
2747 @code{shell-command} executes commands synchronously or asynchronously
2748 on remote hosts and displays output in buffers on the local
2749 host.  Example:
2751 @example
2752 @group
2753 @kbd{C-x C-f @trampfn{sudo,,} @key{RET}}
2754 @kbd{M-! tail -f /var/log/syslog.log & @key{RET}}
2755 @end group
2756 @end example
2758 @command{tail} command outputs continuously to the local buffer,
2759 @file{*Async Shell Command*}
2761 @kbd{M-x auto-revert-tail-mode} runs similarly showing continuous output.
2764 @subsection Running @code{eshell} on a remote host
2765 @cindex eshell
2767 @value{tramp} is integrated into @file{eshell.el}, which enables
2768 interactive eshell sessions on remote hosts at the command prompt.
2769 You must add the module @code{em-tramp} to @code{eshell-modules-list}.
2770 Here's a sample interaction after opening @kbd{M-x eshell} on a remote
2771 host:
2773 @example
2774 @group
2775 @b{~ $} cd @trampfn{sudo,,/etc} @key{RET}
2776 @b{@trampfn{sudo,root@@host,/etc} $} hostname @key{RET}
2777 host
2778 @b{@trampfn{sudo,root@@host,/etc} $} id @key{RET}
2779 uid=0(root) gid=0(root) groups=0(root)
2780 @b{@trampfn{sudo,root@@host,/etc} $} find-file shadow @key{RET}
2781 #<buffer shadow>
2782 @b{@trampfn{sudo,root@@host,/etc} $}
2783 @end group
2784 @end example
2786 @code{eshell} added custom @code{su} and @code{sudo} commands that set
2787 the default directory correctly for the @file{*eshell*} buffer.
2788 @value{tramp} silently updates @option{tramp-default-proxies-alist}
2789 with an entry for this directory (@pxref{Multi-hops}):
2791 @example
2792 @group
2793 @b{~ $} cd @trampfn{ssh,user@@remotehost,/etc} @key{RET}
2794 @b{@trampfn{ssh,user@@remotehost,/etc} $} find-file shadow @key{RET}
2795 File is not readable: @trampfn{ssh,user@@remotehost,/etc/shadow}
2796 @b{@trampfn{ssh,user@@remotehost,/etc} $} sudo find-file shadow @key{RET}
2797 #<buffer shadow>
2798 @end group
2800 @group
2801 @b{@trampfn{ssh,user@@remotehost,/etc} $} su - @key{RET}
2802 @b{@trampfn{su,root@@remotehost,/root} $} id @key{RET}
2803 uid=0(root) gid=0(root) groups=0(root)
2804 @b{@trampfn{su,root@@remotehost,/root} $}
2805 @end group
2806 @end example
2809 @anchor{Running a debugger on a remote host}
2810 @subsection Running a debugger on a remote host
2811 @cindex gud
2812 @cindex gdb
2813 @cindex perldb
2815 @file{gud.el} provides a unified interface to symbolic debuggers
2816 @ifinfo
2817 (@ref{Debuggers, , , emacs}).
2818 @end ifinfo
2819 @value{tramp} can run debug on remote hosts by calling @code{gdb}
2820 with a remote file name:
2822 @example
2823 @group
2824 @kbd{M-x gdb @key{RET}}
2825 @b{Run gdb (like this):} gdb -i=mi @trampfn{ssh,host,~/myprog} @key{RET}
2826 @end group
2827 @end example
2829 Since the remote @code{gdb} and @code{gdb-inferior} processes do not
2830 belong to the same process group on the remote host, there will be a
2831 warning, which can be ignored:
2833 @example
2834 &"warning: GDB: Failed to set controlling terminal: Operation not permitted\n"
2835 @end example
2837 Relative file names are based on the remote default directory.  When
2838 @file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
2839 calls include:
2841 @example
2842 @group
2843 @kbd{M-x perldb @key{RET}}
2844 @b{Run perldb (like this):} perl -d myprog.pl @key{RET}
2845 @end group
2846 @end example
2848 Just the local part of a remote file name, such as @kbd{perl -d
2849 /home/user/myprog.pl}, is not possible.
2851 Arguments of the program to be debugged must be literal, can take
2852 relative or absolute paths, but not remote paths.
2855 @subsection Running remote processes on MS Windows hosts
2856 @cindex winexe
2857 @cindex powershell
2859 @command{winexe} runs processes on a remote MS Windows host, and
2860 @value{tramp} can use it for @code{process-file} and
2861 @code{start-file-process}.
2863 @code{tramp-smb-winexe-program} specifies the local @command{winexe}
2864 command.  Powershell V2.0 on the remote host is required to run
2865 processes triggered from @value{tramp}.
2867 @option{explicit-shell-file-name} and @option{explicit-*-args} have to
2868 be set properly so @kbd{M-x shell} can open a proper remote shell on a
2869 MS Windows host.  To open @command{cmd}, set it as follows:
2871 @lisp
2872 @group
2873 (setq explicit-shell-file-name "cmd"
2874       explicit-cmd-args '("/q"))
2875 @end group
2876 @end lisp
2878 @noindent
2879 To open @command{powershell} as a remote shell, use this:
2881 @lisp
2882 @group
2883 (setq explicit-shell-file-name "powershell"
2884       explicit-powershell-args '("-file" "-"))
2885 @end group
2886 @end lisp
2889 @node Cleanup remote connections
2890 @section Cleanup remote connections
2891 @cindex cleanup
2893 @value{tramp} provides several ways to flush remote connections.
2895 @deffn Command tramp-cleanup-connection vec
2896 This command flushes all connection related objects.  @option{vec} is
2897 the internal representation of a remote connection.  When called
2898 interactively, this command lists active remote connections in the
2899 minibuffer.  Each connection is of the format
2900 @file{@trampfn{method,user@@host,}}.  Flushing remote connections also
2901 cleans the password cache (@pxref{Password handling}), file cache,
2902 connection cache (@pxref{Connection caching}), and connection buffers.
2903 @end deffn
2905 @deffn Command tramp-cleanup-this-connection
2906 Flushes only the current buffer's remote connection objects, the same
2907 as in @code{tramp-cleanup-connection}.
2908 @end deffn
2910 @deffn Command tramp-cleanup-all-connections
2911 Flushes all active remote connection objects, the same as in
2912 @code{tramp-cleanup-connection}.
2913 @end deffn
2915 @deffn Command tramp-cleanup-all-buffers
2916 Just as for @code{tramp-cleanup-all-connections}, all remote
2917 connections are cleaned up in addition to killing buffers related to
2918 that remote connection.
2919 @end deffn
2922 @node Archive file names
2923 @section Archive file names
2924 @cindex file archives
2925 @cindex archive file names
2926 @cindex method archive
2927 @cindex archive method
2929 @value{tramp} offers also transparent access to files inside file
2930 archives.  This is possible only on machines which have installed the
2931 virtual file system for the Gnome Desktop (GVFS), @ref{GVFS based
2932 methods}.  Internally, file archives are mounted via the GVFS
2933 @option{archive} method.
2935 A file archive is a regular file of kind @file{/path/to/dir/file.EXT}.
2936 The extension @samp{.EXT} identifies the type of the file archive.  A
2937 file inside a file archive, called archive file name, has the name
2938 @file{/path/to/dir/file.EXT/dir/file}.
2940 Most of the @ref{Magic File Names, , magic file name operations,
2941 elisp}, are implemented for archive file names, exceptions are all
2942 operations which write into a file archive, and process related
2943 operations.  Therefore, functions like
2945 @lisp
2946 (copy-file "/path/to/dir/file.tar/dir/file" "/somewhere/else")
2947 @end lisp
2949 @noindent
2950 work out of the box.  This is also true for file name completion, and
2951 for libraries like @code{dired} or @code{ediff}, which accept archive
2952 file names as well.
2954 @vindex tramp-archive-suffixes
2955 File archives are identified by the file name extension @samp{.EXT}.
2956 Since GVFS uses internally the library @code{libarchive(3)}, all
2957 suffixes, which are accepted by this library, work also for archive
2958 file names.  Accepted suffixes are listed in the constant
2959 @code{tramp-archive-suffixes}.  They are
2961 @itemize
2962 @item @samp{.7z} ---
2963 7-Zip archives
2964 @cindex 7z, file archive suffix
2965 @cindex file archive suffix 7z
2967 @item @samp{.apk} ---
2968 Android package kits
2969 @cindex apk, file archive suffix
2970 @cindex file archive suffix apk
2972 @item @samp{.ar} ---
2973 UNIX archiver formats
2974 @cindex ar, file archive suffix
2975 @cindex file archive suffix ar
2977 @item @samp{.cab}, @samp{.CAB} ---
2978 Microsoft Windows cabinets
2979 @cindex cab, file archive suffix
2980 @cindex CAB, file archive suffix
2981 @cindex file archive suffix cab
2982 @cindex file archive suffix CAB
2984 @item @samp{.cpio} ---
2985 CPIO archives
2986 @cindex cpio, file archive suffix
2987 @cindex file archive suffix cpio
2989 @item @samp{.deb} ---
2990 Debian packages
2991 @cindex deb, file archive suffix
2992 @cindex file archive suffix deb
2994 @item @samp{.depot} ---
2995 HP-UX SD depots
2996 @cindex depot, file archive suffix
2997 @cindex file archive suffix depot
2999 @item @samp{.exe} ---
3000 Self extracting Microsoft Windows EXE files
3001 @cindex exe, file archive suffix
3002 @cindex file archive suffix exe
3004 @item @samp{.iso} ---
3005 ISO 9660 images
3006 @cindex iso, file archive suffix
3007 @cindex file archive suffix iso
3009 @item @samp{.jar} ---
3010 Java archives
3011 @cindex jar, file archive suffix
3012 @cindex file archive suffix jar
3014 @item @samp{.lzh}, @samp{LZH} ---
3015 Microsoft Windows compressed LHA archives
3016 @cindex lzh, file archive suffix
3017 @cindex LZH, file archive suffix
3018 @cindex file archive suffix lzh
3019 @cindex file archive suffix LZH
3021 @item @samp{.mtree} ---
3022 BSD mtree format
3023 @cindex mtree, file archive suffix
3024 @cindex file archive suffix mtree
3026 @item @samp{.pax} ---
3027 Posix archives
3028 @cindex pax, file archive suffix
3029 @cindex file archive suffix pax
3031 @item @samp{.rar} ---
3032 RAR archives
3033 @cindex rar, file archive suffix
3034 @cindex file archive suffix rar
3036 @item @samp{.rpm} ---
3037 Red Hat packages
3038 @cindex rpm, file archive suffix
3039 @cindex file archive suffix rpm
3041 @item @samp{.shar} ---
3042 Shell archives
3043 @cindex shar, file archive suffix
3044 @cindex file archive suffix shar
3046 @item @samp{.tar}, @samp{tbz}, @samp{tgz}, @samp{tlz}, @samp{txz} ---
3047 (Compressed) tape archives
3048 @cindex tar, file archive suffix
3049 @cindex tbz, file archive suffix
3050 @cindex tgz, file archive suffix
3051 @cindex tlz, file archive suffix
3052 @cindex txz, file archive suffix
3053 @cindex file archive suffix tar
3054 @cindex file archive suffix tbz
3055 @cindex file archive suffix tgz
3056 @cindex file archive suffix tlz
3057 @cindex file archive suffix txz
3059 @item @samp{.warc} ---
3060 Web archives
3061 @cindex warc, file archive suffix
3062 @cindex file archive suffix warc
3064 @item @samp{.xar} ---
3065 macOS XAR archives
3066 @cindex xar, file archive suffix
3067 @cindex file archive suffix xar
3069 @item @samp{.xps} ---
3070 Open XML Paper Specification (OpenXPS) documents
3071 @cindex xps, file archive suffix
3072 @cindex file archive suffix xps
3074 @item @samp{.zip}, @samp{.ZIP} ---
3075 ZIP archives
3076 @cindex zip, file archive suffix
3077 @cindex ZIP, file archive suffix
3078 @cindex file archive suffix zip
3079 @cindex file archive suffix ZIP
3080 @end itemize
3082 @vindex tramp-archive-compression-suffixes
3083 File archives could also be compressed, identified by an additional
3084 compression suffix.  Valid compression suffixes are listed in the
3085 constant @code{tramp-archive-compression-suffixes}.  They are
3086 @samp{.bz2}, @samp{.gz}, @samp{.lrz}, @samp{.lz}, @samp{.lz4},
3087 @samp{.lzma}, @samp{.lzo}, @samp{.uu}, @samp{.xz} and @samp{.Z}.  A
3088 valid archive file name would be
3089 @file{/path/to/dir/file.tar.gz/dir/file}.  Even several suffixes in a
3090 row are possible, like @file{/path/to/dir/file.tar.gz.uu/dir/file}.
3092 @vindex tramp-archive-all-gvfs-methods
3093 An archive file name could be a remote file name, as in
3094 @file{/ftp:anonymous@@ftp.gnu.org:/gnu/tramp/tramp-2.3.2.tar.gz/INSTALL}.
3095 Since all file operations are mapped internally to GVFS operations,
3096 remote file names supported by @code{tramp-gvfs} perform better,
3097 because no local copy of the file archive must be downloaded first.
3098 For example, @samp{/sftp:user@@host:...} performs better than the
3099 similar @samp{/scp:user@@host:...}.  See the constant
3100 @code{tramp-archive-all-gvfs-methods} for a complete list of
3101 @code{tramp-gvfs} supported method names.
3103 If @value{tramp} is loaded and @code{url-handler-mode} is enabled,
3104 archives could be visited via URLs, like
3105 @file{https://ftp.gnu.org/gnu/tramp/tramp-2.3.2.tar.gz/INSTALL}.  This
3106 allows complex file operations like
3108 @lisp
3109 @group
3110 (progn
3111   (require 'tramp)
3112   (url-handler-mode 1)
3113   (ediff-directories
3114    "https://ftp.gnu.org/gnu/tramp/tramp-2.3.1.tar.gz/tramp-2.3.1"
3115    "https://ftp.gnu.org/gnu/tramp/tramp-2.3.2.tar.gz/tramp-2.3.2" ""))
3116 @end group
3117 @end lisp
3119 It is even possible to access file archives in file archives, as
3121 @lisp
3122 @group
3123 (find-file
3124  "http://ftp.debian.org/debian/pool/main/c/coreutils/coreutils_8.28-1_amd64.deb/control.tar.gz/control")
3125 @end group
3126 @end lisp
3129 @node Bug Reports
3130 @chapter Reporting Bugs and Problems
3131 @cindex bug reports
3133 @value{tramp}'s development team is actively engaged in solving bugs
3134 and problems and looks to feature requests and suggestions.
3136 @value{tramp}'s mailing list is the place for more advice and
3137 information on working with @value{tramp}, solving problems,
3138 discussing, and general discussions about @value{tramp}.
3140 @value{tramp}'s mailing list is moderated but even non-subscribers can
3141 post for moderator approval.  Sometimes this approval step may take as
3142 long as 48 hours due to public holidays.
3144 @email{tramp-devel@@gnu.org} is the mailing list.  Messages sent to
3145 this address go to all the subscribers.  This is @emph{not} the
3146 address to send subscription requests to.
3148 To subscribe to the mailing list, visit:
3149 @uref{https://lists.gnu.org/mailman/listinfo/tramp-devel/, the
3150 @value{tramp} Mail Subscription Page}.
3152 @ifset installchapter
3153 Before sending a bug report, run the test suite first @ref{Testing}.
3154 @end ifset
3156 @findex tramp-bug
3157 Check if the bug or problem is already addressed in @xref{Frequently
3158 Asked Questions}.
3160 Run @kbd{M-x tramp-bug} to generate a buffer with details of the
3161 system along with the details of the @value{tramp}
3162 installation.  Please include these details with the bug report.
3164 The bug report must describe in as excruciating detail as possible the
3165 steps required to reproduce the problem.  These details must include
3166 the setup of the remote host and any special or unique conditions that
3167 exist.
3169 Include a minimal test case that reproduces the problem.  This will
3170 help the development team find the best solution and avoid unrelated
3171 detours.
3173 To exclude cache-related problems, flush all caches before running the
3174 test, @ref{Cleanup remote connections}.
3176 When including @value{tramp}'s messages in the bug report, increase
3177 the verbosity level to 6 (@pxref{Traces and Profiles, Traces}) in the
3178 @file{~/.emacs} file before repeating steps to the bug.  Include the
3179 contents of the @file{*tramp/foo*} and @file{*debug tramp/foo*}
3180 buffers with the bug report.
3182 @strong{Note} that a verbosity level greater than 6 is not necessary
3183 at this stage.  Also note that a verbosity level of 6 or greater, the
3184 contents of files and directories will be included in the debug
3185 buffer.  Passwords typed in @value{tramp} will never be included
3186 there.
3189 @node Frequently Asked Questions
3190 @chapter Frequently Asked Questions
3191 @cindex frequently asked questions
3192 @cindex FAQ
3194 @itemize @bullet
3195 @item
3196 Where is the latest @value{tramp}?
3198 @value{tramp} is available at the GNU URL:
3200 @noindent
3201 @uref{https://ftp.gnu.org/gnu/tramp/}
3203 @noindent
3204 @value{tramp}'s GNU project page is located here:
3206 @noindent
3207 @uref{https://savannah.gnu.org/projects/tramp/}
3210 @item
3211 Which systems does it work on?
3213 The package works successfully on Emacs 24, Emacs 25, Emacs 26, and
3214 Emacs 27.
3216 While Unix and Unix-like systems are the primary remote targets,
3217 @value{tramp} has equal success connecting to other platforms, such as
3218 MS Windows 7/8/10.
3221 @item
3222 How to speed up @value{tramp}?
3224 @value{tramp} does many things in the background, some of which
3225 depends on network speeds, response speeds of remote hosts, and
3226 authentication delays.  During these operations, @value{tramp}'s
3227 responsiveness slows down.  Some suggestions within the scope of
3228 @value{tramp}'s settings include:
3230 Use an external method, such as @option{scp}, which are faster than
3231 internal methods.
3233 Keep the file @option{tramp-persistency-file-name}, which is where
3234 @value{tramp} caches remote information about hosts and files.  Caching
3235 is enabled by default.  Don't disable it.
3237 Set @code{remote-file-name-inhibit-cache} to @code{nil} if remote
3238 files are not independently updated outside @value{tramp}'s control.
3239 That cache cleanup will be necessary if the remote directories or
3240 files are updated independent of @value{tramp}.
3242 Set @option{tramp-completion-reread-directory-timeout} to @code{nil} to
3243 speed up completions, @ref{File name completion}.
3245 Disable version control to avoid delays:
3247 @lisp
3248 @group
3249 (setq vc-ignore-dir-regexp
3250       (format "\\(%s\\)\\|\\(%s\\)"
3251               vc-ignore-dir-regexp
3252               tramp-file-name-regexp))
3253 @end group
3254 @end lisp
3256 If this is too radical, because you want to use version control
3257 remotely, trim @code{vc-handled-backends} to just those you care
3258 about, for example:
3260 @lisp
3261 (setq vc-handled-backends '(SVN Git))
3262 @end lisp
3264 Disable excessive traces.  Set @code{tramp-verbose} to 3 or lower,
3265 default being 3.  Increase trace levels temporarily when hunting for
3266 bugs.
3268 @item
3269 @value{tramp} does not connect to the remote host
3271 Three main reasons for why @value{tramp} does not connect to the remote host:
3273 @itemize @minus
3274 @item
3275 Unknown characters in the prompt
3277 @value{tramp} needs a clean recognizable prompt on the remote host for
3278 accurate parsing.  Shell prompts that contain escape sequences for
3279 coloring cause parsing problems.  @ref{Remote shell setup} for
3280 customizing prompt detection using regular expressions.
3282 To check if the remote host's prompt is being recognized, use this
3283 test: switch to @value{tramp} connection buffer @file{*tramp/foo*},
3284 put the cursor at the top of the buffer, and then apply the following
3285 expression:
3287 @example
3288 @kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
3289 @end example
3291 If the cursor has not moved to the prompt at the bottom of the buffer,
3292 then @value{tramp} has failed to recognize the prompt.
3294 When using zsh on remote hosts, disable zsh line editor because zsh
3295 uses left-hand side and right-hand side prompts in parallel.  Add the
3296 following line to @file{~/.zshrc}:
3298 @example
3299 [ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
3300 @end example
3302 When using fish shell on remote hosts, disable fancy formatting by
3303 adding the following to @file{~/.config/fish/config.fish}:
3305 @example
3306 @group
3307 function fish_prompt
3308   if test $TERM = "dumb"
3309      echo "\$ "
3310   else
3311      @dots{}
3312   end
3314 @end group
3315 @end example
3317 When using WinSSHD on remote hosts, @value{tramp} does not recognize
3318 the strange prompt settings.
3320 A similar problem exist with the iTerm2 shell integration, which sends
3321 proprietary escape codes when starting a shell.  This can be
3322 suppressed by changing the respective integration snippet in your
3323 @file{~/.profile} like this:
3325 @example
3326 @group
3327 [ $TERM = "dumb" ] || \
3328 test -e "$@{HOME@}/.iterm2_shell_integration.bash" && \
3329 source "$@{HOME@}/.iterm2_shell_integration.bash"
3330 @end group
3331 @end example
3333 @item
3334 Echoed characters after login
3336 @value{tramp} suppresses echos from remote hosts with the
3337 @command{stty -echo} command.  But sometimes it is too late to suppress
3338 welcome messages from the remote host containing harmful control
3339 characters.  Using @option{sshx} or @option{scpx} methods can avoid
3340 this problem because they allocate a pseudo tty.  @xref{Inline
3341 methods}.
3343 @item
3344 @value{tramp} stops transferring strings longer than 500 characters
3346 Set @code{tramp-chunksize} to 500 to get around this problem, which is
3347 related to faulty implementation of @code{process-send-string} on
3348 HP-UX, FreeBSD and Tru64 Unix systems.  Consult the documentation for
3349 @code{tramp-chunksize} to see when this is necessary.
3351 Set @code{file-precious-flag} to @code{t} for files accessed by
3352 @value{tramp} so the file contents are checked using checksum by
3353 first saving to a temporary file.
3354 @ifinfo
3355 @pxref{Saving Buffers, , , elisp}
3356 @end ifinfo
3358 @lisp
3359 @group
3360 (add-hook
3361  'find-file-hook
3362  (lambda ()
3363    (when (file-remote-p default-directory)
3364      (set (make-local-variable 'file-precious-flag) t))))
3365 @end group
3366 @end lisp
3367 @end itemize
3370 @item
3371 @value{tramp} does not recognize if a @command{ssh} session hangs
3373 @command{ssh} sessions on the local host hang when the network is
3374 down.  @value{tramp} cannot safely detect such hangs.  The network
3375 configuration for @command{ssh} can be configured to kill such hangs
3376 with the following command in the @file{~/.ssh/config}:
3378 @example
3379 @group
3380 Host *
3381      ServerAliveInterval 5
3382 @end group
3383 @end example
3386 @item
3387 @value{tramp} does not use default @command{ssh} @code{ControlPath}
3389 @value{tramp} overwrites @code{ControlPath} settings when initiating
3390 @command{ssh} sessions.  @value{tramp} does this to fend off a stall
3391 if a master session opened outside the Emacs session is no longer
3392 open.  That is why @value{tramp} prompts for the password again even
3393 if there is an @command{ssh} already open.
3395 @vindex tramp-ssh-controlmaster-options
3396 Some @command{ssh} versions support a @code{ControlPersist} option,
3397 which allows you to set the @code{ControlPath} provided the variable
3398 @code{tramp-ssh-controlmaster-options} is customized as follows:
3400 @lisp
3401 @group
3402 (customize-set-variable
3403  'tramp-ssh-controlmaster-options
3404  (concat
3405    "-o ControlPath=/tmp/ssh-ControlPath-%%r@@%%h:%%p "
3406    "-o ControlMaster=auto -o ControlPersist=yes"))
3407 @end group
3408 @end lisp
3410 Note how "%r", "%h" and "%p" must be encoded as "%%r", "%%h" and
3411 "%%p".
3413 @vindex tramp-use-ssh-controlmaster-options
3414 If the @file{~/.ssh/config} is configured appropriately for the above
3415 behavior, then any changes to @command{ssh} can be suppressed with
3416 this @code{nil} setting:
3418 @lisp
3419 (customize-set-variable 'tramp-use-ssh-controlmaster-options nil)
3420 @end lisp
3423 @item
3424 File name completion does not work with @value{tramp}
3426 @acronym{ANSI} escape sequences from the remote shell may cause errors
3427 in @value{tramp}'s parsing of remote buffers.
3429 To test if this is the case, open a remote shell and check if the output
3430 of @command{ls} is in color.
3432 To disable @acronym{ANSI} escape sequences from the remote hosts,
3433 disable @samp{--color=yes} or @samp{--color=auto} in the remote host's
3434 @file{.bashrc} or @file{.profile}.  Turn this alias on and off to see
3435 if file name completion works.
3437 @item
3438 File name completion does not work in directories with large number of
3439 files
3441 This may be related to globbing, which is the use of shell's ability
3442 to expand wild card specifications, such as @samp{*.c}.  For
3443 directories with large number of files, globbing might exceed the
3444 shell's limit on length of command lines and hang.  @value{tramp} uses
3445 globbing.
3447 To test if globbing hangs, open a shell on the remote host and then
3448 run @command{ls -d * ..?* > /dev/null}.
3450 When testing, ensure the remote shell is the same shell
3451 (@command{/bin/sh}, @command{ksh} or @command{bash}), that
3452 @value{tramp} uses when connecting to that host.
3455 @item
3456 How to get notified after @value{tramp} completes file transfers?
3458 Make Emacs beep after reading from or writing to the remote host with
3459 the following code in @file{~/.emacs} file.
3461 @lisp
3462 @group
3463 (defadvice tramp-handle-write-region
3464   (after tramp-write-beep-advice activate)
3465   "Make tramp beep after writing a file."
3466   (interactive)
3467   (beep))
3468 @end group
3470 @group
3471 (defadvice tramp-handle-do-copy-or-rename-file
3472   (after tramp-copy-beep-advice activate)
3473   "Make tramp beep after copying a file."
3474   (interactive)
3475   (beep))
3476 @end group
3478 @group
3479 (defadvice tramp-handle-insert-file-contents
3480   (after tramp-insert-beep-advice activate)
3481   "Make tramp beep after inserting a file."
3482   (interactive)
3483   (beep))
3484 @end group
3485 @end lisp
3488 @item
3489 How to get a Visual Warning when working with @samp{root} privileges?
3490 Host indication in the mode line?
3492 Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
3493 Enable it via @kbd{M-x load-theme @key{RET} tramp}.  Further
3494 customization is explained in user option
3495 @option{tramp-theme-face-remapping-alist}.
3498 @item
3499 Remote host does not understand default options for directory listing
3501 Emacs computes the @command{dired} options based on the local host but
3502 if the remote host cannot understand the same @command{ls} command,
3503 then set them with a hook as follows:
3505 @lisp
3506 @group
3507 (add-hook
3508  'dired-before-readin-hook
3509  (lambda ()
3510    (when (file-remote-p default-directory)
3511      (setq dired-actual-switches "-al"))))
3512 @end group
3513 @end lisp
3516 @item
3517 Why is @file{~/.sh_history} file on the remote host growing?
3519 Due to the remote shell saving tilde expansions triggered by
3520 @value{tramp}, the history file is probably growing rapidly.
3521 @value{tramp} can suppress this behaviour with the user option
3522 @code{tramp-histfile-override}.  When set to @code{t}, environment
3523 variable @env{HISTFILE} is unset, and environment variables
3524 @env{HISTFILESIZE} @env{HISTSIZE} are set to 0.
3526 Alternatively, @code{tramp-histfile-override} could be a string.
3527 Environment variable @env{HISTFILE} is set to this file name then.  Be
3528 careful when setting to @file{/dev/null}; this might result in
3529 undesired results when using @command{bash} as remote shell.
3531 Another approach is to disable @value{tramp}'s handling of the
3532 @env{HISTFILE} at all by setting @code{tramp-histfile-override} to
3533 @code{nil}.  In this case, saving history could be turned off by
3534 putting this shell code in the @file{.bashrc} or @file{.kshrc} file:
3536 @example
3537 @group
3538 if [ -f $HOME/.sh_history ] ; then
3539    /bin/rm $HOME/.sh_history
3541 if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
3542    unset HISTFILE
3544 if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
3545    unset HISTSIZE
3547 @end group
3548 @end example
3550 For @option{ssh}-based method, add the following line to your
3551 @file{~/.ssh/environment} file:
3553 @example
3554 HISTFILE=/dev/null
3555 @end example
3558 @item
3559 How to shorten long file names when typing in @value{tramp}?
3561 Adapt several of these approaches to reduce typing.  If the full name
3562 is @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, then:
3564 @enumerate
3566 @item
3567 Use default values for method name and user name:
3569 You can define default methods and user names for hosts,
3570 (@pxref{Default Method}, @pxref{Default User}):
3572 @lisp
3573 @group
3574 (custom-set-variables
3575  '(tramp-default-method "ssh")
3576  '(tramp-default-user "news"))
3577 @end group
3578 @end lisp
3580 The reduced typing: @kbd{C-x C-f @trampfn{-,news.my.domain,/opt/news/etc}}.
3582 @strong{Note} that there are some useful shortcuts already.  Accessing
3583 your local host as @samp{root} user, is possible just by @kbd{C-x C-f
3584 @trampfn{su,,}}.
3586 @item
3587 Use configuration options of the access method:
3589 Programs used for access methods already offer powerful configurations
3590 (@pxref{Customizing Completion}).  For @option{ssh}, configure the
3591 file @file{~/.ssh/config}:
3593 @example
3594 @group
3595 Host xy
3596      HostName news.my.domain
3597      User news
3598 @end group
3599 @end example
3601 The reduced typing: @kbd{C-x C-f @trampfn{ssh,xy,/opt/news/etc}}.
3603 Depending on the number of files in the directories, host names
3604 completion can further reduce key strokes: @kbd{C-x C-f
3605 @value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3607 @item
3608 Use environment variables to expand long strings
3610 For long file names, set up environment variables that are expanded in
3611 the minibuffer.  Environment variables are set either outside Emacs or
3612 inside Emacs with Lisp:
3614 @lisp
3615 (setenv "xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")
3616 @end lisp
3618 The reduced typing: @kbd{C-x C-f $xy @key{RET}}.
3620 @strong{Note} that file name cannot be edited here because the
3621 environment variables are not expanded during editing in the
3622 minibuffer.
3624 @item Define own keys:
3626 Redefine another key sequence in Emacs for @kbd{C-x C-f}:
3628 @lisp
3629 @group
3630 (global-set-key
3631  [(control x) (control y)]
3632  (lambda ()
3633    (interactive)
3634    (find-file
3635     (read-file-name
3636      "Find @value{tramp} file: "
3637      "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))))
3638 @end group
3639 @end lisp
3641 Simply typing @kbd{C-x C-y} would prepare minibuffer editing of file
3642 name.
3644 See @uref{https://www.emacswiki.org/emacs/TrampMode, the Emacs Wiki}
3645 for a more comprehensive example.
3647 @item
3648 Define own abbreviation (1):
3650 Abbreviation list expansion can be used to reduce typing long file names:
3652 @lisp
3653 @group
3654 (add-to-list
3655  'directory-abbrev-alist
3656  '("^/xy" . "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3657 @end group
3658 @end lisp
3660 The reduced typing: @kbd{C-x C-f /xy @key{RET}}.
3662 @strong{Note} that file name cannot be edited here because the
3663 environment variables are not expanded during editing in the
3664 minibuffer.
3666 @item
3667 Define own abbreviation (2):
3669 The @code{abbrev-mode} gives additional flexibility for editing in the
3670 minibuffer:
3672 @lisp
3673 @group
3674 (define-abbrev-table 'my-tramp-abbrev-table
3675   '(("xy" "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}")))
3676 @end group
3678 @group
3679 (add-hook
3680  'minibuffer-setup-hook
3681  (lambda ()
3682    (abbrev-mode 1)
3683    (setq local-abbrev-table my-tramp-abbrev-table)))
3684 @end group
3686 @group
3687 (defadvice minibuffer-complete
3688   (before my-minibuffer-complete activate)
3689   (expand-abbrev))
3690 @end group
3692 @group
3693 ;; If you use partial-completion-mode
3694 (defadvice PC-do-completion
3695   (before my-PC-do-completion activate)
3696   (expand-abbrev))
3697 @end group
3698 @end lisp
3700 The reduced typing: @kbd{C-x C-f xy @key{TAB}}.
3702 The minibuffer expands for further editing.
3704 @item Use bookmarks:
3706 Use bookmarks to save @value{tramp} file names.
3707 @ifinfo
3708 @pxref{Bookmarks, , , emacs}.
3709 @end ifinfo
3711 Upon visiting a location with @value{tramp}, save it as a bookmark with
3712 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3714 To revisit that bookmark:
3715 @kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3717 @item Use recent files:
3719 @file{recentf} remembers visited places.
3720 @ifinfo
3721 @pxref{File Conveniences, , , emacs}.
3722 @end ifinfo
3724 Keep remote file names in the recent list without have to check for
3725 their accessibility through remote access:
3727 @lisp
3728 (recentf-mode 1)
3729 @end lisp
3731 Reaching recently opened files: @kbd{@key{menu-bar} @key{file}
3732 @key{Open Recent}}.
3734 @item Use filecache:
3736 Since @file{filecache} remembers visited places, add the remote
3737 directory to the cache:
3739 @lisp
3740 @group
3741 @c `with-eval-after-load' has been introduced with Emacs 24.4.  Shall
3742 @c be used when appropriate.
3743 (eval-after-load "filecache"
3744   '(file-cache-add-directory
3745     "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))
3746 @end group
3747 @end lisp
3749 Then use directory completion in the minibuffer with @kbd{C-x C-f
3750 C-@key{TAB}}.
3752 @item Use bbdb:
3754 @file{bbdb} has a built-in feature for Ange FTP files, which also
3755 works for @value{tramp} file names.
3756 @ifinfo
3757 @pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}.
3758 @end ifinfo
3760 Load @file{bbdb} in Emacs:
3762 @lisp
3763 @group
3764 (require 'bbdb)
3765 (bbdb-initialize)
3766 @end group
3767 @end lisp
3769 Create a BBDB entry with @kbd{M-x bbdb-create-ftp-site}.  Then specify
3770 a method and user name where needed.  Examples:
3772 @example
3773 @group
3774 @kbd{M-x bbdb-create-ftp-site @key{RET}}
3775 @b{Ftp Site:} news.my.domain @key{RET}
3776 @b{Ftp Directory:} /opt/news/etc/ @key{RET}
3777 @b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3778 @b{Company:} @key{RET}
3779 @b{Additional Comments:} @key{RET}
3780 @end group
3781 @end example
3783 In BBDB buffer, access an entry by pressing the key @key{F}.
3785 @end enumerate
3787 Thanks to @value{tramp} users for contributing to these recipes.
3789 @item
3790 Why saved multi-hop file names do not work in a new Emacs session?
3792 When saving ad-hoc multi-hop @value{tramp} file names (@pxref{Ad-hoc
3793 multi-hops}) via bookmarks, recent files, filecache, bbdb, or another
3794 package, use the full ad-hoc file name including all hops, like
3795 @file{@trampfn{ssh,bird@@bastion|ssh@value{postfixhop}news.my.domain,/opt/news/etc}}.
3797 Alternatively, when saving abbreviated multi-hop file names
3798 @file{@trampfn{ssh,news@@news.my.domain,/opt/news/etc}}, the user
3799 option @option{tramp-save-ad-hoc-proxies} must be set non-@code{nil}
3800 value.
3803 @item
3804 How to connect to a remote Emacs session using @value{tramp}?
3806 Configure Emacs Client
3807 @ifinfo
3808 (@pxref{Emacs Server, , , emacs}).
3809 @end ifinfo
3811 Then on the remote host, start the Emacs Server:
3813 @lisp
3814 @group
3815 (require 'server)
3816 (setq server-host (system-name)
3817       server-use-tcp t)
3818 (server-start)
3819 @end group
3820 @end lisp
3822 If @code{(system-name)} of the remote host cannot be resolved on the
3823 local host, use IP address instead.
3825 Copy from the remote host the resulting file
3826 @file{~/.emacs.d/server/server} to the local host, to the same
3827 location.
3829 Then start Emacs Client from the command line:
3831 @example
3832 emacsclient @trampfn{ssh,user@@host,/file/to/edit}
3833 @end example
3835 @code{user} and @code{host} refer to the local host.
3837 To make Emacs Client an editor for other programs, use a wrapper
3838 script @file{emacsclient.sh}:
3840 @example
3841 @group
3842 #!/bin/sh
3843 emacsclient @trampfn{ssh,$(whoami)@@$(hostname --fqdn),$1}
3844 @end group
3845 @end example
3847 Then change the environment variable @env{EDITOR} to point to the
3848 wrapper script:
3850 @example
3851 export EDITOR=/path/to/emacsclient.sh
3852 @end example
3855 @item
3856 How to disable other packages from calling @value{tramp}?
3858 There are packages that call @value{tramp} without the user ever
3859 entering a remote file name.  Even without applying a remote file
3860 syntax, some packages enable @value{tramp} on their own.  How can users
3861 disable such features.
3863 @itemize @minus
3864 @item
3865 @file{ido.el}
3867 Disable @value{tramp} file name completion:
3869 @lisp
3870 (customize-set-variable 'ido-enable-tramp-completion nil)
3871 @end lisp
3873 @item
3874 @file{rlogin.el}
3876 Disable remote directory tracking mode:
3878 @lisp
3879 (rlogin-directory-tracking-mode -1)
3880 @end lisp
3881 @end itemize
3884 @item
3885 How to disable @value{tramp}?
3887 @itemize @minus
3888 @item
3889 To keep Ange FTP as default the remote files access package, set this
3890 in @file{.emacs}:
3892 @lisp
3893 (customize-set-variable 'tramp-default-method "ftp")
3894 @end lisp
3896 @item
3897 To disable both @value{tramp} (and Ange FTP), set @code{tramp-mode} to
3898 @code{nil} in @file{.emacs}.  @strong{Note}, that we don't use
3899 @code{customize-set-variable}, in order to avoid loading @value{tramp}.
3901 @lisp
3902 (setq tramp-mode nil)
3903 @end lisp
3905 @item
3906 To unload @value{tramp}, type @kbd{M-x tramp-unload-tramp}.  Unloading
3907 @value{tramp} resets Ange FTP plugins also.
3908 @end itemize
3909 @end itemize
3912 @c For the developer
3913 @node Files directories and localnames
3914 @chapter How file names, directories and localnames are mangled and managed.
3916 @menu
3917 * Localname deconstruction::    Splitting a localname into its component parts.
3918 * External packages::           Integrating with external Lisp packages.
3919 @end menu
3922 @node Localname deconstruction
3923 @section Splitting a localname into its component parts
3925 @value{tramp} package redefines lisp functions
3926 @code{file-name-directory} and @code{file-name-nondirectory} to
3927 accommodate the unique file naming syntax that @value{tramp} requires.
3929 The replacements dissect the file name, use the original handler for
3930 the localname, take that result, and then re-build the @value{tramp}
3931 file name.  By relying on the original handlers for localnames,
3932 @value{tramp} benefits from platform specific hacks to the original
3933 handlers.
3936 @node External packages
3937 @section Integrating with external Lisp packages
3938 @subsection File name completion.
3940 Sometimes, it is not convenient to open a new connection to a remote
3941 host, including entering the password and alike.  For example, this is
3942 nasty for packages providing file name completion. Such a package
3943 could signal to @value{tramp}, that they don't want it to establish a
3944 new connection.  Use the variable @code{non-essential} temporarily and
3945 bind it to non-@code{nil} value.
3947 @lisp
3948 @group
3949 (let ((non-essential t))
3950   @dots{})
3951 @end group
3952 @end lisp
3955 @subsection File attributes cache.
3957 Keeping a local cache of remote file attributes in sync with the
3958 remote host is a time-consuming operation.  Flushing and re-querying
3959 these attributes can tax @value{tramp} to a grinding halt on busy
3960 remote servers.
3962 To get around these types of slow-downs in @value{tramp}'s
3963 responsiveness, set the @code{process-file-side-effects} to @code{nil}
3964 to stop @value{tramp} from flushing the cache.  This is helpful in
3965 situations where callers to @code{process-file} know there are no file
3966 attribute changes.  The let-bind form to accomplish this:
3968 @lisp
3969 @group
3970 (let (process-file-side-effects)
3971   @dots{})
3972 @end group
3973 @end lisp
3975 For asynchronous processes, @value{tramp} uses a process sentinel to
3976 flush file attributes cache.  When callers to @code{start-file-process}
3977 know beforehand no file attribute changes are expected, then the
3978 process sentinel should be set to the default state.  In cases where
3979 the caller defines its own process sentinel, @value{tramp}'s process
3980 sentinel is overwritten.  The caller can still flush the file
3981 attributes cache in its process sentinel with this code:
3983 @lisp
3984 @group
3985 (unless (memq (process-status proc) '(run open))
3986   (dired-uncache remote-directory))
3987 @end group
3988 @end lisp
3990 Since @value{tramp} traverses subdirectories starting with the
3991 root-directory, it is most likely sufficient to make the
3992 @code{default-directory} of the process buffer as the root directory.
3995 @node Traces and Profiles
3996 @chapter How to Customize Traces
3998 @value{tramp} messages are raised with verbosity levels ranging from 0
3999 to 10.  @value{tramp} does not display all messages; only those with a
4000 verbosity level less than or equal to @code{tramp-verbose}.
4002 The verbosity levels are
4004           @w{ 0}  silent (no @value{tramp} messages at all)
4005 @*@indent @w{ 1}  errors
4006 @*@indent @w{ 2}  warnings
4007 @*@indent @w{ 3}  connection to remote hosts (default verbosity)
4008 @*@indent @w{ 4}  activities
4009 @*@indent @w{ 5}  internal
4010 @*@indent @w{ 6}  sent and received strings
4011 @*@indent @w{ 7}  file caching
4012 @*@indent @w{ 8}  connection properties
4013 @*@indent @w{ 9}  test commands
4014 @*@indent @w{10}  traces (huge)
4016 With @code{tramp-verbose} greater than or equal to 4, messages are
4017 also written to a @value{tramp} debug buffer.  Such debug buffers are
4018 essential to bug and problem analyses.  For @value{tramp} bug reports,
4019 set the @code{tramp-verbose} level to 6 (@pxref{Bug Reports}).
4021 The debug buffer is in
4022 @ifinfo
4023 @ref{Outline Mode, , , emacs}.
4024 @end ifinfo
4025 @ifnotinfo
4026 Outline Mode.
4027 @end ifnotinfo
4028 In this buffer, messages can be filtered by their level.  To see
4029 messages up to verbosity level 5, enter @kbd{C-u 6 C-c C-q}.
4030 @ifinfo
4031 Other navigation keys are described in
4032 @ref{Outline Visibility, , , emacs}.
4033 @end ifinfo
4035 @value{tramp} handles errors internally.  But to get a Lisp backtrace,
4036 both the error and the signal have to be set as follows:
4038 @lisp
4039 @group
4040 (setq debug-on-error t
4041       debug-on-signal t)
4042 @end group
4043 @end lisp
4045 If @code{tramp-verbose} is greater than or equal to 10, Lisp
4046 backtraces are also added to the @value{tramp} debug buffer in case of
4047 errors.
4049 To enable stepping through @value{tramp} function call traces, they
4050 have to be specifically enabled as shown in this code:
4052 @lisp
4053 @group
4054 (require 'trace)
4055 (dolist (elt (all-completions "tramp-" obarray 'functionp))
4056   (trace-function-background (intern elt)))
4057 (untrace-function 'tramp-read-passwd)
4058 @end group
4059 @end lisp
4061 The buffer @file{*trace-output*} contains the output from the function
4062 call traces.  Disable @code{tramp-read-passwd} to stop password
4063 strings from being written to @file{*trace-output*}.
4066 @node GNU Free Documentation License
4067 @appendix GNU Free Documentation License
4068 @include doclicense.texi
4071 @node Function Index
4072 @unnumbered Function Index
4073 @printindex fn
4076 @node Variable Index
4077 @unnumbered Variable Index
4078 @printindex vr
4081 @node Concept Index
4082 @unnumbered Concept Index
4083 @printindex cp
4085 @bye
4087 @c TODO
4089 @c * Say something about the .login and .profile files of the remote
4090 @c   shells.
4091 @c * Explain how tramp.el works in principle: open a shell on a remote
4092 @c   host and then send commands to it.
4093 @c * Consistent small or capitalized words especially in menus.