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