chiark / gitweb /
*** empty log message ***
[sympathy.git] / sympathy.1
2 .\" $Id$
4 sympathy \- client/server terminal emulator with logging
6 .B sympathy \-\fBt\fP
7 [
8 .B \fIterminal_options\fP
9 ] [
10 .B \fIdisplay_options\fP
11 ]
12 .br
13 .B sympathy \-\fBs\fP
14 [
15 .B \fIterminal_options\fP
16 ] [
17 .B \fIserver_options\fP
18 ]
19 .br
20 .B sympathy 
21 [
22 .B \-\fBc\fP \-\fBs\fP
23 ] [
24 .B \fIterminal_options\fP
25 ] [
26 .B \fIserver_options\fP
27 ] [
28 .B \fIclient_options\fP
29 ] [
30 .B \fIdisplay_options\fP
31 ]
32 .br
33 .B sympathy \-\fBc\fP
34 [
35 .B \fIclient_options\fP
36 ] [
37 .B \fIdisplay_options\fP
39 .br
40 .B sympathy \-\fBr\fP
41 id
42 [
43 .B \fIclient_options\fP
44 ] [
45 .B \fIdisplay_options\fP
47 .br
48 .B sympathy \-\fBv\fP
49 .br
51 .I Sympathy
52 is a replacement for screen(1), minicom(1) and consolidate(1). It
53 is a VT52/VT100/ANSI terminal emulator with some special features. In normal use
54 .I sympathy
55 would sit between a terminal device (a serial port or a pseudo-tty) and
56 the user's usual terminal emulator (eg xterm(1)). 
57 .I Sympathy
58 renders data from the terminal device into an internal frame buffer
59 and then expresses changes in this frame buffer to the outer terminal
60 emulator using a small subset of ANSI escape codes. 
61 .I Sympathy 
62 always generates valid escape codes to the outer terminal, and will 
63 reset the state of its internal terminal emulator when it detects
64 receive errors on the terminal device.
65 .PP
66 .I Sympathy\fP,
67 unlike screen(1), takes care to preserve the scroll-back features
68 of the outer terminal emulator: lines that scroll of the top of the internal 
69 frame buffer are scrolled off the top of the outer terminal emulator. When
70 sympathy is used in client/server mode, some history is added to the outer 
71 terminal emulator when the client connects.
72 .PP
73 .I Sympathy
74 also supports automatic baud\-rate detection, and advanced logging features.
75 .I Sympathy
76 logs whenever any of the modem control lines change state, receive errors,
77 and the contents
78 of any line on the frame buffer as the cursor moves off it.
80 .B \fImajor mode options\fP:
81 .TP 5
82 .B \-t
83 act as terminal emulator only:
84 .I sympathy
85 opens the terminal device and outputs into the outer terminal emulator. When sympathy exits the 
86 device is closed and no process remains. In this mode sympathy behaves like a traditional
87 terminal emulator such as cu(1) or minicom(1).
88 .TP 5
89 .B \-s
90 act as server only:
91 .I sympathy
92 opens the terminal device and renders into an internal frame buffer, listens for clients
93 on the socket and logs activity. By default the server will fork into a daemon process
94 but can be forced to remain in the foreground with the \-\fBF\fP option.
95 .TP 5
96 .B \-c\fP or \fB\-r\fP \fIid\fP
97 act as client only:
98 .I sympathy
99 connects to a sympathy server process and injects the history into the outer terminal
100 emulator,
101 and connects the user with the terminal device. One server process can support multiple 
102 client processes. This mode can also be used to obtain a dump of the current screen
103 in HTML format (see the \-\fBH\fP option). The \-\fPr\fP option connects to a server
104 on the socket ~/.sympathy/\fIid\fP  or if \fIid\fP is an integer 
105 ~/.sympathy/\fIhost-name\fP.\fIid\fP mimicking the behaviour of screen(1). With the 
106 \-\fBc\fP option the socket must be specified with the \-\fBk\fP option.
107 .TP 5
108 .B \fP[\fB \-c \-s \fP]
109 act as both client and server:
110 .I sympathy
111 forks. The child process becomes a server, and the original process becomes a client
112 which then connects to the server. This is the default major mode if no other is specified. 
113 Since the default terminal device is a pseudo-tty, running 
114 .I sympathy
115 with no arguments will start a new shell in a daemonised process and connect to it
116 as a client from the original process, mimicking the behaviour of screen(1)
117 .TP 5 
118 .B \-l\fP or \fB\-ls
119 show active sockets:
120 .I sympathy 
121 will show active sockets, ones to which a call to connect(2) succeeds, 
122 in ~/.sympathy. If the socket name begins with the host-name of the machine, and
123 the call to connect(2) fails, then socket will be unlinked. 
124 .TP 5 
125 .B \-v
126 show current version:
127 .I sympathy 
128 will print the the version number of the code it was compiled from.
129 .TP 5
130 .B \-h
131 show help:
132 .I sympathy 
133 will show brief usage instructions
134 .PP
135 .B \fIterminal_options\fP:
136 .TP 5
137 .B \-d \fIserialdev\fP
138 connect to terminal device \fIserialdev\fP, eg /dev/ttyS0. 
139 By default 
140 .I sympathy
141 doesn't
142 lock the terminal device, but checks periodically for lock files of other processes. If 
143 sympathy detects another lock file it displays \fBLocked\fP in the status line 
144 and refuses I/O on the device until the lock file is removed or becomes invalid.
145 To lock the device use the \-\fBK\fP option. 
146 .I Sympathy 
147 will in addition check that the name of the device does not occur in /proc/cmdline
148 as an argument to the \fIconsole\fP kernel parameter. 
149 The \-\fBd\fP option is incompatible with the \-\fBp\fP option. 
150 .TP 5
151 .B \-p
152 connect to a pseudo-tty instead of a terminal device, and fork a login shell in
153 it. The \-\fBp\fP option is incompatible with the \-\fBd\fP option. This is the default 
154 terminal device if none is specified.
155 .TP 5
156 .B \-K
157 lock the terminal device specified in the \-\fBd\fP option. 
158 .I Sympathy
159 generates lock files in a staggering variety of formats and places. For locks
160 based on the name of the device sympathy generates lock files for all devices
161 with the same major and minor in /dev, /dev/usb and /dev/tts, it uses both normal
162 and lower case and replaces occurrences of `/' in the device name with both `.' and `_'.
163 .I Sympathy
164 also generates locks based on the device major and minor numbers, and for all lock file
165 names generates them in any of the following directories that are writable:
166 /var/lock/uucp, /var/spool/lock, /var/spool/uucp, /etc/locks, /usr/spool/uucp, 
167 /var/spool/locks, /usr/spool/lock, /usr/spool/locks, /usr/spool/uucp/LCK, /var/lock. 
168 Lock files are assumed to be in HDB format.
169 .TP 5
170 .B \-b \fIbaud-rate\fP
171 set the baud\-rate of the terminal device specified in the \-\fBd\fP to
172 \fIbaud-rate\fP, if omitted the current baud-rate of the serial port will be
173 used.
174 .TP 5
175 .B \-f
176 turn on flow control on the terminal device. This option adds \fICRTSCTS\fP to sympathy's default 
177 \fIc_cflag\fPs of \fICS8|CREAD|CLOCAL\fP.
178 .TP 5
179 .B \-L \fIlogfile\fP
180 log activity to the file \fIlogfile\fP. If \fIlogfile\fP is `-' then log to \fIstdout\fP. Note
181 that logging to \fIstdout\fP only makes sense with the \-\fBF\fP \fIserver_option\fP. 
182 .TP 5
183 .B \-w \fIwidth\fP[x\fIheight\fP]
184 set the initial size of the terminal emulator's frame buffer to be \fIwidth\fP columns
185 by \fIheight\fP rows. If \fIheight\fP is omitted it defaults to 24, the default width
186 is 80. These values may
187 be overridden later by terminal escape sequences. If \-\fBp\fP is also specified
188 the pseudo-tty will have its window size set to match.
189 .PP
190 .B \fIdisplay_options\fP:
191 .TP 5
192 .B \-u
193 attempt to render Unicode characters in the internal frame buffer to the outer terminal 
194 emulator by using ISO-2202 sequences. 
195 .I Sympathy
196 currently only checks to see if an appropriate character appears in the VT102 
197 US character set, or in the VT102 `special characters and line drawing' character set.
198 If the character appears in neither of these then it will be rendered on the outer
199 terminal emulator as a `?'.
200 .TP 5
201 .B \-H
202 render the current state of the internal frame buffer to \fIstdout\fP as HTML, then quit.
203 .PP
204 .B \fIclient_options\fP:
205 .TP 5
206 .B \-k \fIsocket\fP
207 set the name in the file-system of the socket to which
208 .I sympathy
209 should connect. This option is \fBmandatory\fP unless the \-\fBs\fP or \-\fBr\fP options
210 have also been given. If \-\fBs\fP is given then it will default to the socket which
211 the forked server process opens. See the discussion of the \-\fPr\fP option above, for
212 information on how 
213 .I sympathy 
214 chooses a socket name if \-\fBr\fP is specified.
215 .PP
216 .B \fIserver_options\fP:
217 .TP 5
218 .B \-k \fIsocket\fP
219 set the name in the file-system of the socket on which
220 .I sympathy
221 should listen for clients. If this option is omitted 
222 .I sympathy 
223 will create a 
224 socket in ~/.sympathy, creating that directory if necessary, and named
225 \fIhost-name\fP.\fIpid\fP where \fIpid\fP is the process id of the 
226 .I sympathy
227 process that created the socket.
228 .TP 5
229 .B \-F
230 tells the 
231 .I sympathy
232 server process not to become a daemon but to remain the the foreground. This option is
233 incompatible with the \-\fBc\fP \-\fBs\fP major mode.
234 .TP 5
235 .B \-n \fInlines\fP
236 sets the number of lines of history that the server process stores to \fInlines\fP. When 
237 a client connects \fInlines\fP of history are injected into the outer terminal emulator
238 so that they can be seen when scrolling back. By default the server stores 200 lines of
239 history.
241 When 
242 .I sympathy
243 is relaying data to the outer terminal emulator a reverse video status line 
244 will be visible at the bottom of the screen. The status line shows pertinent
245 information. The first item on the line reminds you what the current escape character
246 is, the second indicates the terminal device to which 
247 .I sympathy
248 is connected, and the third shows the current baud-rate. Other messages are:
249 .TP 5
250 .B Flow
251 indicates that that RTS/CTS flow control is in operation on the terminal device.
252 .TP 5
253 .B RTS
254 indicates that the terminal device is asserting the RTS line which indicates that 
255 the local system is ready to accept data from the remote system. If RTS/CTS
256 flow control is in operation then the operating system or hardware may
257 de-assert RTS even if RTS is shown. See the section on SERIAL PORT THEORY for
258 more information.
259 .TP 5
260 .B CTS
261 indicates that the terminal device has detected that the local system's CTS
262 line is being asserted, indicating that the remote system is ready to receive
263 data from the local system. See the section on SERIAL PORT THEORY for
264 more information.
265 .TP 5
266 .B DTR
267 indicates that the terminal device is asserting the DTR line indicating that the local
268 system would like the local DCE to establish a connection to the remote
269 DCE.  See the section on SERIAL PORT THEORY for more information.
270 .TP 5
271 .B DSR
272 indicates that the terminal device has detected that the local system's DSR line is
273 being asserted, indicating that the local DCE is ready. See the section on
274 SERIAL PORT THEORY for more information.
275 .TP 5
276 .B CD
277 indicates that the terminal device has detected that the local system's CD line is
278 being asserted, indicating that the local DCE has a connection to the remote DCE.
279 See the section on SERIAL PORT THEORY for more information.
280 .TP 5
281 .B RI
282 indicates that the terminal device has detected that the local system's RI line is
283 being asserted, indicating that the DCE has detected a ringing signal or incoming 
284 connexion.
285 .TP 5
286 .B n clients
287 shows the number of connected client processes. In the \-\fBt\fP major mode, this will 
288 always be zero.
289 .TP 5
290 .B Locked
291 the terminal device was opened without the \-\fbK\fP flag and another process is
292 currently using it. I/O to the device is currently suspended until the process dies
293 or removes its lock file.
294 .TP 5
295 .B n errs
296 indicates the number of frames received by the terminal device with errors (indicating 
297 the wrong parity, baud\-rate or framing). The count resets if no errors are
298 detected by the device for 10 seconds.
299 .TP 5
300 .B try higher
301 .I Sympathy
302 thinks that you have set the wrong baud\-rate and is unable to determine the correct
303 one as the current baud\-rate is lower than the correct baud\-rate. Use the \fBbaud\fP command
304 to set a higher baud\-rate (eg 115200) and sympathy will try again.
305 .TP 5
306 .B try \fIrate\fBb 
307 .I Sympathy
308 thinks that you have set the wrong baud\-rate and thinks that the correct baud\-rate is
309 \fIrate\fP. Use the \fBbaud\fP command to change the current baud\-rate.
311 Commands are entered by sending the escape character, ascii(7) STX, from the outer terminal 
312 emulator (usually by pressing CTRL\-B), typing the command and pressing return. Whilst the
313 command is entered the status line changes to `:' and rudimentary line editing is available.
314 Whilst the command is entered the cursor \fBdoes not move\fP but remains where the terminal
315 emulator has placed it. Valid commands are:
316 .TP 7
317 .B ansi
318 switch from VT102 behaviour to ANSI behaviour. The most noticeable difference is 
319 the so called `xn' glitch.
320 .TP 7
321 .B noansi
322 switch from ANSI behaviour to VT102 behaviour.
323 .TP 7
324 .B baud \fInnnn\fB
325 set the current baud\-rate to nnnn
326 .TP 7
327 .B break
328 send the break signal by asserting the TX line for longer than a frame period.
329 .TP 7
330 .B flow
331 enable RTS/CTS flow control
332 .TP 7
333 .B noflow
334 disable RTS/CTS flow control
335 .TP 7
336 .B hangup
337 de-assert DTR for one second.
338 .TP 7
339 .B width \fInn\fB
340 set the current width of the screen to \fInn\fP, and reset the terminal emulator.
341 .TP 7
342 .B height \fInn\fB
343 set the current height of the screen to \fInn\fP, and reset the terminal emulator.
344 .TP 7
345 .B reset
346 reset the terminal emulator
347 .TP 7
348 .B expand
349 expand the size of the screen to fit the size of the current outer terminal emulator window
350 .TP 7
351 .B quit
352 exit this instance of sympathy (disconnect from the server if present)
354 For characters between 32 and 126 
355 .I sympathy
356 interprets them as would a VT102 terminal by following the subset of ISO-2202 that 
357 the VT102 supports. Characters 128 thru 255 are assumed to be in UTF\-8(7), if
358 however the UTF\-8 is invalid they will instead be interpreted as characters
359 from ISO_8859-1(7). Character 155 (0x9b) when not part of a valid UTF\-8 sequence
360 will be interpreted as the one byte CSI character.
361 .PP
362 For the outer terminal emulator sympathy by default issues the 
363 ESC % G sequence to select UTF\-8 mode and emits valid UTF-8. If the outer terminal
364 does not, however, support UTF\-8 use the \-\fBu\fP switch to force 
365 .I sympathy 
366 to use the VT102 subset of ISO-2202.
368 Log files are made exclusively in the UTF\-8 encoding. Each line in the log file
369 starts with the date and time at which the entry was made \- for example:
370 .IP
371 Feb 27 23:24:42.509440
372 .PP
373 .I Sympathy
374 logs a line to the file whenever the cursor leaves the line. Additionally sympathy
375 logs certain other events to the file. When the baud\-rate is changed 
376 .I sympathy
377 writes  <baud changed to 19200>. Whenever a modem control line changes state 
378 .I sympathy
379 appends <Modem lines changed: \fI+/\-line\fP ...> to the log. Where \fI+\fP
380 indicates that \fIline\fP was asserted and \fI-\fP indicates that it was de-asserted.
381 .I Sympathy 
382 writes a message of the form <size now nnnxnnn> whenever the screen size is
383 changed, either by escape sequences, or via a user command.
384 When the terminal device reports receive errors 
385 .I sympathy 
386 adds additional information to the log. It reports the character sequence reporting the error
387 .IP
388 <tty reports error: \\377 \\000 \\000>
389 .PP
390 the observed frequencies of the different bit periods
391 .IP 
392 <tty_bit_analyse: 0000000001  [0,0,0,0,0,0,110,0,0,80]>
393 .PP
394 and the conclusions of the baud\-rate guessing algorithm
395 .IP
396 <tty_analyse:     80 errors, current rate 115200b, suggest 19200b>
397 .PP
398 Invalid UTF\-8 sequences are also reported 
399 .IP
400 <invalid utf\-8 sequence: \\301>
402 .I sympathy 
403 uses the \fBHOME\fP environment variable to determine the default
404 location for sockets.
405 .br
406 .I sympathy 
407 sets the value of \fBTERM\fP in pseudo-ttys spawned using the
408 \-\fBp\fP argument to `xterm'
410 .I Sympathy
411 completely emulates a VT102 terminal (including the VT52 emulation). 
412 .I Sympathy 
413 also emulates a few extra sequences: the xterm(1) ESC ] ... sequences, and 
414 the ANSI CSI @ and CSI b sequences. The numeric keypad follows exactly the
415 sequences produced by an xterm rather than the exact VT102/VT220 sequences.
416 .I Sympathy
417 also recognises the ESC % G and the ESC % @ sequences to switch between ISO-2202
418 and UTF\-8 but ignores them (see CHARACTER ENCODING below)
420 A serial connexion was originally envisaged to connect a DTE (Data Terminal Equipment)
421 to a DCE (Data Circuit-terminating Equipment). The DCE (some sort of modem) would assert
422 the DTE's (the computer or terminal) DSR line to indicate it was ready. The DTE would
423 assert DTR to indicate to the DCE that it should attempt a connexion to the remote DCE.
424 Once a connexion was established the DCE would assert the DTE's CD pin. Data could then 
425 flow between the DTR and the remote DTE via the two DCEs. Flow control was provided
426 via the RTS and CTS lines. The DTE asserts RTS when it is capable of receiving new data,
427 and pauses its transmission of data when the CTS line is de-asserted. The local DCE
428 asserts CTS when the remote DCE detects RTS, and vice versa.
429 .PP
430 In modern usage the signals are slightly different, for a typical connexion using modems
431 DSR indicates that the modem is ready, a drop DTR is used to indicate to the
432 modem that it should break the connexion to the remote modem.  CD indicates that
433 the local modem is connected to the remote modem, and CTS and RTS behave as before. Connexion
434 is established by in-band signalling before CD is asserted.
435 .PP
436 For a \fBnull modem\fP cable local DSR and DTR are wired to remote CD, local
437 CTS to remote RTS, and local RTS to remote CTS. Thus asserting local DTR
438 asserts local DSR and remote CD, and asserting local RTS asserts remote CTS.
439 .PP
440 When RTS/CTS flow control is in operation and the receive buffer becomes full,
441 the operating system, or the hardware, de-asserts RTS, causing (via the DCEs or
442 the null modem cable) a de-assertion of remote CTS which in turn causes the
443 remote DTE to cease transmission.
445 .PP 
446 using sympathy to mimic screen(1):
447 .IP
448 [foo@barhost ~]$ sympathy
449 .IP
450 .I Sympathy 
451 forks. The child becomes a daemon server and launches a new shell in a
452 pseudo-tty, the original process becomes a client and connects to the server
453 and shows the output. The user then uses the new shell and after some time
454 either hangs up on the client or issues CTRL\-B quit, and the client detaches from 
455 the server.
456 .IP
457 Later the user wishes to retrieve her session and to determine which sympathy
458 sessions are active and issues:
459 .IP
460 [foo@barhost ~]$ sympathy \-ls
461 .br
462         barhost.2456        (Active)
463 .br
464 [root@barhost ~]$ 
465 .IP
466 The user then issues:
467 .IP
468 [foo@barhost ~]$ sympathy \-r 2456
469 .IP
470 and is reconnected to her session.
471 .PP
472 using sympathy to mimic minicom(1):
473 .IP
474 .IP
475 [foo@barhost ~]$ sympathy \-t \-d /dev/modem \-b 9600 \-K
476 .IP
477 .I Sympathy
478 opens the device /dev/modem and locks it, sets the baud\-rate to 9600 baud and disables
479 flow control. A VT102 terminal emulator then displays the data from the modem. The user
480 quits the emulator by issuing CTRL\-B quit, which unlocks the modem and exits sympathy.
481 .PP
482 using sympathy to mimic consolidate(1):
483 .IP
484 .IP
485 [foo@barhost ~]$ sympathy \-s \-d /dev/ttyS13 \-b 19200 \-K \-k /root/sympathy/13 \-L /root/sympathy/13.log
486 .IP
487 .I Sympathy
488 becomes a daemon and detaches from the current tty. It then opens the device
489 /dev/ttyS13 and locks it, sets the baud\-rate to 19200 baud and disables flow
490 control. 
491 .I Sympathy
492 then listens for clients connecting on the socket \fI/root/sympathy/13\fP, whilst logging 
493 completed lines and changes in status to the file \fI/root/sympathy/13.log\fP.
494 .IP
495 A user wishing to see the current status of /dev/ttyS13 issues:
496 .IP
497 [foo@barhost ~]$ sympathy \-c \-k /root/sympathy/13 
498 .IP
499 and the last 200 lines of history are injected into the history of her outer
500 terminal emulator and she is connected to /dev/ttyS13. The user disconnects from the
501 server by issuing CTRL\-B quit.
503 screen(1) minicom(1) consolidate(1)
505 ANSI X3.64, ISO-6429, ECMA-48, ISO-2202, ISO-8859, ISO-10646, Digital Equipment Corp. VT102.
506 .SH BUGS
507 .PD
508 .IP \(bu 3
509 The command editor and parser should support better line editing.
510 .IP \(bu 3
511 It should be possible to change the escape character.
512 .IP \(bu 3
513 When the \-\fBc\fP \-\fBs\fP major mode is used without the \-\fBk\fP option the pid
514 used in the socket is that of the client process and therefore not unique.
515 .IP \(bu 3
516 The HTML generated with the \-\fBH\fP option is ugly.
517 .IP \(bu 3
518 No useful error message is generated if opening the terminal device fails in  the
519 \-\fBc\fP \-\fBs\fP major mode.
520 .IP \(bu 3
521 No facility is made for rotation of the log files.
523 James McKenzie,