]> code.delx.au - gnu-emacs/blobdiff - doc/misc/tramp.texi
Add a note how to use `tramp-own-remote-path'
[gnu-emacs] / doc / misc / tramp.texi
index 37bf7ea8bc48d792878284555b97404d4ef4b3e5..e8c181b22929348d8f6e64be786178a28e2300bc 100644 (file)
@@ -17,9 +17,9 @@
 
 @include trampver.texi
 
-@c Macro for formatting a file name according to the respective syntax.
-@c Macro arguments should not have any leading or
-@c trailing whitespace.  Not very elegant, but I don't know it better.
+@c Macro for formatting a file name according to the respective
+@c syntax.  Macro arguments should not have any leading or trailing
+@c whitespace.  Not very elegant, but I don't know it better.
 
 @macro trampfn {method, userhost, localname}
 @value{prefix}@c
@@ -68,10 +68,10 @@ copy and modify this GNU manual.''
 @contents
 
 
-@ifnottex
 @node Top, Overview, (dir), (dir)
 @top @value{tramp} version @value{trampver} User Manual
 
+@ifnottex
 This file documents @value{tramp} version @value{trampver}, a remote file
 editing package for Emacs.
 
@@ -112,7 +112,6 @@ The Mail Archive}.
 @end ifhtml
 
 @insertcopying
-
 @end ifnottex
 
 @menu
@@ -414,15 +413,12 @@ April 2000 was the first time when multi-hop methods were added.  In
 July 2002, @value{tramp} unified file names with Ange-FTP@.  In July
 2004, proxy hosts replaced multi-hop methods.  Running commands on
 remote hosts was introduced in December 2005.  Support for gateways
-since April 2007.
-@ifset emacsgvfs
-GVFS integration started in February 2009.
-@end ifset
-Remote commands on Windows hosts since September 2011.  Ad-hoc
-multi-hop methods (with a changed syntax) re-enabled in November 2011.
-
-In November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
+since April 2007.  GVFS integration started in February 2009.  Remote
+commands on Windows hosts since September 2011.  Ad-hoc multi-hop
+methods (with a changed syntax) re-enabled in November 2011.  In
+November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
 
+XEmacs support has been stopped in January 2016.
 
 @c Installation chapter is necessary only in case of standalone
 @c installation.  Text taken from trampinst.texi.
@@ -438,8 +434,8 @@ In November 2012, added Juergen Hoetzel's @file{tramp-adb.el}.
 
 @value{tramp} is initially configured to use the @command{scp} program
 to connect to the remote host.  Just type @kbd{C-x C-f} and then enter
-file name @file{@trampf{user@@host,/path/to.file}}.  For details,
-see @xref{Default Method}.
+file name @file{@trampf{user@@host,/path/to.file}}.  For details, see
+@xref{Default Method}.
 
 For problems related to the behavior of remote shell, see @ref{Remote
 shell setup} for details.
@@ -569,7 +565,7 @@ remote host.
 @command{ssh} can also take extra parameters as port numbers.  For
 example, a host on port 42 is specified as @file{host#42} (the real
 host name, a hash sign, then a port number).  It is the same as passing
-@code{-p 42} to the @command{ssh} command.
+@samp{-p 42} to the @command{ssh} command.
 
 @item @option{telnet}
 @cindex method telnet
@@ -594,6 +590,12 @@ the host returned by the function @command{(system-name)}.  See
 Similar to @option{su} method, @option{sudo} uses @command{sudo}.
 @command{sudo} must have sufficient rights to start a shell.
 
+@item @option{doas}
+@cindex method doas
+@cindex doas method
+
+This method is used on OpenBSD like the @command{sudo} command.
+
 @item @option{sg}
 @cindex method sg
 @cindex sg method
@@ -815,11 +817,9 @@ capable of servicing requests from @value{tramp}.
 @cindex method smb
 @cindex smb method
 
-This is another non-native @value{tramp} method.  @command{smbclient}
-connects to any host with SMB/CIFS protocol, such as MS Windows and
-Samba Servers running on Unixes.  Tests show this @value{tramp} method
-works with MS Windows NT, MS Windows 2000, MS Windows XP, MS Windows
-Vista, and MS Windows 7.
+This non-native @value{tramp} method connects via the Server Message
+Block (SMB) networking protocol to hosts running file servers that are
+typically based on @url{https://www.samba.org/,,Samba} or MS Windows.
 
 Using @command{smbclient} requires a few tweaks when working with
 @value{tramp}:
@@ -827,12 +827,12 @@ Using @command{smbclient} requires a few tweaks when working with
 The first directory in the localname must be a share name on the
 remote host.
 
-Since smb shares end in the @code{$} character, @value{tramp} must use
+Since SMB shares end in the @code{$} character, @value{tramp} must use
 @code{$$} when specifying those shares to avoid environment variable
 substitutions.
 
 When @value{tramp} is not specific about the share name or uses the
-generic remote directory @code{/}, @command{smbclient} returns all
+generic remote directory @file{/}, @command{smbclient} returns all
 available shares.
 
 Since SMB authentication is based on each SMB share, @value{tramp}
@@ -871,16 +871,18 @@ uses the anonymous user (without prompting for password).  This
 behavior is unlike other @value{tramp} methods, where local user name
 is substituted.
 
-@option{smb} method is unavailable if Emacs is run under a local user
-authentication context in MS Windows.  However such users can still
-access remote files using UNC file names instead of @value{tramp}:
+The @option{smb} method is unavailable if Emacs is run under a local
+user authentication context in MS Windows.  However such users can
+still access remote files using UNC file names instead of @value{tramp}:
 
 @example
 //melancholia/daniel$$/.emacs
 @end example
 
-UNC file name specification does not allow to specify a different user
-name for authentication like the @command{smbclient} can.
+UNC file name specification does not allow the specification of a
+different user name for authentication like the @command{smbclient}
+can.
+
 
 @item @option{adb}
 @cindex method adb
@@ -901,17 +903,17 @@ Emacs.
 
 @value{tramp} does not require a host name part of the remote file
 name when a single Android device is connected to @command{adb}.
-@value{tramp} instead uses @file{@trampfn{adb,,}} as the default
-name.  @command{adb devices} shows available host names.
+@value{tramp} instead uses @file{@trampfn{adb,,}} as the default name.
+@command{adb devices} shows available host names.
 
 @option{adb} method normally does not need user name to authenticate
-on the Andriod device because it runs under the @command{adbd}
+on the Android device because it runs under the @command{adbd}
 process.  But when a user name is specified, however, @value{tramp}
 applies an @command{su} in the syntax.  When authentication does not
 succeed, especially on un-rooted Android devices, @value{tramp}
 displays login errors.
 
-For Andriod devices connected through TCP/IP, a port number can be
+For Android devices connected through TCP/IP, a port number can be
 specified using @file{device#42} host name syntax or @value{tramp} can
 use the default value as declared in @command{adb} command.  Port
 numbers are not applicable to Android devices connected through USB@.
@@ -919,7 +921,6 @@ numbers are not applicable to Android devices connected through USB@.
 @end table
 
 
-@ifset emacsgvfs
 @node GVFS based methods
 @section GVFS based external methods
 @cindex methods, gvfs
@@ -956,6 +957,22 @@ syntax requires a leading volume (share) name, for example:
 based on standard protocols, such as HTTP@.  @option{davs} does the same
 but with SSL encryption.  Both methods support the port numbers.
 
+@item @option{gdrive}
+@cindex method gdrive
+@cindex gdrive method
+@cindex Google Drive
+
+Via the @option{gdrive} method it is possible to access your Google
+Drive online storage.  User and host name of the remote file name are
+your email address of the Google Drive credentials, like
+@file{@trampfn{gdrive,john.doe@@gmail.com,/}}.  These credentials must
+be populated in your @command{Online Accounts} application outside Emacs.
+
+Since Google Drive uses cryptic blob file names internally,
+@value{tramp} works with the @code{display-name} of the files.  This
+could produce unexpected behaviour in case two files in the same
+directory have the same @code{display-name}, such a situation must be avoided.
+
 @item @option{obex}
 @cindex method obex
 @cindex obex method
@@ -985,10 +1002,9 @@ requires the SYNCE-GVFS plugin.
 @vindex tramp-gvfs-methods
 This custom option is a list of external methods for GVFS@.  By
 default, this list includes @option{afp}, @option{dav}, @option{davs},
-@option{obex}, @option{sftp} and @option{synce}.  Other methods to
-include are: @option{ftp} and @option{smb}.
+@option{gdrive}, @option{obex}, @option{sftp} and @option{synce}.
+Other methods to include are: @option{ftp} and @option{smb}.
 @end defopt
-@end ifset
 
 
 @node Gateway methods
@@ -1275,9 +1291,9 @@ access, then use this alist entry:
              '("\\.your\\.domain\\'" "\\`root\\'" "@trampfn{ssh,%h,}"))
 @end lisp
 
