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