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