-Opening @file{@trampfn{sudo,randomhost.your.domain,}} first
-connects to @samp{randomhost.your.domain} via @code{ssh} under your
-account name, and then perform @code{sudo -u root} on that host.
+Opening @file{@trampfn{sudo,randomhost.your.domain,}} first connects
+to @samp{randomhost.your.domain} via @code{ssh} under your account
+name, and then perform @code{sudo -u root} on that host.
 
 It is key for the sudo method in the above example to be applied on
 the host after reaching it and not on the local host.
@@ -1529,16 +1545,6 @@ can they extend beyond the lifetime of the current Emacs session.  Set
 
 Set @code{password-cache} to @code{nil} to disable password caching.
 
-@strong{Implementation Note}: password caching depends on
-@file{password-cache.el} package.  @value{tramp} activates password
-caching only if @value{tramp} can discover, while Emacs is loading,
-the package through @code{load-path}.
-
-@ifset installchapter
-@file{password.el} is available from No Gnus or from the @value{tramp}
-@file{contrib} directory, see @ref{Installation parameters}.
-@end ifset
-
 
 @node Connection caching
 @section Reusing connection related information
@@ -1660,13 +1666,16 @@ shown below for @value{tramp} to use when connecting.
 
 Another way to find the remote path is to use the path assigned to the
 remote user by the remote host.  @value{tramp} does not normally retain
