Newsgroups: comp.sys.apollo From: fridman@cpsc.ucalgary.ca (fridman) Subject: BSD lpd works:) (long) Message-ID: Organization: UofC cpsc Date: 20 Mar 91 16:54:41 This is a followup to a series of posting I made asking for help in getting BSD printing to run. It is a summary of what I did to get BSD printing running. At the end is a list of people who replied to my origional postings and offered additional help. MY CONFIGURATION ================ DN4500s, SR10.3, Domain Ring running dds + TCP/IP, named, Berkeley printing only with Adobe TranScript filters, ALL NODES RUN LPD. SETTING UP ========== 1. read the "Managing BSD printing" as an INTRO ONLY 2. make sure llbd is running on printer node. 3. make sure lpd is running (I have lpd running on all nodes) and registered with llbd: % /etc/ncs/lb_admin lb_admin: lookup ... object = * type = * interface = bsd4.3_lpd "BSD4.3 lpd" @ dds://grumpy[1551] The above should appear somewhere in the listing. 4. Make sure all of the files mentioned here are readable by daemon. HOSTNAMES ========= For one node to print a file on another, it needs to have "rsh" permission. To do this you need to have entries in each of the nodes' /.rhosts files. The print node should also have a file called /etc/hosts.lpd that lists all the nodes that have permission to print on it. If you run an isolated network with simple names like "wimpy" (I assume that the entry in /etc/hosts is the same as the one the node is cataloged under and the same as returned by hostname) then: - create the following files (eg: print host is misty, other nodes are grumpy, lumpy and wimpy) misty's /.rhosts: misty daemon grumpy daemon lumpy daemon wimpy daemon misty's /etc/hosts.lpd: misty grumpy lumpy wimpy grumpy's, lumpy's and wimpy's /.rhosts: (no hosts.lpd) misty daemon If you run the Berkeley name daemon, then you will need to have the "full" (ie: hostname, domain, subnet etc.) name of each node in the above files. The reason you need the "full" name is that during a remote shell request, the destination host checks wheather the source host has access by doing an internet-to-hostname conversion and looking at the entries in /.rhosts. If the apollo named is running, then the /etc/hosts file will not be used in the translation. Instead, the named will be asked, which will return the "full" name. To find out the "real" name, rlogin to machine you are on and do a who: the machine beside your login name is the "real" hostname. eg: although hostname and lcnode return "grumpy", the "full" name of this node is grumpy.dm2.dm.ucalgary.ca (dm2 is a subdomain of dm) which is what should be put in the above files. NOTE: 1. This assumes that daemon has / as the home directory. 2. Make sure /.rhosts is readable by all. THE PRINTCAP FILE AND SPOOL DIRECTORIES ======================================= If you use the default /etc/printcap from apollo make sure the spool directory /usr/spool/lpd/ps, the log file /usr/spool/lpd/ps/LOG and the output filter /usr/lib/ps/psof exist. NOTE: this file is for the printer node only. (I could't find /usr/lib/ps/psof so I got rid of this line) This is what my printcap looks like: ps|ps|postscript|PostScript:\ :lp=/dev/sio1:sd=/usr/spool/lpd/ps:\ :lf=/usr/adm/ps-log:af=/usr/adm/ps.acct:\ :br#9600:rw:fc#0000074:fs#0000300:xc#0:xs#0044000:mx#0:sf:sb:\ :if=/usr/local/transcript/psif:\ :of=/usr/local/transcript/psof:gf=/usr/local/transcript/psgf:\ :nf=/usr/local/transcript/psnf:tf=/usr/local/transcript/pstf:\ :rf=/usr/local/transcript/psrf:vf=/usr/local/transcript/psvf:\ :cf=/usr/local/transcript/pscf:df=/usr/local/transcript/psdf: The important part here is the fc,fs,xc and xs fields. They set the parameters of the serial line: All nodes except the print node should have the rm= field. This is what my looks like: ps|PostScript|generic PostScript printer:\ :lp=:\ :rm=grumpy:\ :rp=ps:\ :sd=/usr/spool/lpd/ps:\ :lf=/usr/spool/lpd/ps/LOG: Do a "man 4 tty" to find out what the bits are in fc,fs,xc and xs. Do a "man pritcap" to find out what the other fields do. I don't use the /usr/spool/lpd/servername file. USING ADOBE TRANSCRIPT ====================== Transcript is a package from Adobe. A program called pscomm controls the function of a PostScript printer. It monitors the printer for errors, flushes out jobs with errors and prints banner pages. A set of filters is also provided to convert text, dvi and other formats to PostScript. This package is recomended because it properly sets up the printer before a job and an end-of-job command is sent after each job. Apollo has a product called domain/TranScript which costs $1209 (CDN), but I ported the one we already had (and worked on the Suns):) POSTSCRIPT PRINTER PROBLEMS =========================== ...So my test pages were comming out fine but any file longer than 1000 bytes would't come out and the error* file in /usr/spool/lpd/ps had a line similar to: %%[ framedevice: offending command ]%%. This error from the printer is an indication that its input buffer overran, which means that flow control is not working. (BTW, this error was flagged by TranScript) Well it seems that software flow control is disabled (man a sio_inquire, line 166) by default and there is no way to set XON/XOFF using apollo's version of stty (but /com/tctl -insync works for those who also have agis). The HACK: add the following to the beggining of pscomm.c: system("/com/tctl -insync); If you have the agis c libs, you can do it with a call: #include #include void sio_$control(stream_id,sio_$input_sync,TRUE,status); (or something close to that) ACKNOWLEDGMENTS =============== John Mandler Sandeep Srinivasan David B Funk Bruce Thompson _END I know its very long winded, but I hope it helps someone (please let me know if it worked for you:)) RF.