]> git.cworth.org Git - notmuch-wiki/blob - remoteusage.mdwn
Changed the script to pause after every message. More consistent.
[notmuch-wiki] / remoteusage.mdwn
1 [[!img notmuch-logo.png alt="Notmuch logo" class="left"]]
2 #Using notmuch remotely#
3
4 ##Why?##
5 It is hard to keep nomuch tags in sync across multiple instances of
6 notmuch, on multiple computers. Though you can do this with "notmuch
7 dump" and "notmuch restore", it is often preferable to be able to use
8 notmuch on a remote computer as if it were present on a local
9 computer.
10
11 The following guidelines show how I have accomplished this. It isn't
12 perfect, but it works pretty well, and allows me to access notmuch on
13 my home computer, using only an emacs client on my netbook or work
14 computer, a trivial shell script, a few settings in my .emacs, and
15 ssh.
16
17 Note that this is all something of a hack, and future versions of
18 notmuch will likely make all of these steps much more
19 transparent. I'll note particularly which things should become
20 unneccessary with future version. At the moment though, this does
21 work, and might enable some of you to use notmuch away from your
22 primary computer.
23
24 ##What you will need##
25 You will need to have the following items in place:
26
27 1.  a working notmuch on one computer (let's call that computer
28 "server"). The notmuch should be at least version 0.2.
29 2.  a working notmuch emacs interface on another computer (let's call
30 that computer "client")
31 3.   password-free login (public key authentication) from client to
32 server. [Here](http://sial.org/howto/openssh/publickey-auth/) is a
33 good page on how to set it up.
34 4.   a reasonably fast connection. (This isn't really *neccessary*, but
35 if your connection is too slow, this won't be very pleasant to use,
36 and certainly won't seem transparent.)
37
38 ##Write a simple wrapper shell script##
39 Now we will need to write a simple shell script that replaces the
40 call to the notmuch binary with a call to notmuch over ssh. 
41
42 Note that this shell script also pauses briefly after every message
43 entries. This is currently necessary so that the emacs process-filter
44 doesn't chop off messages. It's an obvious hack, and hopefully won't
45 be necessary in the furture.
46
47     #!/usr/bin/env bash
48     
49     SSH_BIN="/path/to/ssh/on/client"
50     USER="user_name"
51     HOST="server_name"
52     NOTMUCH_REMOTE_BIN="/path/to/notmuch/on/server"
53     
54     if [ $1 = "search" ]; then
55         OUT=`$SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@`
56         echo "$OUT" | while read line; do
57             echo "$line";
58             sleep 0.1;
59         done
60     else
61         $SSH_BIN $USER@$HOST $NOTMUCH_REMOTE_BIN $@
62     fi
63         
64 Save this to a file, "remote-notmuch.sh", in your path.
65
66 Now you can run "remote-notmuch.sh new". You can call the script
67 anything you like. If you don't have a notmuch instance on your client
68 computer, you can even call it "notmuch" and have totally transparent
69 usage. (Since I run "new" from an emacs keybinding, I've never
70 bothered with this renaming.)
71
72 ##Configure your emacs client##
73
74 Add the following to your .emacs (this is on your client machine):
75
76     (setq notmuch-command "/path/to/your/remote-notmuch.sh")
77
78 At least until 0.3 or 0.4, you will also need to add the following. It
79 should become unnecessary pretty soon though:
80
81     (setq notmuch-remote-host "user_name@server_name")
82     
83     (defadvice notmuch-show-get-filename (around
84                                       notmuch-show-get-remote-filename
85                                       activate)
86       (setq ad-return-value (concat "/ssh:"
87                                 notmuch-remote-host
88                                 ":"
89                                 ad-do-it)))
90
91 The purpose of these lines is to allow emacs to have access to the raw
92 files, via TRAMP, so that it can extract attachments and parse
93 HTML. Work is afoot to make notmuch handle these tasks itself, so this
94 part should soon be unecessary.
95
96 ##A tip to speed things up##
97 If you have openssh >= 0.4, you can make use of the "ControlMaster"
98 feature. This allows you to reuse an existing connection. Therefore
99 if you keep a connection open, you won't have to authenticate every
100 time.
101
102 Add the following to your ~/.ssh/config file:
103
104     Host server_name 
105     ControlMaster auto
106     ControlPath ~/.ssh/master-%r@%h:%p
107     
108 You can also se the Host to "*", if you want to use it for all
109 connections. I usually have an interactive ssh connection to my home
110 computer open, so I don't need to do anything more. But if not, you
111 can always run:
112
113     ssh -Nf server_name
114
115 which will open up a background connection, which you can then reuse
116 for all of your notmuch commands.
117
118 ##Problems##
119 Some things won't work perfectly, and there might be some unexpected
120 mismatches between normal usage and this sort of usage. If you're
121 using this approach and run into any problems, please feel free to
122 list them here. And, of course, if you improve on any of these
123 approaches, please do edit this page and let people know!
124                                 
125                                 
126
127  
128
129
130     
131
132         
133
134
135