-this remote path after logging.  However, @code{tramp-own-remote-path}
+this remote path after login.  However, @code{tramp-own-remote-path}
 preserves the path value, which can be used to update
 @code{tramp-remote-path}.
 
 @lisp
 (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
 @end lisp
+
+@strong{Note} that this works only if your remote @command{/bin/sh}
+shell supports the login argument @samp{-l}.
 @end defopt
 
 When remote search paths are changed, local @value{tramp} caches must
@@ -1858,7 +1867,7 @@ install and execute a listener as follows (see @code{tramp-methods}):
 @end example
 
 The above command-line syntax has changed with @command{busybox}
-versions.  If @command{nc} refuses the @command{-p} parameter, then
+versions.  If @command{nc} refuses the @samp{-p} parameter, then
 overwrite as follows:
 
 @lisp
@@ -1880,15 +1889,15 @@ where @samp{192.168.0.1} is the remote host IP address
 
 @value{tramp} uses the @option{adb} method to access Android
 devices.  Android devices provide a restricted shell access through an
-USB connection.  The local host must have Andriod SDK installed.
+USB connection.  The local host must have the Android SDK installed.
 
 Applications such as @code{SSHDroid} that run @command{sshd} process
 on the Android device can accept any @option{ssh}-based methods
 provided these settings are adjusted:
 
-@code{sh} must be specified for remote shell since Android devices do
-not provide @code{/bin/sh}.  @code{sh} will then invoke whatever shell is
-installed on the device with this setting:
+@command{sh} must be specified for remote shell since Android devices
+do not provide @command{/bin/sh}.  @command{sh} will then invoke
+whatever shell is installed on the device with this setting:
 
 @lisp
 (add-to-list 'tramp-connection-properties
@@ -1918,8 +1927,8 @@ directory for temporary files:
 
 @noindent
 Open a remote connection with the command @kbd{C-x C-f
-@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening on port
-@samp{2222}.
+@trampfn{ssh,192.168.0.26#2222,}}, where @command{sshd} is listening
+on port @samp{2222}.
 
 To add a corresponding entry to the @file{~/.ssh/config} file
 (recommended), use this:
@@ -1951,8 +1960,8 @@ Open a remote connection with a more concise command @kbd{C-x C-f
 @cindex backup
 @vindex backup-directory-alist
 
-To avoid @value{tramp} from saving backup files owned by root to
-locations accessible to others, default backup settings in
+To avoid @value{tramp} from saving backup files owned by @samp{root}
+to locations accessible to others, default backup settings in
 @code{backup-directory-alist} have to be altered.
 
 Here's a scenario where files could be inadvertently exposed.  Emacs
@@ -1960,14 +1969,14 @@ by default writes backup files to the same directory as the original
 files unless changed to another location, such as
 @file{~/.emacs.d/backups/}.  Such a directory will also be used by
 default by @value{tramp} when using, say, a restricted file
-@file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup
-file of the secretfile is now owned by the user logged in from tramp
-and not root.
+@file{@trampfn{su,root@@localhost,/etc/secretfile}}.  The backup file
+of the secretfile is now owned by the user logged in from
+@value{tramp} and not @samp{root}.
 
 When @code{backup-directory-alist} is @code{nil} (the default), such
 problems do not occur.
 
-To ``turns off'' the backup feature for @value{tramp} files and stop
+To ``turn off'' the backup feature for @value{tramp} files and stop
 @value{tramp} from saving to the backup directory, use this:
 
 @lisp
@@ -1976,7 +1985,7 @@ To ``turns off'' the backup feature for @value{tramp} files and stop
 @end lisp
 
 @noindent
-Disabling backups can be targetted to just @option{su} and
+Disabling backups can be targeted to just the @option{su} and
 @option{sudo} methods:
 
 @lisp
@@ -2012,7 +2021,12 @@ Example:
 @noindent
 The backup file name of
 @file{@trampfn{su,root@@localhost,/etc/secretfile}} would be
-@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}.
+@ifset unified
+@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/!su:root@@localhost:!etc!secretfile~}}
+@end ifset
+@ifset separate
+@file{@trampfn{su,root@@localhost,~/.emacs.d/backups/![su!root@@localhost]!etc!secretfile~}}
+@end ifset
 
 Just as for backup files, similar issues of file naming affect
 auto-saving @value{tramp} files.  Auto-saved files are saved in the
@@ -2039,7 +2053,7 @@ This section is incomplete.  Please share your solutions.
 
 Cygwin's @command{ssh} works only with a Cygwin version of Emacs.  To
 check for compatibility: type @kbd{M-x eshell}, and start @kbd{ssh
-test.host}.  Incompatbilities trigger this message:
+test.host}.  Incompatibilities trigger this message:
 
 @example
 Pseudo-terminal will not be allocated because stdin is not a terminal.
@@ -2091,7 +2105,7 @@ syntax.
 
 Unlike opening local files in Emacs, which are instantaneous, opening
 remote files in @value{tramp} is slower at first.  Sometimes there is
-a noticable delay before the prompts for passwords or authentication
+a noticeable delay before the prompts for passwords or authentication
 appear in the minibuffer.  Hitting @kbd{@key{RET}} or other keys
 during this gap will be processed by Emacs.  This type-ahead facility
 is a feature of Emacs that may cause missed prompts when using
@@ -2111,9 +2125,9 @@ is a feature of Emacs that may cause missed prompts when using
 @cindex file name syntax
 @cindex file name examples
 
-@file{@trampf{host,localfilename}}
-opens file @var{localfilename} on the remote host @var{host}, using
-the default method.  @xref{Default Method}.
+@file{@trampf{host,localfilename}} opens file @var{localfilename} on
+the remote host @var{host}, using the default method.  @xref{Default
+Method}.
 
 @table @file
 @item @value{prefix}melancholia@value{postfix}.emacs
@@ -2140,8 +2154,10 @@ For the file @file{/etc/squid.conf} on the host @code{melancholia}.
 @var{host} can take IPv4 or IPv6 address, as in
 @file{@trampf{127.0.0.1,.emacs}} or
 @file{@trampf{@value{ipv6prefix}::1@value{ipv6postfix},.emacs}}.
+@ifset unified
 For syntactical reasons, IPv6 addresses must be embedded in square
 brackets @file{@value{ipv6prefix}} and @file{@value{ipv6postfix}}.
+@end ifset
 
 By default, @value{tramp} will use the current local user name as the
 remote user name for log in to the remote host.  Specifying a different
@@ -2151,16 +2167,15 @@ name using the proper syntax will override this default behavior:
 @trampf{user@@host,path/to.file}
 @end example
 
-@file{@trampf{daniel@@melancholia,.emacs}} is for file
-@file{.emacs} in @code{daniel}'s home directory on the host,
-@code{melancholia}.
+@file{@trampf{daniel@@melancholia,.emacs}} is for file @file{.emacs}
+in @code{daniel}'s home directory on the host, @code{melancholia}.
 
 Specify other file access methods (@pxref{Inline methods},
 @pxref{External methods}) as part of the file name.
 
 Method name comes before user name, as in
 @file{@value{prefix}@var{method}@value{postfixhop}} (Note the trailing
-colon).  The syntax specificaton for user, host, and file do not
+colon).  The syntax specifications for user, host, and file do not
 change.
 
 To connect to the host @code{melancholia} as @code{daniel}, using
