cu(C) 19 June 1992 cu(C) Name cu - call another UNIX/XENIX system Syntax cu [-s speed] [-l line] [-h] [-t] [-xn] [-o | -e | -oe] [-n] telno cu [-s speed] [-h] [-xn] [-o | -e | -oe] -l line [dir] cu [-h] [-xn] [-o | -e | -oe] systemname Description The cu command calls up another UNIX system, a terminal, or possibly a non-UNIX system. It manages an interactive conversation with possible transfers of ASCII files. The cu command accepts the following options and arguments: -sspeed Specifies the transmission speed (150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400). The default value is "Any" speed which will depend on the order of the lines in the /usr/lib/uucp/Devices file. A speed range can also be specified (for example, -s1200-4800). -lline Specifies a device name to use as the communication line. This can be used to override the search that would otherwise take place for the first available line having the right speed. When the -l option is used without the -s option, the speed of a line is taken from the Devices file. When the -l and -s options are both used together, cu will search the De- vices file to check if the requested speed for the requested line is available. If so, the connection will be made at the requested speed; otherwise, an error message will be printed and the call will not be made. The specified device is gen- erally a directly connected asynchronous line (for example, /dev/ttyab) in which case a telephone number (telno) is not required. The specified device need not be in the /dev directory. If the specified device is associated with an auto dialer, a telephone number must be provided. Use of this option with systemname rather than telno will not give the desired result (see systemname below). -h Emulates local echo, supporting calls to other computer sys- tems which expect terminals to be set to half-duplex mode. -t Used to dial an ASCII terminal which has been set to auto answer. Appropriate mapping of carriage-return to carriage- return-line-feed pairs is set. -xn Causes diagnostic traces to be printed; it produces a detailed output of the program execution on stderr. The debugging level, n, is a single digit in the range 0 to 9; -x9 is the most useful value. -n For added security, -n will prompt the user to provide the telephone number to be dialed rather than taking it from the command line. telno When using an automatic dialer, the argument is the telephone number with equal signs for secondary dial tone or minus signs placed appropriately for delays of 4 seconds. systemname A UUCP system name may be used rather than a telephone num- ber. In this case, cu will obtain an appropriate direct line or telephone number from /usr/lib/uucp/Systems. Note: the systemname option should not be used in conjunction with the -l and -s options as cu will connect to the first available line for the system name specified, ignoring the requested line and speed. dir The keyword dir can be used with cu -lline, in order to talk directly to a modem on that line, instead of talking to another system via that modem. This can be useful when debug- ging or checking modem operation. Note: only users with write access to the Devices file are permitted to use cu -lline dir. In addition, cu uses the following options to determine communications settings: -o If the remote system expects or sends 7-bits with odd parity. -e If the remote system expects or sends 7-bits with even parity. -oe If the remote system expects or sends 7-bits, ignoring parity and sends 7-bits with either parity. By default, cu expects and sends 8-bit characters without parity. If the login prompt received appears to contain incorrect 8-bit characters, or a correct login is rejected, use the 7-bit options described above. After making the connection, cu runs as two processes: the transmit pro- cess and the receive process. The transmit process reads data from stan- dard input and, except for lines beginning with ``~'', passes the data to the remote system. The receive process accepts data from the remote sys- tem and, except for lines beginning with ``~'', passes the data to stan- dard output. Normally, an automatic XON/XOFF protocol is used to control input from the remote system so the buffer is not overrun. Lines beginning with ``~'' have special meanings. The transmit process interprets the following user-initiated commands: ~. terminate the conversation. ~! escape to an interactive shell on the local system. ~!cmd ... run cmd on the local system (via sh -c). ~$cmd ... run cmd locally and send its output to the remote system. ~+cmd ... run cmd on the local system but take standard input from the remote system. ~%cd change the directory on the local system. Note: ~!cd will cause the command to be run by a sub-shell, probably not what was intended. ~%take from [ to ] copy file from (on the remote system) to file to on the local system. If to is omitted, the from argu- ment is used in both places. ~%put from [ to ] copy file from (on the local system) to file to on the remote system. If to is omitted, the from argu- ment is used in both places. For both ~%take and ~%put commands, as each block of the file is transferred, consecutive single digits are printed to the terminal. ~~line send the line ~line to the remote system. ~%break transmit a BREAK to the remote system (which can also be specified as ~%b). ~%debug toggles the -x debugging level between 0 and 9 (which can also be specified as ~%d). ~t prints the values of the termio structure variables for the user's terminal (useful for debugging). ~l prints the values of the termio structure variables for the remote communication line (useful for debug- ging). ~%nostop toggles between XON/XOFF input control protocol and no input control. This is useful in case the remote system is one which does not respond properly to the XON and XOFF characters. The use of ~%put requires stty(C) and cat(C) on the remote side. It also requires that the current erase and kill characters on the remote system be identical to these current control characters on the local system. Backslashes are inserted at appropriate places. The use of ~%take requires the existence of echo(C) and cat(C) on the remote system. Also, tabs mode (see stty(C)) should be set on the remote system if tabs are to be copied without expansion to spaces. The receive process normally copies data from the remote system to its standard output. It may also direct output to local files. You can construct take and put commands that work between UNIX and non- UNIX systems by sending the appropriate characters to cu. To do this, you will need to know the equivalent of echo(C) and cat(C) on the non- UNIX system. For example, to transfer a file named fred from a remote non-UNIX system to the file /tmp/fred on the local UNIX system, construct a command similar to the following: ~% echo '~>':/tmp/fred cat fred echo '~>' This creates a file /tmp/fred on the local UNIX system, putting the char- acters ``~>'' into it, which tells cu to start receiving data into this file. The file fred is then sent to standard output on the remote ma- chine, and cu therefore receives it. Finally, a ``~>'' is echoed into the file; this is a signal to cu to stop receiving input. (Remember to replace echo and cat with the equivalent commands for the non-UNIX sys- tem.) You can also append the file from the remote machine to an existing file on the local system: ~% echo '~>>':/tmp/fred cat fred echo '~>' This appends the remote file onto the end of the existing file /tmp/fred. When cu is used on system1 to connect to system2 and subsequently used on system2 to connect to system3, commands on system2 can be executed by using ``~~''. Executing a tilde command reminds the user of the local system uname. For example, uname can be executed on systems 1, 2, and 3 as follows: uname system3 ~!uname system1 ~~!uname system2 In general, ``~'' causes the command to be executed on the original ma- chine, and ``~~'' causes the command to be executed on the next machine in the chain. Examples To dial a system whose telephone number is 9 201 555 1212 using 1200 baud (where dialtone is expected after the 9): cu -s1200 9=12015551212 If the speed is not specified, ``Any'' is the default value. To login to a system connected by a direct line: cu -l /dev/ttyXX or cu -l ttyXX To dial a system with the specific line and a specific speed: cu -s1200 -l ttyXX To dial a system using a specific line associated with an auto dialer: cu -l ttyXX 9=12015551212 To call up a system named huey: cu huey To talk directly to an ACU (connect directly with the modem and enter modem commands manually): cu -lttyXX dir Files /usr/lib/uucp/Systems /usr/lib/uucp/Devices /usr/lib/uucp/LCK..(tty-device) See also cat(C), ct(C), echo(C), stty(C), uucp(C), uname(C) Diagnostics Exit code is zero for normal exit, otherwise, one. Warnings The cu command does not do any integrity checking on data it transfers. Data fields with special cu characters may not be transmitted properly. Depending on the interconnection hardware, it may be necessary to use a ``~.'' to terminate the conversion even if stty0 has been used. Non- printing characters are not dependably transmitted using either the ~%put or ~%take commands. cu between an IMBR1 and a penril modem will not return a login prompt immediately upon connection. A carriage return will return the prompt. Note There is an artificial slowing of transmission by cu during the ~%put operation so that loss of data is unlikely. Standards conformance cu is conformant with: AT&T SVID Issue 2; and X/Open Portability Guide, Issue 3, 1989.