* lisp/net/trampver.el: Update release number.
[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
16c3428a 2565continuous output of the @command{tail} command.
f18ce50c
MA
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
3d1bfa99
MA
2752The package has been used successfully on GNU Emacs 21, GNU Emacs 22,
2753GNU Emacs 23, XEmacs 21 (starting with 21.4), and SXEmacs 22.
4009494e
GM
2754
2755The package was intended to work on Unix, and it really expects a
2756Unix-like system on the remote end (except the @option{smb} method),
2757but some people seemed to have some success getting it to work on MS
2758Windows NT/2000/XP @value{emacsname}.
2759
2760There is some informations on @value{tramp} on NT at the following URL;
2761many thanks to Joe Stoy for providing the information:
2762@uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
2763
4009494e
GM
2764
2765@item
2766How could I speed up @value{tramp}?
2767
2768In the backstage, @value{tramp} needs a lot of operations on the
2769remote host. The time for transferring data from and to the remote
2770host as well as the time needed to perform the operations there count.
2771In order to speed up @value{tramp}, one could either try to avoid some
2772of the operations, or one could try to improve their performance.
2773
193e6828 2774Use an external method, like @option{scpc}.
4009494e
GM
2775
2776Use caching. This is already enabled by default. Information about
2777the remote host as well as the remote files are cached for reuse. The
2778information about remote hosts is kept in the file specified in
2779@code{tramp-persistency-file-name}. Keep this file.
2780
2781Disable version control. If you access remote files which are not
2782under version control, a lot of check operations can be avoided by
2783disabling VC. This can be achieved by
2784
2785@lisp
c0de5d04
MA
2786(setq vc-ignore-dir-regexp
2787 (format "\\(%s\\)\\|\\(%s\\)"
2788 vc-ignore-dir-regexp
2789 tramp-file-name-regexp))
4009494e
GM
2790@end lisp
2791
2792Disable excessive traces. The default trace level of @value{tramp},
2793defined in the variable @code{tramp-verbose}, is 3. You should
2794increase this level only temporarily, hunting bugs.
2795
2796
2797@item
2798@value{tramp} does not connect to the remote host
2799
2800When @value{tramp} does not connect to the remote host, there are two
2801reasons heading the bug mailing list:
2802
2803@itemize @minus
2804
2805@item
2806Unknown characters in the prompt
2807
2808@value{tramp} needs to recognize the prompt on the remote machine
2809after execution any command. This is not possible, when the prompt
2810contains unknown characters like escape sequences for coloring. This
2811should be avoided on the remote side. @xref{Remote shell setup}. for
2812setting the regular expression detecting the prompt.
2813
2814You can check your settings after an unsuccessful connection by
2815switching to the @value{tramp} connection buffer @file{*tramp/foo*},
2816setting the cursor at the top of the buffer, and applying the expression
2817
2818@example
2819@kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
2820@end example
2821
2822If it fails, or the cursor is not moved at the end of the buffer, your
135305ed 2823prompt is not recognized correctly.
4009494e
GM
2824
2825A special problem is the zsh, which uses left-hand side and right-hand
2826side prompts in parallel. Therefore, it is necessary to disable the
2827zsh line editor on the remote host. You shall add to @file{~/.zshrc}
2828the following command:
2829
2830@example
2831[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
2832@end example
2833
4009494e
GM
2834@item
2835@value{tramp} doesn't transfer strings with more than 500 characters
2836correctly
2837
2838On some few systems, the implementation of @code{process-send-string}
2839seems to be broken for longer strings. It is reported for HP-UX,
2840FreeBSD and Tru64 Unix, for example. This case, you should customize
2841the variable @code{tramp-chunksize} to 500. For a description how to
2842determine whether this is necessary see the documentation of
2843@code{tramp-chunksize}.
2844
2845Additionally, it will be useful to set @code{file-precious-flag} to
2846@code{t} for @value{tramp} files. Then the file contents will be
2847written into a temporary file first, which is checked for correct
2848checksum.
2849@ifinfo
2850@pxref{Saving Buffers, , , elisp}
2851@end ifinfo
2852
2853@lisp
2854(add-hook
2855 'find-file-hooks
2856 '(lambda ()
2857 (when (file-remote-p default-directory)
2858 (set (make-local-variable 'file-precious-flag) t))))
2859@end lisp
2860
2861@end itemize
2862
2863
3d1bfa99
MA
2864@item
2865@value{tramp} does not recognize hung @command{ssh} sessions
2866
2867When your network connection is down, @command{ssh} sessions might
2868hang. @value{tramp} cannot detect it safely, because it still sees a
2869running @command{ssh} process. Timeouts cannot be used as well,
2870because it cannot be predicted, how long a remote command will last,
2871for example when copying very large files.
2872
2873Therefore, you must configure the @command{ssh} process to die
2874in such a case. The following entry in @file{~/.ssh/config} would do
2875the job:
2876
2877@example
2878Host *
2879 ServerAliveInterval 5
2880@end example
2881
2882
4009494e
GM
2883@item
2884File name completion does not work with @value{tramp}
2885
2886When you log in to the remote machine, do you see the output of
2887@command{ls} in color? If so, this may be the cause of your problems.
2888
2889@command{ls} outputs @acronym{ANSI} escape sequences that your terminal
2890emulator interprets to set the colors. These escape sequences will
2891confuse @value{tramp} however.
2892
2893In your @file{.bashrc}, @file{.profile} or equivalent on the remote
2894machine you probably have an alias configured that adds the option
2895@option{--color=yes} or @option{--color=auto}.
2896
2897You should remove that alias and ensure that a new login @emph{does not}
2898display the output of @command{ls} in color. If you still cannot use
2899filename completion, report a bug to the @value{tramp} developers.
2900
2901
2902@item
2903File name completion does not work in large directories
2904
2905@value{tramp} uses globbing for some operations. (Globbing means to use the
2906shell to expand wildcards such as `*.c'.) This might create long
2907command lines, especially in directories with many files. Some shells
2908choke on long command lines, or don't cope well with the globbing
2909itself.
2910
2911If you have a large directory on the remote end, you may wish to execute
2912a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
2913Note that you must first start the right shell, which might be
2914@command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
2915of those supports tilde expansion.
2916
2917
2918@item
2919How can I get notified when @value{tramp} file transfers are complete?
2920
2921The following snippet can be put in your @file{~/.emacs} file. It
2922makes @value{emacsname} beep after reading from or writing to the
2923remote host.
2924
2925@lisp
2926(defadvice tramp-handle-write-region
2927 (after tramp-write-beep-advice activate)
e1176b47
MA
2928 "Make tramp beep after writing a file."
2929 (interactive)
2930 (beep))
4009494e
GM
2931
2932(defadvice tramp-handle-do-copy-or-rename-file
2933 (after tramp-copy-beep-advice activate)
e1176b47
MA
2934 "Make tramp beep after copying a file."
2935 (interactive)
2936 (beep))
4009494e
GM
2937
2938(defadvice tramp-handle-insert-file-contents
e1176b47
MA
2939 (after tramp-insert-beep-advice activate)
2940 "Make tramp beep after inserting a file."
2941 (interactive)
2942 (beep))
2943@end lisp
2944
2945
2946@ifset emacs
2947@item
2948I'ld like to get a Visual Warning when working in a sudo:ed context
2949
2950When you are working with @samp{root} privileges, it might be useful
2951to get an indication in the buffer's modeline. The following code,
2952tested with @value{emacsname} 22.1, does the job. You should put it
2953into your @file{~/.emacs}:
2954
2955@lisp
2956(defun my-mode-line-function ()
2957 (when (string-match "^/su\\(do\\)?:" default-directory)
2958 (setq mode-line-format
2959 (format-mode-line mode-line-format 'font-lock-warning-face))))
2960
2961(add-hook 'find-file-hooks 'my-mode-line-function)
2962(add-hook 'dired-mode-hook 'my-mode-line-function)
4009494e 2963@end lisp
e1176b47 2964@end ifset
4009494e
GM
2965
2966
2967@ifset emacs
2968@item
2969I'ld like to see a host indication in the mode line when I'm remote
2970
2971The following code has been tested with @value{emacsname} 22.1. You
2972should put it into your @file{~/.emacs}:
2973
2974@lisp
2975(defconst my-mode-line-buffer-identification
2976 (list
2977 '(:eval
2978 (let ((host-name
2979 (if (file-remote-p default-directory)
2980 (tramp-file-name-host
2981 (tramp-dissect-file-name default-directory))
2982 (system-name))))
2983 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
2984 (substring host-name 0 (match-beginning 1))
2985 host-name)))
2986 ": %12b"))
2987
2988(setq-default
2989 mode-line-buffer-identification
2990 my-mode-line-buffer-identification)
2991
2992(add-hook
2993 'dired-mode-hook
2994 '(lambda ()
2995 (setq
2996 mode-line-buffer-identification
2997 my-mode-line-buffer-identification)))
2998@end lisp
2999
3000Since @value{emacsname} 23.1, the mode line contains an indication if
3001@code{default-directory} for the current buffer is on a remote host.
3002The corresponding tooltip includes the name of that host. If you
3003still want the host name as part of the mode line, you can use the
3004example above, but the @code{:eval} clause can be simplified:
3005
3006@lisp
3007 '(:eval
3008 (let ((host-name
3009 (or (file-remote-p default-directory 'host)
3010 (system-name))))
3011 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
3012 (substring host-name 0 (match-beginning 1))
3013 host-name)))
3014@end lisp
3015@end ifset
3016
3017
3018@ifset emacs
3019@item
3020My remote host does not understand default directory listing options
3021
3022@value{emacsname} computes the @command{dired} options depending on
3023the local host you are working. If your @command{ls} command on the
3024remote host does not understand those options, you can change them
3025like this:
3026
3027@lisp
3028(add-hook
3029 'dired-before-readin-hook
3030 '(lambda ()
3031 (when (file-remote-p default-directory)
3032 (setq dired-actual-switches "-al"))))
3033@end lisp
3034@end ifset
3035
3036
3037@item
3038There's this @file{~/.sh_history} file on the remote host which keeps
3039growing and growing. What's that?
3040
3041Sometimes, @value{tramp} starts @command{ksh} on the remote host for
3042tilde expansion. Maybe @command{ksh} saves the history by default.
3043@value{tramp} tries to turn off saving the history, but maybe you have
3044to help. For example, you could put this in your @file{.kshrc}:
3045
3046@example
3047if [ -f $HOME/.sh_history ] ; then
3048 /bin/rm $HOME/.sh_history
3049fi
3050if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
3051 unset HISTFILE
3052fi
3053if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
3054 unset HISTSIZE
3055fi
3056@end example
3057
3058
3059@item There are longish file names to type. How to shorten this?
3060
3061Let's say you need regularly access to @file{@trampfn{ssh, news,
3062news.my.domain, /opt/news/etc}}, which is boring to type again and
3063again. The following approaches can be mixed:
3064
3065@enumerate
3066
3067@item Use default values for method and user name:
3068
3069You can define default methods and user names for hosts,
3070(@pxref{Default Method}, @pxref{Default User}):
3071
3072@lisp
3073(setq tramp-default-method "ssh"
3074 tramp-default-user "news")
3075@end lisp
3076
3077The file name left to type would be
3078@kbd{C-x C-f @trampfn{, , news.my.domain, /opt/news/etc}}.
3079
3080Note, that there are some useful settings already. Accessing your
3081local host as @samp{root} user, is possible just by @kbd{C-x C-f
3082@trampfn{su, , ,}}.
3083
3084@item Use configuration possibilities of your method:
3085
3086Several connection methods (i.e. the programs used) offer powerful
3087configuration possibilities (@pxref{Customizing Completion}). In the
3088given case, this could be @file{~/.ssh/config}:
3089
3090@example
3091Host xy
3092 HostName news.my.domain
3093 User news
3094@end example
3095
3096The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
3097/opt/news/etc}}. Depending on files in your directories, it is even
9bbb9638 3098possible to complete the host name with @kbd{C-x C-f
4009494e
GM
3099@value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3100
3101@item Use environment variables:
3102
3103File names typed in the minibuffer can be expanded by environment
3104variables. You can set them outside @value{emacsname}, or even with
3105Lisp:
3106
3107@lisp
3108(setenv "xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")
3109@end lisp
3110
3111Then you need simply to type @kbd{C-x C-f $xy @key{RET}}, and here you
3112are. The disadvantage is, that you cannot edit the file name, because
3113environment variables are not expanded during editing in the
3114minibuffer.
3115
3116@item Define own keys:
3117
3118You can define your own key sequences in @value{emacsname}, which can
3119be used instead of @kbd{C-x C-f}:
3120
3121@lisp
3122(global-set-key
3123 [(control x) (control y)]
3124 (lambda ()
3125 (interactive)
3126 (find-file
3127 (read-file-name
3128 "Find Tramp file: "
3129 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))))
3130@end lisp
3131
3132Simply typing @kbd{C-x C-y} would initialize the minibuffer for
3133editing with your beloved file name.
3134
3135See also @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the
3136Emacs Wiki} for a more comprehensive example.
3137
3138@item Define own abbreviation (1):
3139
3140It is possible to define an own abbreviation list for expanding file
3141names:
3142
3143@lisp
3144(add-to-list
3145 'directory-abbrev-alist
3146 '("^/xy" . "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3147@end lisp
3148
3149This shortens the file openening command to @kbd{C-x C-f /xy
3150@key{RET}}. The disadvantage is, again, that you cannot edit the file
3151name, because the expansion happens after entering the file name only.
3152
3153@item Define own abbreviation (2):
3154
3155The @code{abbrev-mode} gives more flexibility for editing the
3156minibuffer:
3157
3158@lisp
3159(define-abbrev-table 'my-tramp-abbrev-table
3160 '(("xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")))
3161
3162(add-hook
3163 'minibuffer-setup-hook
3164 '(lambda ()
3165 (abbrev-mode 1)
3166 (setq local-abbrev-table my-tramp-abbrev-table)))
3167
3168(defadvice minibuffer-complete
3169 (before my-minibuffer-complete activate)
3170 (expand-abbrev))
3171
3172;; If you use partial-completion-mode
3173(defadvice PC-do-completion
3174 (before my-PC-do-completion activate)
3175 (expand-abbrev))
3176@end lisp
3177
3178After entering @kbd{C-x C-f xy @key{TAB}}, the minibuffer is
3179expanded, and you can continue editing.
3180
3181@item Use bookmarks:
3182
3183Bookmarks can be used to visit Tramp files or directories.
3184@ifinfo
3185@pxref{Bookmarks, , , @value{emacsdir}}
3186@end ifinfo
3187
3188When you have opened @file{@trampfn{ssh, news, news.my.domain,
3189/opt/news/etc/}}, you should save the bookmark via
3190@ifset emacs
3191@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3192@end ifset
3193@ifset xemacs
3194@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
3195@end ifset
3196
3197Later on, you can always navigate to that bookmark via
3198@ifset emacs
3199@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3200@end ifset
3201@ifset xemacs
3202@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
3203@end ifset
3204
3205@item Use recent files:
3206
3207@ifset emacs
3208@file{recentf}
3209@end ifset
3210@ifset xemacs
3211@file{recent-files}
3212@end ifset
3213remembers visited places.
3214@ifinfo
3215@ifset emacs
3216@pxref{File Conveniences, , , @value{emacsdir}}
3217@end ifset
3218@ifset xemacs
3219@pxref{recent-files, , , edit-utils}
3220@end ifset
3221@end ifinfo
3222
3223You could keep remote file names in the recent list without checking
3224their readability through a remote access:
3225
3226@lisp
3227@ifset emacs
3228(recentf-mode 1)
3229@end ifset
3230@ifset xemacs
3231(recent-files-initialize)
3232(add-hook
3233 'find-file-hooks
3234 (lambda ()
3235 (when (file-remote-p (buffer-file-name))
3236 (recent-files-make-permanent)))
3237 'append)
3238@end ifset
3239@end lisp
3240
3241The list of files opened recently is reachable via
3242@ifset emacs
3243@kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
3244@end ifset
3245@ifset xemacs
3246@kbd{@key{menu-bar} @key{Recent Files}}.
3247@end ifset
3248
3249@ifset emacs
3250@item Use filecache:
3251
3252@file{filecache} remembers visited places. Add the directory into
3253the cache:
3254
3255@lisp
3256(eval-after-load "filecache"
3257 '(file-cache-add-directory
3258 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3259@end lisp
3260
3261Whenever you want to load a file, you can enter @kbd{C-x C-f
3262C-@key{TAB}} in the minibuffer. The completion is done for the given
3263directory.
3264@end ifset
3265
3266@ifset emacs
3267@item Use bbdb:
3268
3269@file{bbdb} has a built-in feature for @value{ftppackagename} files,
3270which works also for @value{tramp}.
3271@ifinfo
3272@pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}
3273@end ifinfo
3274
3275You need to load @file{bbdb}:
3276
3277@lisp
3278(require 'bbdb)
3279(bbdb-initialize)
3280@end lisp
3281
3282Then you can create a BBDB entry via @kbd{M-x bbdb-create-ftp-site}.
3283Because BBDB is not prepared for @value{tramp} syntax, you must
3284specify a method together with the user name, when needed. Example:
3285
3286@example
3287@kbd{M-x bbdb-create-ftp-site @key{RET}}
3288@b{Ftp Site:} news.my.domain @key{RET}
3289@b{Ftp Directory:} /opt/news/etc/ @key{RET}
3290@b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3291@b{Company:} @key{RET}
3292@b{Additional Comments:} @key{RET}
3293@end example
3294
3295When you have opened your BBDB buffer, you can access such an entry by
3296pressing the key @key{F}.
3297@end ifset
3298
3299@end enumerate
3300
3301I would like to thank all @value{tramp} users, who have contributed to
3302the different recipes!
3303
3304
66043531
MA
3305@ifset emacs
3306@item
3307How can I use @value{tramp} to connect to a remote @value{emacsname}
3308session?
3309
3310You can configure Emacs Client doing this.
3311@ifinfo
3312@xref{Emacs Server, , , @value{emacsdir}}.
3313@end ifinfo
3314
3315On the remote host, you start the Emacs Server:
3316
3317@lisp
3318(require 'server)
3319(setq server-host (system-name)
3320 server-use-tcp t)
3321(server-start)
3322@end lisp
3323
3324Make sure, that the result of @code{(system-name)} can be resolved on
3325your local host; otherwise you might use a hard coded IP address.
3326
3327The resulting file @file{~/.emacs.d/server/server} must be copied to
3328your local host, at the same location. You can call then the Emacs
3329Client from the command line:
3330
3331@example
3332emacsclient @trampfn{ssh, user, host, /file/to/edit}
3333@end example
3334
3335@code{user} and @code{host} shall be related to your local host.
3ef49c53
MA
3336
3337If you want to use Emacs Client also as editor for other programs, you
3338could write a script @file{emacsclient.sh}:
3339
3340@example
3341#!/bin/sh
3342emacsclient @trampfn{ssh, `whoami`, `hostname --fqdn`, $1}
3343@end example
3344
3345Then you must set the environment variable @code{EDITOR} pointing to
3346that script:
3347
3348@example
3349export EDITOR=/path/to/emacsclient.sh
3350@end example
66043531
MA
3351@end ifset
3352
3353
4009494e
GM
3354@item
3355How can I disable @value{tramp}?
3356
3357Shame on you, why did you read until now?
3358
586b90f1
MA
3359@itemize @minus
3360
3361@item
4009494e
GM
3362@ifset emacs
3363If you just want to have @value{ftppackagename} as default remote
3364files access package, you should apply the following code:
3365
3366@lisp
3367(setq tramp-default-method "ftp")
3368@end lisp
3369@end ifset
3370
586b90f1
MA
3371@item
3372In order to disable
3373@ifset emacs
3374@value{tramp} (and @value{ftppackagename}),
3375@end ifset
3376@ifset xemacs
3377@value{tramp},
3378@end ifset
3379you must set @code{tramp-mode} to @code{nil}:
3380
3381@lisp
3382(setq tramp-mode nil)
3383@end lisp
3384
3385@item
4009494e
GM
3386Unloading @value{tramp} can be achieved by applying @kbd{M-x
3387tramp-unload-tramp}.
3388@ifset emacs
3389This resets also the @value{ftppackagename} plugins.
3390@end ifset
3391@end itemize
586b90f1 3392@end itemize
4009494e
GM
3393
3394
3395@c For the developer
4009494e
GM
3396@node Files directories and localnames
3397@chapter How file names, directories and localnames are mangled and managed.
3398
3399@menu
3400* Localname deconstruction:: Breaking a localname into its components.
ea3fc256
MA
3401@ifset emacs
3402* External packages:: Integration with external Lisp packages.
3403@end ifset
4009494e
GM
3404@end menu
3405
3406
3407@node Localname deconstruction
3408@section Breaking a localname into its components.
3409
3410@value{tramp} file names are somewhat different, obviously, to ordinary file
3411names. As such, the lisp functions @code{file-name-directory} and
3412@code{file-name-nondirectory} are overridden within the @value{tramp}
3413package.
3414
3415Their replacements are reasonably simplistic in their approach. They
3416dissect the filename, call the original handler on the localname and
3417then rebuild the @value{tramp} file name with the result.
3418
3419This allows the platform specific hacks in the original handlers to take
3420effect while preserving the @value{tramp} file name information.
3421
3422
ea3fc256
MA
3423@ifset emacs
3424@node External packages
3425@section Integration with external Lisp packages.
b59329e0 3426@subsection Filename completion.
ea3fc256
MA
3427
3428While reading filenames in the minibuffer, @value{tramp} must decide
3429whether it completes possible incomplete filenames, or not. Imagine
3430there is the following situation: You have typed @kbd{C-x C-f
3431@value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot
3432know, whether @option{ssh} is a method or a host name. It checks
3433therefore the last input character you have typed. If this is
3434@key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are
3435still in filename completion, and it does not connect to the possible
3436remote host @option{ssh}.
3437
3438@vindex tramp-completion-mode
3439External packages, which use other characters for completing filenames
3440in the minibuffer, must signal this to @value{tramp}. For this case,
3441the variable @code{tramp-completion-mode} can be bound temporarily to
b59329e0 3442a non-@code{nil} value.
ea3fc256
MA
3443
3444@lisp
3445(let ((tramp-completion-mode t))
3446 ...)
3447@end lisp
b59329e0
MA
3448
3449
3450@subsection File attributes cache.
3451
3452When @value{tramp} runs remote processes, files on the remote host
3453could change their attributes. Consequently, @value{tramp} must flush
3454its complete cache keeping attributes for all files of the remote host
3455it has seen so far.
3456
3457This is a performance degradation, because the lost file attributes
3458must be recomputed, when needed again. In cases the caller of
3459@code{process-file} knows that there are file attribute changes, it
3460shall let-bind the variable @code{process-file-side-effects} to
3461@code{nil}. @value{tramp} wouldn't flush the file attributes cache then.
3462
3463@lisp
3464(let (process-file-side-effects)
3465 ...)
3466@end lisp
ea3fc256
MA
3467@end ifset
3468
3469
4009494e
GM
3470@node Traces and Profiles
3471@chapter How to Customize Traces
3472
3473All @value{tramp} messages are raised with a verbosity level. The
3474verbosity level can be any number between 0 and 10. Only messages with
3475a verbosity level less than or equal to @code{tramp-verbose} are
3476displayed.
3477
3478The verbosity levels are
3479
3480 @w{ 0} silent (no @value{tramp} messages at all)
3481@*@indent @w{ 1} errors
3482@*@indent @w{ 2} warnings
3483@*@indent @w{ 3} connection to remote hosts (default verbosity)
3484@*@indent @w{ 4} activities
3485@*@indent @w{ 5} internal
3486@*@indent @w{ 6} sent and received strings
3487@*@indent @w{ 7} file caching
3488@*@indent @w{ 8} connection properties
3489@*@indent @w{10} traces (huge)
3490
3491When @code{tramp-verbose} is greater than or equal to 4, the messages
3492are also written into a @value{tramp} debug buffer. This debug buffer
3493is useful for analysing problems; sending a @value{tramp} bug report
3494should be done with @code{tramp-verbose} set to a verbosity level of at
3495least 6 (@pxref{Bug Reports}).
3496
3497The debug buffer is in
3498@ifinfo
3499@ref{Outline Mode, , , @value{emacsdir}}.
3500@end ifinfo
3501@ifnotinfo
3502Outline Mode.
3503@end ifnotinfo
3504That means, you can change the level of messages to be viewed. If you
3505want, for example, see only messages up to verbosity level 5, you must
3506enter @kbd{C-u 6 C-c C-q}.
3507@ifinfo
3508Other keys for navigating are described in
3509@ref{Outline Visibility, , , @value{emacsdir}}.
3510@end ifinfo
3511
3512@value{tramp} errors are handled internally in order to raise the
3513verbosity level 1 messages. When you want to get a Lisp backtrace in
3514case of an error, you need to set both
3515
3516@lisp
3517(setq debug-on-error t
3518 debug-on-signal t)
3519@end lisp
3520
3521Sometimes, it might be even necessary to step through @value{tramp}
3522function call traces. Such traces are enabled by the following code:
3523
3524@lisp
3525(require 'tramp)
3526(require 'trace)
03b5bade
MA
3527(dolist (elt (all-completions "tramp-" obarray 'functionp))
3528 (trace-function-background (intern elt)))
4009494e
GM
3529(untrace-function 'tramp-read-passwd)
3530(untrace-function 'tramp-gw-basic-authentication)
3531@end lisp
3532
3533The function call traces are inserted in the buffer
3534@file{*trace-output*}. @code{tramp-read-passwd} and
3535@code{tramp-gw-basic-authentication} shall be disabled when the
3536function call traces are added to @value{tramp}, because both
3537functions return password strings, which should not be distributed.
3538
3539
3540@node Issues
3541@chapter Debatable Issues and What Was Decided
3542
3543@itemize @bullet
3544@item The uuencode method does not always work.
3545
3546Due to the design of @value{tramp}, the encoding and decoding programs
3547need to read from stdin and write to stdout. On some systems,
3548@command{uudecode -o -} will read stdin and write the decoded file to
3549stdout, on other systems @command{uudecode -p} does the same thing.
3550But some systems have uudecode implementations which cannot do this at
3551all---it is not possible to call these uudecode implementations with
3552suitable parameters so that they write to stdout.
3553
3554Of course, this could be circumvented: the @code{begin foo 644} line
3555could be rewritten to put in some temporary file name, then
3556@command{uudecode} could be called, then the temp file could be
3557printed and deleted.
3558
3559But I have decided that this is too fragile to reliably work, so on some
3560systems you'll have to do without the uuencode methods.
3561
3562@item The @value{tramp} filename syntax differs between GNU Emacs and XEmacs.
3563
3564The GNU Emacs maintainers wish to use a unified filename syntax for
3565Ange-FTP and @value{tramp} so that users don't have to learn a new
3566syntax. It is sufficient to learn some extensions to the old syntax.
3567
3568For the XEmacs maintainers, the problems caused from using a unified
3569filename syntax are greater than the gains. The XEmacs package system
3570uses EFS for downloading new packages. So, obviously, EFS has to be
3571installed from the start. If the filenames were unified, @value{tramp}
3572would have to be installed from the start, too.
3573
3574@ifset xemacs
3575@strong{Note:} If you'd like to use a similar syntax like
3576@value{ftppackagename}, you need the following settings in your init
3577file:
3578
3579@lisp
3580(setq tramp-unified-filenames t)
3581(require 'tramp)
3582@end lisp
3583
3584The autoload of the @value{emacsname} @value{tramp} package must be
3585disabled. This can be achieved by setting file permissions @code{000}
3586to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}.
3587
3588In case of unified filenames, all @value{emacsname} download sites are
3589added to @code{tramp-default-method-alist} with default method
3590@option{ftp} @xref{Default Method}. These settings shouldn't be
3591touched for proper working of the @value{emacsname} package system.
3592
3593The syntax for unified filenames is described in the @value{tramp} manual
3594for @value{emacsothername}.
3595@end ifset
3596@end itemize
3597
3598@node GNU Free Documentation License
3599@appendix GNU Free Documentation License
3600@include doclicense.texi
3601
dd753688
MA
3602@node Function Index
3603@unnumbered Function Index
3604@printindex fn
3605
3606@node Variable Index
3607@unnumbered Variable Index
3608@printindex vr
3609
4009494e 3610@node Concept Index
4009494e
GM
3611@unnumbered Concept Index
3612@printindex cp
dd753688 3613
4009494e
GM
3614@bye
3615
3616@c TODO
3617@c
3618@c * Say something about the .login and .profile files of the remote
3619@c shells.
3620@c * Explain how tramp.el works in principle: open a shell on a remote
3621@c host and then send commands to it.
193e6828
MA
3622@c * Use `filename' resp. `file name' consistently.
3623@c * Use `host' resp. `machine' consistently.
3624@c * Consistent small or capitalized words especially in menues.
4009494e
GM
3625
3626@ignore
3627 arch-tag: f96dd66e-6dd3-4c92-8d77-9c56205ba808
3628@end ignore