@@ -2230,8 +2245,8 @@ persistently (@pxref{Connection caching}) will be included in the
 completion lists.
 
 After remote host name completion comes completion of file names on
-the remote host.  It works the same as on loal host file completion
-except when killing with double-slash @file{//} kills only the file
+the remote host.  It works the same as with local host file completion
+except that killing with double-slash @file{//} kills only the file
 name part of the @value{tramp} file name syntax.  A triple-slash
 stands for the default behavior.
 @ifinfo
@@ -2328,12 +2343,9 @@ host when the variable @code{default-directory} is remote:
                       "/bin/sh" "-c" "grep -e tramp *"))
 @end lisp
 
-
-@ifset emacsgvfs
 Remote processes do not apply to GVFS (see @ref{GVFS based methods})
 because the remote file system is mounted on the local host and
 @value{tramp} just accesses by changing the @code{default-directory}.
-@end ifset
 
 @value{tramp} starts a remote process when a command is executed in a
 remote file or directory buffer.  As of now, these packages have been
@@ -2514,8 +2526,8 @@ with a remote file name:
 @end example
 
 Relative file names are based on the remote default directory.  When
-@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}},
-valid calls include:
+@file{myprog.pl} exists in @file{@trampfn{ssh,host,/home/user}}, valid
+calls include:
 
 @example
 @kbd{M-x perldb @key{RET}}
