* tramp.texi (External methods): Temporary files are kept for
[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,
4a0cf14f 412006, 2007, 2008, 2009 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
2060Another possibility is to use the @value{tramp} variable
2061@ifset emacs
2062@code{tramp-backup-directory-alist}.
2063@end ifset
2064@ifset xemacs
2065@code{tramp-bkup-backup-directory-info}.
2066@end ifset
2067This variable has the same meaning like
2068@ifset emacs
2069@code{backup-directory-alist}.
2070@end ifset
2071@ifset xemacs
2072@code{bkup-backup-directory-info}.
2073@end ifset
2074If a @value{tramp} file is backed up, and DIRECTORY is an absolute
2075local file name, DIRECTORY is prepended with the @value{tramp} file
2076name prefix of the file to be backed up.
2077
2078@noindent
2079Example:
2080
2081@ifset emacs
2082@lisp
2083(add-to-list 'backup-directory-alist
2084 (cons "." "~/.emacs.d/backups/"))
2085(setq tramp-backup-directory-alist backup-directory-alist)
2086@end lisp
2087@end ifset
2088@ifset xemacs
2089@lisp
2090(require 'backup-dir)
2091(add-to-list 'bkup-backup-directory-info
2092 (list "." "~/.emacs.d/backups/" 'full-path))
2093(setq tramp-bkup-backup-directory-info bkup-backup-directory-info)
2094@end lisp
2095@end ifset
2096
2097@noindent
2098The backup file name of @file{@trampfn{su, root, localhost,
2099/etc/secretfile}} would be
2100@ifset emacs
2101@file{@trampfn{su, root, localhost,
2102~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
2103@end ifset
2104@ifset xemacs
2105@file{@trampfn{su, root, localhost,
2106~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
2107@end ifset
2108
2109The same problem can happen with auto-saving files.
2110@ifset emacs
2111Since @value{emacsname} 21, the variable
2112@code{auto-save-file-name-transforms} keeps information, on which
2113directory an auto-saved file should go. By default, it is initialized
2114for @value{tramp} files to the local temporary directory.
2115
2116On some versions of @value{emacsname}, namely the version built for
2117Debian GNU/Linux, the variable @code{auto-save-file-name-transforms}
2118contains the directory where @value{emacsname} was built. A
2119workaround is to manually set the variable to a sane value.
2120
2121If auto-saved files should go into the same directory as the original
2122files, @code{auto-save-file-name-transforms} should be set to @code{nil}.
2123
2124Another possibility is to set the variable
2125@code{tramp-auto-save-directory} to a proper value.
2126@end ifset
2127@ifset xemacs
2128For this purpose you can set the variable @code{auto-save-directory}
2129to a proper value.
2130@end ifset
2131
2132
2133@node Windows setup hints
2134@section Issues with Cygwin ssh
2135@cindex Cygwin, issues
2136
2137This section needs a lot of work! Please help.
2138
2139@cindex method sshx with Cygwin
2140@cindex sshx method with Cygwin
2141The recent Cygwin installation of @command{ssh} works only with a
2142Cygwinized @value{emacsname}. You can check it by typing @kbd{M-x
2143eshell}, and starting @kbd{ssh test.machine}. The problem is evident
2144if you see a message like this:
2145
2146@example
2147Pseudo-terminal will not be allocated because stdin is not a terminal.
2148@end example
2149
2150Older @command{ssh} versions of Cygwin are told to cooperate with
2151@value{tramp} selecting @option{sshx} as the connection method. You
2152can find information about setting up Cygwin in their FAQ at
2153@uref{http://cygwin.com/faq/}.
2154
2155@cindex method scpx with Cygwin
2156@cindex scpx method with Cygwin
2157If you wish to use the @option{scpx} connection method, then you might
2158have the problem that @value{emacsname} calls @command{scp} with a
2159Windows filename such as @code{c:/foo}. The Cygwin version of
2160@command{scp} does not know about Windows filenames and interprets
2161this as a remote filename on the host @code{c}.
2162
2163One possible workaround is to write a wrapper script for @option{scp}
2164which converts the Windows filename to a Cygwinized filename.
2165
2166@cindex Cygwin and ssh-agent
2167@cindex SSH_AUTH_SOCK and @value{emacsname} on Windows
2168If you want to use either @option{ssh} based method on Windows, then
2169you might encounter problems with @command{ssh-agent}. Using this
2170program, you can avoid typing the pass-phrase every time you log in.
2171However, if you start @value{emacsname} from a desktop shortcut, then
2172the environment variable @code{SSH_AUTH_SOCK} is not set and so
2173@value{emacsname} and thus @value{tramp} and thus @command{ssh} and
2174@command{scp} started from @value{tramp} cannot communicate with
2175@command{ssh-agent}. It works better to start @value{emacsname} from
2176the shell.
2177
2178If anyone knows how to start @command{ssh-agent} under Windows in such a
2179way that desktop shortcuts can profit, please holler. I don't really
2180know anything at all about Windows@dots{}
2181
2182
2183@node Usage
2184@chapter Using @value{tramp}
2185@cindex using @value{tramp}
2186
2187Once you have installed @value{tramp} it will operate fairly
2188transparently. You will be able to access files on any remote machine
2189that you can log in to as though they were local.
2190
2191Files are specified to @value{tramp} using a formalized syntax specifying the
2192details of the system to connect to. This is similar to the syntax used
2193by the @value{ftppackagename} package.
2194
2195@cindex type-ahead
2196Something that might happen which surprises you is that
2197@value{emacsname} remembers all your keystrokes, so if you see a
2198password prompt from @value{emacsname}, say, and hit @kbd{@key{RET}}
2199twice instead of once, then the second keystroke will be processed by
2200@value{emacsname} after @value{tramp} has done its thing. Why, this
2201type-ahead is normal behavior, you say. Right you are, but be aware
2202that opening a remote file might take quite a while, maybe half a
2203minute when a connection needs to be opened. Maybe after half a
2204minute you have already forgotten that you hit that key!
2205
2206@menu
2207* Filename Syntax:: @value{tramp} filename conventions.
2208* Alternative Syntax:: URL-like filename syntax.
2209* Filename completion:: Filename completion.
2210* Remote processes:: Integration with other @value{emacsname} packages.
dd753688 2211* Cleanup remote connections:: Cleanup remote connections.
4009494e
GM
2212@end menu
2213
2214
2215@node Filename Syntax
2216@section @value{tramp} filename conventions
2217@cindex filename syntax
2218@cindex filename examples
2219
2220To access the file @var{localname} on the remote machine @var{machine}
2221you would specify the filename @file{@trampfn{, , machine,
2222localname}}. This will connect to @var{machine} and transfer the file
2223using the default method. @xref{Default Method}.
2224
2225Some examples of @value{tramp} filenames are shown below.
2226
2227@table @file
2228@item @trampfn{, , melancholia, .emacs}
2229Edit the file @file{.emacs} in your home directory on the machine
2230@code{melancholia}.
2231
2232@item @trampfn{, , melancholia.danann.net, .emacs}
2233This edits the same file, using the fully qualified domain name of
2234the machine.
2235
2236@item @trampfn{, , melancholia, ~/.emacs}
2237This also edits the same file --- the @file{~} is expanded to your
2238home directory on the remote machine, just like it is locally.
2239
2240@item @trampfn{, , melancholia, ~daniel/.emacs}
2241This edits the file @file{.emacs} in the home directory of the user
2242@code{daniel} on the machine @code{melancholia}. The @file{~<user>}
2243construct is expanded to the home directory of that user on the remote
2244machine.
2245
2246@item @trampfn{, , melancholia, /etc/squid.conf}
2247This edits the file @file{/etc/squid.conf} on the machine
2248@code{melancholia}.
2249
2250@end table
2251
4a0cf14f
MA
2252@var{machine} can also be an IPv4 or IPv6 address, like in
2253@file{@trampfn{, , 127.0.0.1, .emacs}} or @file{@trampfn{, ,
2254@value{ipv6prefix}::1@value{ipv6postfix}, .emacs}}.
2255@ifset emacs
2256For syntactical reasons, IPv6 addresses must be embedded in square
2257brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
2258@end ifset
2259
4009494e
GM
2260Unless you specify a different name to use, @value{tramp} will use the
2261current local user name as the remote user name to log in with. If you
2262need to log in as a different user, you can specify the user name as
2263part of the filename.
2264
2265To log in to the remote machine as a specific user, you use the syntax
2266@file{@trampfn{, user, machine, path/to.file}}. That means that
2267connecting to @code{melancholia} as @code{daniel} and editing
2268@file{.emacs} in your home directory you would specify
2269@file{@trampfn{, daniel, melancholia, .emacs}}.
2270
2271It is also possible to specify other file transfer methods
193e6828
MA
2272(@pxref{Inline methods}, @pxref{External methods}) as part of the
2273filename.
4009494e
GM
2274@ifset emacs
2275This is done by putting the method before the user and host name, as
2276in @file{@value{prefix}@var{method}@value{postfixhop}} (Note the
2277trailing colon).
2278@end ifset
2279@ifset xemacs
2280This is done by replacing the initial @file{@value{prefix}} with
2281@file{@value{prefix}<method>@value{postfixhop}}. (Note the trailing
2282slash!).
2283@end ifset
2284The user, machine and file specification remain the same.
2285
2286So, to connect to the machine @code{melancholia} as @code{daniel},
2287using the @option{ssh} method to transfer files, and edit
2288@file{.emacs} in my home directory I would specify the filename
2289@file{@trampfn{ssh, daniel, melancholia, .emacs}}.
2290
2291
2292@node Alternative Syntax
2293@section URL-like filename syntax
2294@cindex filename syntax
2295@cindex filename examples
2296
2297Additionally to the syntax described in the previous chapter, it is
2298possible to use a URL-like syntax for @value{tramp}. This can be
2299switched on by customizing the variable @code{tramp-syntax}. Please
2300note that this feature is experimental for the time being.
2301
2302The variable @code{tramp-syntax} must be set before requiring @value{tramp}:
2303
2304@lisp
2305(setq tramp-syntax 'url)
2306(require 'tramp)
2307@end lisp
2308
2309Then, a @value{tramp} filename would look like this:
2310@file{/@var{method}://@var{user}@@@var{machine}:@var{port}/@var{path/to.file}}.
2311@file{/@var{method}://} is mandatory, all other parts are optional.
2312@file{:@var{port}} is useful for methods only who support this.
2313
2314The last example from the previous section would look like this:
2315@file{/ssh://daniel@@melancholia/.emacs}.
2316
2317For the time being, @code{tramp-syntax} can have the following values:
2318
2319@itemize @w{}
2320@ifset emacs
2321@item @code{ftp} -- That is the default syntax
2322@item @code{url} -- URL-like syntax
2323@end ifset
2324@ifset xemacs
2325@item @code{sep} -- That is the default syntax
2326@item @code{url} -- URL-like syntax
2327@item @code{ftp} -- EFS-like syntax
2328@end ifset
2329@end itemize
2330
2331
2332@node Filename completion
2333@section Filename completion
2334@cindex filename completion
2335
2336Filename completion works with @value{tramp} for completion of method
2337names, of user names and of machine names as well as for completion of
2338file names on remote machines.
2339@ifset emacs
b59329e0
MA
2340In order to enable this, partial completion must be activated in your
2341@file{.emacs}.
4009494e
GM
2342@ifinfo
2343@xref{Completion Options, , , @value{emacsdir}}.
2344@end ifinfo
2345@end ifset
2346
2347If you, for example, type @kbd{C-x C-f @value{prefix}t
2348@key{TAB}}, @value{tramp} might give you as result the choice for
2349
2350@example
4a0cf14f 2351@multitable {@trampfn{telnet, , melancholia.danann.net,}} {@trampfn{telnet, , 192.168.0.1,}}
4009494e 2352@ifset emacs
4a0cf14f
MA
2353@item @value{prefixhop}telnet@value{postfixhop} @tab tmp/
2354@item @value{prefixhop}toto@value{postfix} @tab
4009494e
GM
2355@end ifset
2356@ifset xemacs
4a0cf14f 2357@item @value{prefixhop}telnet@value{postfixhop} @tab @value{prefixhop}toto@value{postfix}
4009494e 2358@end ifset
4a0cf14f 2359@end multitable
4009494e
GM
2360@end example
2361
2362@samp{@value{prefixhop}telnet@value{postfixhop}}
2363is a possible completion for the respective method,
2364@ifset emacs
2365@samp{tmp/} stands for the directory @file{/tmp} on your local
2366machine,
2367@end ifset
2368and @samp{@value{prefixhop}toto@value{postfix}}
2369might be a host @value{tramp} has detected in your @file{~/.ssh/known_hosts}
2370file (given you're using default method @option{ssh}).
2371
2372If you go on to type @kbd{e @key{TAB}}, the minibuffer is completed to
2373@samp{@value{prefix}telnet@value{postfixhop}}.
2374Next @kbd{@key{TAB}} brings you all machine names @value{tramp} detects in
2375your @file{/etc/hosts} file, let's say
2376
2377@example
4a0cf14f
MA
2378@multitable {@trampfn{telnet, , melancholia.danann.net,}} {@trampfn{telnet, , 192.168.0.1,}}
2379@item @trampfn{telnet, , 127.0.0.1,} @tab @trampfn{telnet, , 192.168.0.1,}
2380@item @trampfn{telnet, , @value{ipv6prefix}::1@value{ipv6postfix},} @tab @trampfn{telnet, , localhost,}
2381@item @trampfn{telnet, , melancholia.danann.net,} @tab @trampfn{telnet, , melancholia,}
2382@end multitable
4009494e
GM
2383@end example
2384
2385Now you can choose the desired machine, and you can continue to
2386complete file names on that machine.
2387
2388If the configuration files (@pxref{Customizing Completion}), which
2389@value{tramp} uses for analysis of completion, offer user names, those user
2390names will be taken into account as well.
2391
2392Remote machines, which have been visited in the past and kept
2393persistently (@pxref{Connection caching}), will be offered too.
2394
2395Once the remote machine identification is completed, it comes to
2396filename completion on the remote host. This works pretty much like
2397for files on the local host, with the exception that minibuffer
2398killing via a double-slash works only on the filename part, except
2399that filename part starts with @file{//}.
b048d478 2400@ifset emacs
fffa137c 2401A triple-slash stands for the default behavior.
b048d478 2402@end ifset
4009494e
GM
2403@ifinfo
2404@xref{Minibuffer File, , , @value{emacsdir}}.
2405@end ifinfo
2406
b048d478
MA
2407@noindent
2408Example:
2409
2410@example
4009494e 2411@ifset emacs
b048d478
MA
2412@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//etc} @key{TAB}}
2413 @print{} @trampfn{telnet, , melancholia, /etc}
2414
2415@kbd{C-x C-f @trampfn{telnet, , melancholia, //etc} @key{TAB}}
2416 @print{} /etc
2417
2418@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin///etc} @key{TAB}}
2419 @print{} /etc
4009494e
GM
2420@end ifset
2421
2422@ifset xemacs
b048d478
MA
2423@kbd{C-x C-f @trampfn{telnet, , melancholia, /usr/local/bin//}}
2424 @print{} @trampfn{telnet, , melancholia, /}
2425
2426@kbd{C-x C-f @trampfn{telnet, , melancholia, //}}
2427 @print{} /
4009494e 2428@end ifset
b048d478
MA
2429@end example
2430
2431A remote directory might have changed its contents out of
2432@value{emacsname} control, for example by creation or deletion of
2433files by other processes. Therefore, during filename completion the
2434remote directory contents is reread regularly in order to detect such
2435changes, which would be invisible otherwise (@pxref{Connection caching}).
2436
2437@defopt tramp-completion-reread-directory-timeout
2438This variable defines the number of seconds since last remote command
2439before rereading a directory contents. A value of 0 would require an
2440immediate reread during filename completion, @code{nil} means to use
2441always cached values for the directory contents.
2442@end defopt
4009494e
GM
2443
2444
2445@node Remote processes
2446@section Integration with other @value{emacsname} packages.
2447@cindex compile
2448@cindex recompile
2449
2450@value{tramp} supports running processes on a remote host. This
2451allows to exploit @value{emacsname} packages without modification for
2452remote file names. It does not work for the @option{ftp} and
8842cd9b
MA
2453@option{smb} methods. Association of a pty, as specified in
2454@code{start-file-process}, is not supported.
4009494e 2455
88a683c5
MA
2456@ifset emacsgvfs
2457If the remote host is mounted via GVFS (see @ref{GVFS based methods}),
2458the remote filesystem is mounted locally. Therefore, there are no
2459remote processes; all processes run still locally on your machine with
2460an adapted @code{default-directory}. This section does not apply for
2461such connection methods.
2462@end ifset
2463
4009494e
GM
2464Remote processes are started when a corresponding command is executed
2465from a buffer belonging to a remote file or directory. Up to now, the
2466packages @file{compile.el} (commands like @code{compile} and
2467@code{grep}) and @file{gud.el} (@code{gdb} or @code{perldb}) have been
2468integrated. Integration of further packages is planned, any help for
2469this is welcome!
2470
2471When your program is not found in the default search path
2472@value{tramp} sets on the remote machine, you should either use an
2473absolute path, or extend @code{tramp-remote-path} (see @ref{Remote
2474Programs}):
2475
2476@lisp
2477(add-to-list 'tramp-remote-path "~/bin")
2478(add-to-list 'tramp-remote-path "/appli/pub/bin")
2479@end lisp
2480
2481The environment for your program can be adapted by customizing
2482@code{tramp-remote-process-environment}. This variable is a list of
2483strings. It is structured like @code{process-environment}. Each
2484element is a string of the form ENVVARNAME=VALUE. An entry
2485ENVVARNAME= disables the corresponding environment variable, which
2486might have been set in your init file like @file{~/.profile}.
2487
2488@noindent
2489Adding an entry can be performed via @code{add-to-list}:
2490
2491@lisp
2492(add-to-list 'tramp-remote-process-environment "JAVA_HOME=/opt/java")
2493@end lisp
2494
2495Changing or removing an existing entry is not encouraged. The default
2496values are chosen for proper @value{tramp} work. Nevertheless, if for
2497example a paranoid system administrator disallows changing the
2498@var{$HISTORY} environment variable, you can customize
2499@code{tramp-remote-process-environment}, or you can apply the
2500following code in your @file{.emacs}:
2501
2502@lisp
2503(let ((process-environment tramp-remote-process-environment))
2504 (setenv "HISTORY" nil)
2505 (setq tramp-remote-process-environment process-environment))
2506@end lisp
2507
2508If you use other @value{emacsname} packages which do not run
2509out-of-the-box on a remote host, please let us know. We will try to
2510integrate them as well. @xref{Bug Reports}.
2511
2512
c0de5d04
MA
2513@subsection Running remote programs that create local X11 windows
2514
2515If you want to run a remote program, which shall connect the X11
2516server you are using with your local host, you can set the
2517@var{$DISPLAY} environment variable on the remote host:
2518
2519@lisp
2520(add-to-list 'tramp-remote-process-environment
2521 (format "DISPLAY=%s" (getenv "DISPLAY")))
2522@end lisp
2523
2524@noindent
2525@code{(getenv "DISPLAY")} shall return a string containing a host
2526name, which can be interpreted on the remote host; otherwise you might
2527use a fixed host name. Strings like @code{:0} cannot be used properly
2528on the remote host.
2529
2530Another trick might be that you put @code{ForwardX11 yes} or
2531@code{ForwardX11Trusted yes} to your @file{~/.ssh/config} file for
2532that host.
2533
2534
f18ce50c
MA
2535@subsection Running shell-command on a remote host
2536@cindex shell-command
2537
2538@code{shell-command} allows to execute commands in a shell, either
2539synchronously, either asynchronously. This works also on remote
2540hosts. Example:
2541
2542@example
2543@kbd{C-x C-f @trampfn{sudo, , , } @key{RET}}
2544@kbd{M-! tail -f /var/log/syslog.log & @key{RET}}
2545@end example
2546
2547You will see the buffer @file{*Async Shell Command*}, containing the
2548continous output of the @command{tail} command.
2549
2550
4009494e
GM
2551@subsection Running eshell on a remote host
2552@cindex eshell
2553
2554@value{tramp} is integrated into @file{eshell.el}. That is, you can
2555open an interactive shell on your remote host, and run commands there.
2556After you have started @code{eshell}, you could perform commands like
2557this:
2558
2559@example
2560@b{~ $} cd @trampfn{sudo, , , /etc} @key{RET}
2561@b{@trampfn{sudo, root, host, /etc} $} hostname @key{RET}
2562host
2563@b{@trampfn{sudo, root, host, /etc} $} id @key{RET}
2564uid=0(root) gid=0(root) groups=0(root)
2565@b{@trampfn{sudo, root, host, /etc} $} find-file shadow @key{RET}
2566#<buffer shadow>
2567@b{@trampfn{sudo, root, host, /etc} $}
2568@end example
2569
2570
2571@anchor{Running a debugger on a remote host}
2572@subsection Running a debugger on a remote host
2573@cindex gud
2574@cindex gdb
2575@cindex perldb
2576
2577@file{gud.el} offers an unified interface to several symbolic
2578debuggers
2579@ifset emacs
2580@ifinfo
2581(@ref{Debuggers, , , @value{emacsdir}}).
2582@end ifinfo
2583@end ifset
2584With @value{tramp}, it is possible to debug programs on
2585remote hosts. You can call @code{gdb} with a remote file name:
2586
2587@example
2588@kbd{M-x gdb @key{RET}}
2589@b{Run gdb (like this):} gdb --annotate=3 @trampfn{ssh, , host, ~/myprog} @key{RET}
2590@end example
2591
2592The file name can also be relative to a remote default directory.
2593Given you are in a buffer that belongs to the remote directory
2594@trampfn{ssh, , host, /home/user}, you could call
2595
2596@example
2597@kbd{M-x perldb @key{RET}}
2598@b{Run perldb (like this):} perl -d myprog.pl @key{RET}
2599@end example
2600
2601It is not possible to use just the absolute local part of a remote
2602file name as program to debug, like @kbd{perl -d
2603/home/user/myprog.pl}, though.
2604
2605Arguments of the program to be debugged are taken literally. That
f18ce50c 2606means, file names as arguments must be given as ordinary relative or
4009494e
GM
2607absolute file names, without any remote specification.
2608
2609
dd753688
MA
2610@node Cleanup remote connections
2611@section Cleanup remote connections.
2612@cindex cleanup
2613
2614Sometimes it is useful to cleanup remote connections. The following
2615commands support this.
2616
2617@deffn Command tramp-cleanup-connection vec
2618This command flushes all connection related objects. @option{vec} is
2619the internal representation of a remote connection. Called
2620interactively, the command offers all active remote connections in the
2621minibuffer as remote file name prefix like @file{@trampfn{method,
2622user, host, }}. The cleanup includes password cache (@pxref{Password
a06a4a12 2623handling}), file cache, connection cache (@pxref{Connection caching}),
dd753688
MA
2624connection buffers.
2625@end deffn
2626
2627@deffn Command tramp-cleanup-all-connections
2628This command flushes objects for all active remote connections. The
2629same objects are removed as in @code{tramp-cleanup-connection}.
2630@end deffn
2631
2632@deffn Command tramp-cleanup-all-buffers
2633Like in @code{tramp-cleanup-all-connections}, all remote connections
2634are cleaned up. Additionally all buffers, which are related to a
2635remote connection, are killed.
2636@end deffn
2637
2638
4009494e
GM
2639@node Bug Reports
2640@chapter Reporting Bugs and Problems
2641@cindex bug reports
2642
2643Bugs and problems with @value{tramp} are actively worked on by the
2644development team. Feature requests and suggestions are also more than
2645welcome.
2646
2647The @value{tramp} mailing list is a great place to get information on
2648working with @value{tramp}, solving problems and general discussion
2649and advice on topics relating to the package. It is moderated so
2650non-subscribers can post but messages will be delayed, possibly up to
265148 hours (or longer in case of holidays), until the moderator approves
2652your message.
2653
2654The mailing list is at @email{tramp-devel@@gnu.org}. Messages sent to
2655this address go to all the subscribers. This is @emph{not} the address
2656to send subscription requests to.
2657
2658Subscribing to the list is performed via
2659@uref{http://lists.gnu.org/mailman/listinfo/tramp-devel/,
2660the @value{tramp} Mail Subscription Page}.
2661
dd753688 2662@findex tramp-bug
4009494e
GM
2663To report a bug in @value{tramp}, you should execute @kbd{M-x
2664tramp-bug}. This will automatically generate a buffer with the details
2665of your system and @value{tramp} version.
2666
2667When submitting a bug report, please try to describe in excruciating
2668detail the steps required to reproduce the problem, the setup of the
2669remote machine and any special conditions that exist. You should also
2670check that your problem is not described already in @xref{Frequently
2671Asked Questions}.
2672
2673If you can identify a minimal test case that reproduces the problem,
2674include that with your bug report. This will make it much easier for
2675the development team to analyze and correct the problem.
2676
2677Before reporting the bug, you should set the verbosity level to 6
2678(@pxref{Traces and Profiles, Traces}) in the @file{~/.emacs} file and
2679repeat the bug. Then, include the contents of the @file{*tramp/foo*}
2680and @file{*debug tramp/foo*} buffers in your bug report. A verbosity
2681level greater than 6 will produce a very huge debug buffer, which is
2682mostly not necessary for the analysis.
2683
2684Please be aware that, with a verbosity level of 6 or greater, the
2685contents of files and directories will be included in the debug
2686buffer. Passwords you've typed will never be included there.
2687
2688
2689@node Frequently Asked Questions
2690@chapter Frequently Asked Questions
2691@cindex frequently asked questions
2692@cindex FAQ
2693
2694@itemize @bullet
2695@item
2696Where can I get the latest @value{tramp}?
2697
2698@value{tramp} is available under the URL below.
2699
2700@noindent
2701@uref{ftp://ftp.gnu.org/gnu/tramp/}
2702
2703@noindent
2704There is also a Savannah project page.
2705
2706@noindent
2707@uref{http://savannah.gnu.org/projects/tramp/}
2708
2709
2710@item
2711Which systems does it work on?
2712
2713The package has been used successfully on GNU Emacs 21, GNU Emacs 22
2714and XEmacs 21 (starting with 21.4). Gateway methods are supported for
2715GNU Emacs 22 only.
2716
2717The package was intended to work on Unix, and it really expects a
2718Unix-like system on the remote end (except the @option{smb} method),
2719but some people seemed to have some success getting it to work on MS
2720Windows NT/2000/XP @value{emacsname}.
2721
2722There is some informations on @value{tramp} on NT at the following URL;
2723many thanks to Joe Stoy for providing the information:
2724@uref{ftp://ftp.comlab.ox.ac.uk/tmp/Joe.Stoy/}
2725
2726@c The link is broken. I've contacted Tom for clarification. Michael.
2727@ignore
2728The above mostly contains patches to old ssh versions; Tom Roche has a
2729Web page with instructions:
2730@uref{http://www4.ncsu.edu/~tlroche/plinkTramp.html}
2731@end ignore
2732
2733@item
2734How could I speed up @value{tramp}?
2735
2736In the backstage, @value{tramp} needs a lot of operations on the
2737remote host. The time for transferring data from and to the remote
2738host as well as the time needed to perform the operations there count.
2739In order to speed up @value{tramp}, one could either try to avoid some
2740of the operations, or one could try to improve their performance.
2741
193e6828 2742Use an external method, like @option{scpc}.
4009494e
GM
2743
2744Use caching. This is already enabled by default. Information about
2745the remote host as well as the remote files are cached for reuse. The
2746information about remote hosts is kept in the file specified in
2747@code{tramp-persistency-file-name}. Keep this file.
2748
2749Disable version control. If you access remote files which are not
2750under version control, a lot of check operations can be avoided by
2751disabling VC. This can be achieved by
2752
2753@lisp
c0de5d04
MA
2754(setq vc-ignore-dir-regexp
2755 (format "\\(%s\\)\\|\\(%s\\)"
2756 vc-ignore-dir-regexp
2757 tramp-file-name-regexp))
4009494e
GM
2758@end lisp
2759
2760Disable excessive traces. The default trace level of @value{tramp},
2761defined in the variable @code{tramp-verbose}, is 3. You should
2762increase this level only temporarily, hunting bugs.
2763
2764
2765@item
2766@value{tramp} does not connect to the remote host
2767
2768When @value{tramp} does not connect to the remote host, there are two
2769reasons heading the bug mailing list:
2770
2771@itemize @minus
2772
2773@item
2774Unknown characters in the prompt
2775
2776@value{tramp} needs to recognize the prompt on the remote machine
2777after execution any command. This is not possible, when the prompt
2778contains unknown characters like escape sequences for coloring. This
2779should be avoided on the remote side. @xref{Remote shell setup}. for
2780setting the regular expression detecting the prompt.
2781
2782You can check your settings after an unsuccessful connection by
2783switching to the @value{tramp} connection buffer @file{*tramp/foo*},
2784setting the cursor at the top of the buffer, and applying the expression
2785
2786@example
2787@kbd{M-: (re-search-forward (concat tramp-shell-prompt-pattern "$"))}
2788@end example
2789
2790If it fails, or the cursor is not moved at the end of the buffer, your
135305ed 2791prompt is not recognized correctly.
4009494e
GM
2792
2793A special problem is the zsh, which uses left-hand side and right-hand
2794side prompts in parallel. Therefore, it is necessary to disable the
2795zsh line editor on the remote host. You shall add to @file{~/.zshrc}
2796the following command:
2797
2798@example
2799[ $TERM = "dumb" ] && unsetopt zle && PS1='$ '
2800@end example
2801
2802
2803@item
2804@value{tramp} doesn't transfer strings with more than 500 characters
2805correctly
2806
2807On some few systems, the implementation of @code{process-send-string}
2808seems to be broken for longer strings. It is reported for HP-UX,
2809FreeBSD and Tru64 Unix, for example. This case, you should customize
2810the variable @code{tramp-chunksize} to 500. For a description how to
2811determine whether this is necessary see the documentation of
2812@code{tramp-chunksize}.
2813
2814Additionally, it will be useful to set @code{file-precious-flag} to
2815@code{t} for @value{tramp} files. Then the file contents will be
2816written into a temporary file first, which is checked for correct
2817checksum.
2818@ifinfo
2819@pxref{Saving Buffers, , , elisp}
2820@end ifinfo
2821
2822@lisp
2823(add-hook
2824 'find-file-hooks
2825 '(lambda ()
2826 (when (file-remote-p default-directory)
2827 (set (make-local-variable 'file-precious-flag) t))))
2828@end lisp
2829
2830@end itemize
2831
2832
2833@item
2834File name completion does not work with @value{tramp}
2835
2836When you log in to the remote machine, do you see the output of
2837@command{ls} in color? If so, this may be the cause of your problems.
2838
2839@command{ls} outputs @acronym{ANSI} escape sequences that your terminal
2840emulator interprets to set the colors. These escape sequences will
2841confuse @value{tramp} however.
2842
2843In your @file{.bashrc}, @file{.profile} or equivalent on the remote
2844machine you probably have an alias configured that adds the option
2845@option{--color=yes} or @option{--color=auto}.
2846
2847You should remove that alias and ensure that a new login @emph{does not}
2848display the output of @command{ls} in color. If you still cannot use
2849filename completion, report a bug to the @value{tramp} developers.
2850
2851
2852@item
2853File name completion does not work in large directories
2854
2855@value{tramp} uses globbing for some operations. (Globbing means to use the
2856shell to expand wildcards such as `*.c'.) This might create long
2857command lines, especially in directories with many files. Some shells
2858choke on long command lines, or don't cope well with the globbing
2859itself.
2860
2861If you have a large directory on the remote end, you may wish to execute
2862a command like @samp{ls -d * ..?* > /dev/null} and see if it hangs.
2863Note that you must first start the right shell, which might be
2864@command{/bin/sh}, @command{ksh} or @command{bash}, depending on which
2865of those supports tilde expansion.
2866
2867
2868@item
2869How can I get notified when @value{tramp} file transfers are complete?
2870
2871The following snippet can be put in your @file{~/.emacs} file. It
2872makes @value{emacsname} beep after reading from or writing to the
2873remote host.
2874
2875@lisp
2876(defadvice tramp-handle-write-region
2877 (after tramp-write-beep-advice activate)
e1176b47
MA
2878 "Make tramp beep after writing a file."
2879 (interactive)
2880 (beep))
4009494e
GM
2881
2882(defadvice tramp-handle-do-copy-or-rename-file
2883 (after tramp-copy-beep-advice activate)
e1176b47
MA
2884 "Make tramp beep after copying a file."
2885 (interactive)
2886 (beep))
4009494e
GM
2887
2888(defadvice tramp-handle-insert-file-contents
e1176b47
MA
2889 (after tramp-insert-beep-advice activate)
2890 "Make tramp beep after inserting a file."
2891 (interactive)
2892 (beep))
2893@end lisp
2894
2895
2896@ifset emacs
2897@item
2898I'ld like to get a Visual Warning when working in a sudo:ed context
2899
2900When you are working with @samp{root} privileges, it might be useful
2901to get an indication in the buffer's modeline. The following code,
2902tested with @value{emacsname} 22.1, does the job. You should put it
2903into your @file{~/.emacs}:
2904
2905@lisp
2906(defun my-mode-line-function ()
2907 (when (string-match "^/su\\(do\\)?:" default-directory)
2908 (setq mode-line-format
2909 (format-mode-line mode-line-format 'font-lock-warning-face))))
2910
2911(add-hook 'find-file-hooks 'my-mode-line-function)
2912(add-hook 'dired-mode-hook 'my-mode-line-function)
4009494e 2913@end lisp
e1176b47 2914@end ifset
4009494e
GM
2915
2916
2917@ifset emacs
2918@item
2919I'ld like to see a host indication in the mode line when I'm remote
2920
2921The following code has been tested with @value{emacsname} 22.1. You
2922should put it into your @file{~/.emacs}:
2923
2924@lisp
2925(defconst my-mode-line-buffer-identification
2926 (list
2927 '(:eval
2928 (let ((host-name
2929 (if (file-remote-p default-directory)
2930 (tramp-file-name-host
2931 (tramp-dissect-file-name default-directory))
2932 (system-name))))
2933 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
2934 (substring host-name 0 (match-beginning 1))
2935 host-name)))
2936 ": %12b"))
2937
2938(setq-default
2939 mode-line-buffer-identification
2940 my-mode-line-buffer-identification)
2941
2942(add-hook
2943 'dired-mode-hook
2944 '(lambda ()
2945 (setq
2946 mode-line-buffer-identification
2947 my-mode-line-buffer-identification)))
2948@end lisp
2949
2950Since @value{emacsname} 23.1, the mode line contains an indication if
2951@code{default-directory} for the current buffer is on a remote host.
2952The corresponding tooltip includes the name of that host. If you
2953still want the host name as part of the mode line, you can use the
2954example above, but the @code{:eval} clause can be simplified:
2955
2956@lisp
2957 '(:eval
2958 (let ((host-name
2959 (or (file-remote-p default-directory 'host)
2960 (system-name))))
2961 (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
2962 (substring host-name 0 (match-beginning 1))
2963 host-name)))
2964@end lisp
2965@end ifset
2966
2967
2968@ifset emacs
2969@item
2970My remote host does not understand default directory listing options
2971
2972@value{emacsname} computes the @command{dired} options depending on
2973the local host you are working. If your @command{ls} command on the
2974remote host does not understand those options, you can change them
2975like this:
2976
2977@lisp
2978(add-hook
2979 'dired-before-readin-hook
2980 '(lambda ()
2981 (when (file-remote-p default-directory)
2982 (setq dired-actual-switches "-al"))))
2983@end lisp
2984@end ifset
2985
2986
2987@item
2988There's this @file{~/.sh_history} file on the remote host which keeps
2989growing and growing. What's that?
2990
2991Sometimes, @value{tramp} starts @command{ksh} on the remote host for
2992tilde expansion. Maybe @command{ksh} saves the history by default.
2993@value{tramp} tries to turn off saving the history, but maybe you have
2994to help. For example, you could put this in your @file{.kshrc}:
2995
2996@example
2997if [ -f $HOME/.sh_history ] ; then
2998 /bin/rm $HOME/.sh_history
2999fi
3000if [ "$@{HISTFILE-unset@}" != "unset" ] ; then
3001 unset HISTFILE
3002fi
3003if [ "$@{HISTSIZE-unset@}" != "unset" ] ; then
3004 unset HISTSIZE
3005fi
3006@end example
3007
3008
3009@item There are longish file names to type. How to shorten this?
3010
3011Let's say you need regularly access to @file{@trampfn{ssh, news,
3012news.my.domain, /opt/news/etc}}, which is boring to type again and
3013again. The following approaches can be mixed:
3014
3015@enumerate
3016
3017@item Use default values for method and user name:
3018
3019You can define default methods and user names for hosts,
3020(@pxref{Default Method}, @pxref{Default User}):
3021
3022@lisp
3023(setq tramp-default-method "ssh"
3024 tramp-default-user "news")
3025@end lisp
3026
3027The file name left to type would be
3028@kbd{C-x C-f @trampfn{, , news.my.domain, /opt/news/etc}}.
3029
3030Note, that there are some useful settings already. Accessing your
3031local host as @samp{root} user, is possible just by @kbd{C-x C-f
3032@trampfn{su, , ,}}.
3033
3034@item Use configuration possibilities of your method:
3035
3036Several connection methods (i.e. the programs used) offer powerful
3037configuration possibilities (@pxref{Customizing Completion}). In the
3038given case, this could be @file{~/.ssh/config}:
3039
3040@example
3041Host xy
3042 HostName news.my.domain
3043 User news
3044@end example
3045
3046The file name left to type would be @kbd{C-x C-f @trampfn{ssh, , xy,
3047/opt/news/etc}}. Depending on files in your directories, it is even
9bbb9638 3048possible to complete the host name with @kbd{C-x C-f
4009494e
GM
3049@value{prefix}ssh@value{postfixhop}x @key{TAB}}.
3050
3051@item Use environment variables:
3052
3053File names typed in the minibuffer can be expanded by environment
3054variables. You can set them outside @value{emacsname}, or even with
3055Lisp:
3056
3057@lisp
3058(setenv "xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")
3059@end lisp
3060
3061Then you need simply to type @kbd{C-x C-f $xy @key{RET}}, and here you
3062are. The disadvantage is, that you cannot edit the file name, because
3063environment variables are not expanded during editing in the
3064minibuffer.
3065
3066@item Define own keys:
3067
3068You can define your own key sequences in @value{emacsname}, which can
3069be used instead of @kbd{C-x C-f}:
3070
3071@lisp
3072(global-set-key
3073 [(control x) (control y)]
3074 (lambda ()
3075 (interactive)
3076 (find-file
3077 (read-file-name
3078 "Find Tramp file: "
3079 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))))
3080@end lisp
3081
3082Simply typing @kbd{C-x C-y} would initialize the minibuffer for
3083editing with your beloved file name.
3084
3085See also @uref{http://www.emacswiki.org/cgi-bin/wiki/TrampMode, the
3086Emacs Wiki} for a more comprehensive example.
3087
3088@item Define own abbreviation (1):
3089
3090It is possible to define an own abbreviation list for expanding file
3091names:
3092
3093@lisp
3094(add-to-list
3095 'directory-abbrev-alist
3096 '("^/xy" . "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3097@end lisp
3098
3099This shortens the file openening command to @kbd{C-x C-f /xy
3100@key{RET}}. The disadvantage is, again, that you cannot edit the file
3101name, because the expansion happens after entering the file name only.
3102
3103@item Define own abbreviation (2):
3104
3105The @code{abbrev-mode} gives more flexibility for editing the
3106minibuffer:
3107
3108@lisp
3109(define-abbrev-table 'my-tramp-abbrev-table
3110 '(("xy" "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}")))
3111
3112(add-hook
3113 'minibuffer-setup-hook
3114 '(lambda ()
3115 (abbrev-mode 1)
3116 (setq local-abbrev-table my-tramp-abbrev-table)))
3117
3118(defadvice minibuffer-complete
3119 (before my-minibuffer-complete activate)
3120 (expand-abbrev))
3121
3122;; If you use partial-completion-mode
3123(defadvice PC-do-completion
3124 (before my-PC-do-completion activate)
3125 (expand-abbrev))
3126@end lisp
3127
3128After entering @kbd{C-x C-f xy @key{TAB}}, the minibuffer is
3129expanded, and you can continue editing.
3130
3131@item Use bookmarks:
3132
3133Bookmarks can be used to visit Tramp files or directories.
3134@ifinfo
3135@pxref{Bookmarks, , , @value{emacsdir}}
3136@end ifinfo
3137
3138When you have opened @file{@trampfn{ssh, news, news.my.domain,
3139/opt/news/etc/}}, you should save the bookmark via
3140@ifset emacs
3141@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{set}}.
3142@end ifset
3143@ifset xemacs
3144@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{set}}.
3145@end ifset
3146
3147Later on, you can always navigate to that bookmark via
3148@ifset emacs
3149@kbd{@key{menu-bar} @key{edit} @key{bookmarks} @key{jump}}.
3150@end ifset
3151@ifset xemacs
3152@kbd{@key{menu-bar} @key{view} @key{bookmarks} @key{jump}}.
3153@end ifset
3154
3155@item Use recent files:
3156
3157@ifset emacs
3158@file{recentf}
3159@end ifset
3160@ifset xemacs
3161@file{recent-files}
3162@end ifset
3163remembers visited places.
3164@ifinfo
3165@ifset emacs
3166@pxref{File Conveniences, , , @value{emacsdir}}
3167@end ifset
3168@ifset xemacs
3169@pxref{recent-files, , , edit-utils}
3170@end ifset
3171@end ifinfo
3172
3173You could keep remote file names in the recent list without checking
3174their readability through a remote access:
3175
3176@lisp
3177@ifset emacs
3178(recentf-mode 1)
3179@end ifset
3180@ifset xemacs
3181(recent-files-initialize)
3182(add-hook
3183 'find-file-hooks
3184 (lambda ()
3185 (when (file-remote-p (buffer-file-name))
3186 (recent-files-make-permanent)))
3187 'append)
3188@end ifset
3189@end lisp
3190
3191The list of files opened recently is reachable via
3192@ifset emacs
3193@kbd{@key{menu-bar} @key{file} @key{Open Recent}}.
3194@end ifset
3195@ifset xemacs
3196@kbd{@key{menu-bar} @key{Recent Files}}.
3197@end ifset
3198
3199@ifset emacs
3200@item Use filecache:
3201
3202@file{filecache} remembers visited places. Add the directory into
3203the cache:
3204
3205@lisp
3206(eval-after-load "filecache"
3207 '(file-cache-add-directory
3208 "@trampfn{ssh, news, news.my.domain, /opt/news/etc/}"))
3209@end lisp
3210
3211Whenever you want to load a file, you can enter @kbd{C-x C-f
3212C-@key{TAB}} in the minibuffer. The completion is done for the given
3213directory.
3214@end ifset
3215
3216@ifset emacs
3217@item Use bbdb:
3218
3219@file{bbdb} has a built-in feature for @value{ftppackagename} files,
3220which works also for @value{tramp}.
3221@ifinfo
3222@pxref{bbdb-ftp, Storing FTP sites in the BBDB, , bbdb}
3223@end ifinfo
3224
3225You need to load @file{bbdb}:
3226
3227@lisp
3228(require 'bbdb)
3229(bbdb-initialize)
3230@end lisp
3231
3232Then you can create a BBDB entry via @kbd{M-x bbdb-create-ftp-site}.
3233Because BBDB is not prepared for @value{tramp} syntax, you must
3234specify a method together with the user name, when needed. Example:
3235
3236@example
3237@kbd{M-x bbdb-create-ftp-site @key{RET}}
3238@b{Ftp Site:} news.my.domain @key{RET}
3239@b{Ftp Directory:} /opt/news/etc/ @key{RET}
3240@b{Ftp Username:} ssh@value{postfixhop}news @key{RET}
3241@b{Company:} @key{RET}
3242@b{Additional Comments:} @key{RET}
3243@end example
3244
3245When you have opened your BBDB buffer, you can access such an entry by
3246pressing the key @key{F}.
3247@end ifset
3248
3249@end enumerate
3250
3251I would like to thank all @value{tramp} users, who have contributed to
3252the different recipes!
3253
3254
66043531
MA
3255@ifset emacs
3256@item
3257How can I use @value{tramp} to connect to a remote @value{emacsname}
3258session?
3259
3260You can configure Emacs Client doing this.
3261@ifinfo
3262@xref{Emacs Server, , , @value{emacsdir}}.
3263@end ifinfo
3264
3265On the remote host, you start the Emacs Server:
3266
3267@lisp
3268(require 'server)
3269(setq server-host (system-name)
3270 server-use-tcp t)
3271(server-start)
3272@end lisp
3273
3274Make sure, that the result of @code{(system-name)} can be resolved on
3275your local host; otherwise you might use a hard coded IP address.
3276
3277The resulting file @file{~/.emacs.d/server/server} must be copied to
3278your local host, at the same location. You can call then the Emacs
3279Client from the command line:
3280
3281@example
3282emacsclient @trampfn{ssh, user, host, /file/to/edit}
3283@end example
3284
3285@code{user} and @code{host} shall be related to your local host.
3ef49c53
MA
3286
3287If you want to use Emacs Client also as editor for other programs, you
3288could write a script @file{emacsclient.sh}:
3289
3290@example
3291#!/bin/sh
3292emacsclient @trampfn{ssh, `whoami`, `hostname --fqdn`, $1}
3293@end example
3294
3295Then you must set the environment variable @code{EDITOR} pointing to
3296that script:
3297
3298@example
3299export EDITOR=/path/to/emacsclient.sh
3300@end example
66043531
MA
3301@end ifset
3302
3303
4009494e
GM
3304@item
3305How can I disable @value{tramp}?
3306
3307Shame on you, why did you read until now?
3308
586b90f1
MA
3309@itemize @minus
3310
3311@item
4009494e
GM
3312@ifset emacs
3313If you just want to have @value{ftppackagename} as default remote
3314files access package, you should apply the following code:
3315
3316@lisp
3317(setq tramp-default-method "ftp")
3318@end lisp
3319@end ifset
3320
586b90f1
MA
3321@item
3322In order to disable
3323@ifset emacs
3324@value{tramp} (and @value{ftppackagename}),
3325@end ifset
3326@ifset xemacs
3327@value{tramp},
3328@end ifset
3329you must set @code{tramp-mode} to @code{nil}:
3330
3331@lisp
3332(setq tramp-mode nil)
3333@end lisp
3334
3335@item
4009494e
GM
3336Unloading @value{tramp} can be achieved by applying @kbd{M-x
3337tramp-unload-tramp}.
3338@ifset emacs
3339This resets also the @value{ftppackagename} plugins.
3340@end ifset
3341@end itemize
586b90f1 3342@end itemize
4009494e
GM
3343
3344
3345@c For the developer
4009494e
GM
3346@node Files directories and localnames
3347@chapter How file names, directories and localnames are mangled and managed.
3348
3349@menu
3350* Localname deconstruction:: Breaking a localname into its components.
ea3fc256
MA
3351@ifset emacs
3352* External packages:: Integration with external Lisp packages.
3353@end ifset
4009494e
GM
3354@end menu
3355
3356
3357@node Localname deconstruction
3358@section Breaking a localname into its components.
3359
3360@value{tramp} file names are somewhat different, obviously, to ordinary file
3361names. As such, the lisp functions @code{file-name-directory} and
3362@code{file-name-nondirectory} are overridden within the @value{tramp}
3363package.
3364
3365Their replacements are reasonably simplistic in their approach. They
3366dissect the filename, call the original handler on the localname and
3367then rebuild the @value{tramp} file name with the result.
3368
3369This allows the platform specific hacks in the original handlers to take
3370effect while preserving the @value{tramp} file name information.
3371
3372
ea3fc256
MA
3373@ifset emacs
3374@node External packages
3375@section Integration with external Lisp packages.
b59329e0 3376@subsection Filename completion.
ea3fc256
MA
3377
3378While reading filenames in the minibuffer, @value{tramp} must decide
3379whether it completes possible incomplete filenames, or not. Imagine
3380there is the following situation: You have typed @kbd{C-x C-f
3381@value{prefix}ssh@value{postfixhop} @key{TAB}}. @value{tramp} cannot
3382know, whether @option{ssh} is a method or a host name. It checks
3383therefore the last input character you have typed. If this is
3384@key{TAB}, @key{SPACE} or @kbd{?}, @value{tramp} assumes that you are
3385still in filename completion, and it does not connect to the possible
3386remote host @option{ssh}.
3387
3388@vindex tramp-completion-mode
3389External packages, which use other characters for completing filenames
3390in the minibuffer, must signal this to @value{tramp}. For this case,
3391the variable @code{tramp-completion-mode} can be bound temporarily to
b59329e0 3392a non-@code{nil} value.
ea3fc256
MA
3393
3394@lisp
3395(let ((tramp-completion-mode t))
3396 ...)
3397@end lisp
b59329e0
MA
3398
3399
3400@subsection File attributes cache.
3401
3402When @value{tramp} runs remote processes, files on the remote host
3403could change their attributes. Consequently, @value{tramp} must flush
3404its complete cache keeping attributes for all files of the remote host
3405it has seen so far.
3406
3407This is a performance degradation, because the lost file attributes
3408must be recomputed, when needed again. In cases the caller of
3409@code{process-file} knows that there are file attribute changes, it
3410shall let-bind the variable @code{process-file-side-effects} to
3411@code{nil}. @value{tramp} wouldn't flush the file attributes cache then.
3412
3413@lisp
3414(let (process-file-side-effects)
3415 ...)
3416@end lisp
ea3fc256
MA
3417@end ifset
3418
3419
4009494e
GM
3420@node Traces and Profiles
3421@chapter How to Customize Traces
3422
3423All @value{tramp} messages are raised with a verbosity level. The
3424verbosity level can be any number between 0 and 10. Only messages with
3425a verbosity level less than or equal to @code{tramp-verbose} are
3426displayed.
3427
3428The verbosity levels are
3429
3430 @w{ 0} silent (no @value{tramp} messages at all)
3431@*@indent @w{ 1} errors
3432@*@indent @w{ 2} warnings
3433@*@indent @w{ 3} connection to remote hosts (default verbosity)
3434@*@indent @w{ 4} activities
3435@*@indent @w{ 5} internal
3436@*@indent @w{ 6} sent and received strings
3437@*@indent @w{ 7} file caching
3438@*@indent @w{ 8} connection properties
3439@*@indent @w{10} traces (huge)
3440
3441When @code{tramp-verbose} is greater than or equal to 4, the messages
3442are also written into a @value{tramp} debug buffer. This debug buffer
3443is useful for analysing problems; sending a @value{tramp} bug report
3444should be done with @code{tramp-verbose} set to a verbosity level of at
3445least 6 (@pxref{Bug Reports}).
3446
3447The debug buffer is in
3448@ifinfo
3449@ref{Outline Mode, , , @value{emacsdir}}.
3450@end ifinfo
3451@ifnotinfo
3452Outline Mode.
3453@end ifnotinfo
3454That means, you can change the level of messages to be viewed. If you
3455want, for example, see only messages up to verbosity level 5, you must
3456enter @kbd{C-u 6 C-c C-q}.
3457@ifinfo
3458Other keys for navigating are described in
3459@ref{Outline Visibility, , , @value{emacsdir}}.
3460@end ifinfo
3461
3462@value{tramp} errors are handled internally in order to raise the
3463verbosity level 1 messages. When you want to get a Lisp backtrace in
3464case of an error, you need to set both
3465
3466@lisp
3467(setq debug-on-error t
3468 debug-on-signal t)
3469@end lisp
3470
3471Sometimes, it might be even necessary to step through @value{tramp}
3472function call traces. Such traces are enabled by the following code:
3473
3474@lisp
3475(require 'tramp)
3476(require 'trace)
03b5bade
MA
3477(dolist (elt (all-completions "tramp-" obarray 'functionp))
3478 (trace-function-background (intern elt)))
4009494e
GM
3479(untrace-function 'tramp-read-passwd)
3480(untrace-function 'tramp-gw-basic-authentication)
3481@end lisp
3482
3483The function call traces are inserted in the buffer
3484@file{*trace-output*}. @code{tramp-read-passwd} and
3485@code{tramp-gw-basic-authentication} shall be disabled when the
3486function call traces are added to @value{tramp}, because both
3487functions return password strings, which should not be distributed.
3488
3489
3490@node Issues
3491@chapter Debatable Issues and What Was Decided
3492
3493@itemize @bullet
3494@item The uuencode method does not always work.
3495
3496Due to the design of @value{tramp}, the encoding and decoding programs
3497need to read from stdin and write to stdout. On some systems,
3498@command{uudecode -o -} will read stdin and write the decoded file to
3499stdout, on other systems @command{uudecode -p} does the same thing.
3500But some systems have uudecode implementations which cannot do this at
3501all---it is not possible to call these uudecode implementations with
3502suitable parameters so that they write to stdout.
3503
3504Of course, this could be circumvented: the @code{begin foo 644} line
3505could be rewritten to put in some temporary file name, then
3506@command{uudecode} could be called, then the temp file could be
3507printed and deleted.
3508
3509But I have decided that this is too fragile to reliably work, so on some
3510systems you'll have to do without the uuencode methods.
3511
3512@item The @value{tramp} filename syntax differs between GNU Emacs and XEmacs.
3513
3514The GNU Emacs maintainers wish to use a unified filename syntax for
3515Ange-FTP and @value{tramp} so that users don't have to learn a new
3516syntax. It is sufficient to learn some extensions to the old syntax.
3517
3518For the XEmacs maintainers, the problems caused from using a unified
3519filename syntax are greater than the gains. The XEmacs package system
3520uses EFS for downloading new packages. So, obviously, EFS has to be
3521installed from the start. If the filenames were unified, @value{tramp}
3522would have to be installed from the start, too.
3523
3524@ifset xemacs
3525@strong{Note:} If you'd like to use a similar syntax like
3526@value{ftppackagename}, you need the following settings in your init
3527file:
3528
3529@lisp
3530(setq tramp-unified-filenames t)
3531(require 'tramp)
3532@end lisp
3533
3534The autoload of the @value{emacsname} @value{tramp} package must be
3535disabled. This can be achieved by setting file permissions @code{000}
3536to the files @file{.../xemacs-packages/lisp/tramp/auto-autoloads.el*}.
3537
3538In case of unified filenames, all @value{emacsname} download sites are
3539added to @code{tramp-default-method-alist} with default method
3540@option{ftp} @xref{Default Method}. These settings shouldn't be
3541touched for proper working of the @value{emacsname} package system.
3542
3543The syntax for unified filenames is described in the @value{tramp} manual
3544for @value{emacsothername}.
3545@end ifset
3546@end itemize
3547
3548@node GNU Free Documentation License
3549@appendix GNU Free Documentation License
3550@include doclicense.texi
3551
dd753688
MA
3552@node Function Index
3553@unnumbered Function Index
3554@printindex fn
3555
3556@node Variable Index
3557@unnumbered Variable Index
3558@printindex vr
3559
4009494e 3560@node Concept Index
4009494e
GM
3561@unnumbered Concept Index
3562@printindex cp
dd753688 3563
4009494e
GM
3564@bye
3565
3566@c TODO
3567@c
3568@c * Say something about the .login and .profile files of the remote
3569@c shells.
3570@c * Explain how tramp.el works in principle: open a shell on a remote
3571@c host and then send commands to it.
193e6828
MA
3572@c * Use `filename' resp. `file name' consistently.
3573@c * Use `host' resp. `machine' consistently.
3574@c * Consistent small or capitalized words especially in menues.
4009494e
GM
3575
3576@ignore
3577 arch-tag: f96dd66e-6dd3-4c92-8d77-9c56205ba808
3578@end ignore