@@ -2571,9 +2583,8 @@ the internal representation of a remote connection.  When called
 interactively, this command lists active remote connections in the
 minibuffer.  Each connection is of the format
 @file{@trampfn{method,user@@host,}}.  Flushing remote connections also
-cleans the password
-cache (@pxref{Password handling}), file cache, connection cache
-(@pxref{Connection caching}), and connection buffers.
+cleans the password cache (@pxref{Password handling}), file cache,
+connection cache (@pxref{Connection caching}), and connection buffers.
 @end deffn
 
 @deffn Command tramp-cleanup-this-connection
@@ -2830,7 +2841,7 @@ open.  That is why @value{tramp} prompts for the password again even
 if there is an @command{ssh} already open.
 
 Some @command{ssh} versions support a @code{ControlPersist} option,
-which allows to set the @code{ControlPath} provided the variable
+which allows you to set the @code{ControlPath} provided the variable
 @code{tramp-ssh-controlmaster-options} is customized as follows:
 
 @lisp
@@ -2862,9 +2873,9 @@ To test if this is the case, open a remote shell and check if the output
 of @command{ls} is in color.
 
 To disable @acronym{ANSI} escape sequences from the remote hosts,
-disable @option{--color=yes} or @option{--color=auto} in the remote
-host's @file{.bashrc} or @file{.profile}.  Turn this alias on and off
-to see if file name completion works.
+disable @samp{--color=yes} or @samp{--color=auto} in the remote host's
+@file{.bashrc} or @file{.profile}.  Turn this alias on and off to see
+if file name completion works.
 
 @item
 File name completion does not work in directories with large number of
@@ -2877,7 +2888,7 @@ shell's limit on length of command lines and hang.  @value{tramp} uses
 globbing.
 
 To test if globbing hangs, open a shell on the remote host and then
-run @samp{ls -d * ..?* > /dev/null}.
+run @command{ls -d * ..?* > /dev/null}.
 
 When testing, ensure the remote shell is the same shell
 (@command{/bin/sh}, @command{ksh} or @command{bash}), that
@@ -2912,70 +2923,13 @@ the following code in @file{~/.emacs} file.
 
 
 @item
-How to get a Visual Warning when working with @samp{root} privileges
-
-Get a modeline indication when working with @samp{root} privileges
-with the following code (tested with Emacs 22.1) in @file{~/.emacs}
-file:
-
-@lisp
-(defun my-mode-line-function ()
-  (when (string-match "^/su\\(do\\)?:" default-directory)
-    (setq mode-line-format
-          (format-mode-line mode-line-format 'font-lock-warning-face))))
-
-(add-hook 'find-file-hook 'my-mode-line-function)
-(add-hook 'dired-mode-hook 'my-mode-line-function)
-@end lisp
-
-
-@item
-How to get host indication in the mode line?
+How to get a Visual Warning when working with @samp{root} privileges?
+Host indication in the mode line?
 
-The following code (tested with Emacs 22.1) in @file{~/.emacs} file
-shows it:
-
-@lisp
-(defconst my-mode-line-buffer-identification
-  (list
-   '(:eval
-     (let ((host-name
-            (if (file-remote-p default-directory)
-                (tramp-file-name-host
-                 (tramp-dissect-file-name default-directory))
-              (system-name))))
-       (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
-           (substring host-name 0 (match-beginning 1))
-         host-name)))
-   ": %12b"))
-
-(setq-default
- mode-line-buffer-identification
- my-mode-line-buffer-identification)
-
-(add-hook
- 'dired-mode-hook
- (lambda ()
-   (setq
-    mode-line-buffer-identification
-    my-mode-line-buffer-identification)))
-@end lisp
-
-The mode line in Emacs 23.1 and later versions now contains an
-indication if @code{default-directory} for the current buffer is on a
-remote host.  Moreover, the corresponding tool-tip shows the remote
-host name.  The above @code{:eval} clause can also be simplified to
-show the host name in the mode line:
-
-@lisp
-   '(:eval
-     (let ((host-name
-            (or (file-remote-p default-directory 'host)
-                (system-name))))
-       (if (string-match "^[^0-9][^.]*\\(\\..*\\)" host-name)
-           (substring host-name 0 (match-beginning 1))
-         host-name)))
-@end lisp
+Install @file{tramp-theme} from GNU ELPA via Emacs' Package Manager.
+Enable it via @kbd{M-x load-theme @key{RET} tramp}.  Further
+customization is explained in variable
+@code{tramp-theme-face-remapping-alist}.
 
 
 @item
@@ -3187,6 +3141,8 @@ Since @file{filecache} remembers visited places, add the remote
 directory to the cache:
 
 @lisp
+@c `with-eval-after-load' has been introduced with Emacs 24.4.  Shall
+@c be used when appropriate.
 (eval-after-load "filecache"
   '(file-cache-add-directory
     "@trampfn{ssh,news@@news.my.domain,/opt/news/etc/}"))