lp: SysV/BSD interoperability

Brandon S. Allbery allbery at ncoast.UUCP
Mon Oct 3 03:43:09 AEST 1988


As quoted from <23031 at amdcad.AMD.COM> by hayes at crackle.amd.com (Jim Hayes):
+---------------
| In article <160 at leibniz.UUCP> tpc at leibniz.UUCP (Tom Chmara) writes:
| >We have a number of different workstations around here.  I'm having trouble
| >trying to get the HP workstations (which use the AT&T System V spooling
| >facilities) to be able to use the SUN file server's printer (SUN uses the
| >Berkeley spooling facility).
|
| (description of porting Sun "lpr" to System V omitted)
+---------------

The problem with this is convincing existing applications under System V to
use the Sun spooler.  However, one can instead use the System V spooler to
send print requests to another machine for printing.

I've had a few requests for this, and in fact just set up networked printers
under WIN/3B for a client.  Here's what I mailed to the original requester:

--------
  You'll have to bear with me; I don't know how the BSD spooler works, so I
  can only approximate some things.  I can, however, tell you enough that you
  should be able twork out the rest for the BSD case.
  
  First you need to select the printer ID's; does the BSD spooler use names or
  numbers?  It doesn't really matter; on the System V end define the printer
  names as "hostname_printerid".  Then the despooler becomes:
  
  printer="`basename $0`"		# is "interface/{printername}"
  user="$2"			# login name of person who spooled job
  title="$3"			# optional user-specified banner line
  copies="$4"			# number of copies to print, usually 1
  options="$5"			# random options via "-o", probably unused
  shift; shift; shift; shift; shift
  host="`echo \"$printer\" | sed 's/\([^_][^_]*\)_.*/\1/'`"
  lprid="`echo \"$printer\" | sed 's/[^_][^_]*_//'`"
  
  for file in "$@"; do
  # Note:  "remsh" is from WIN/3B; I don't know if HP uses "remsh" or instead
  # uses "rsh" and doesn't support the restricted shell.
  # The "options" can be used to pass the banner title line, number of copies,
  # and (most important) the print queue to use, in BSD format.
  	remsh "$host" lpr <options> < "$file"
  # UUCP version:
  	uux - "$host"!lpr <options> < "$file"
  # UUCP to a System V system; this is the one I was talking about earlier
  	uux - "$host"!lp -t"$title" -o"$options" -n"$copies" -d"$lprid" < "$file"
  # And I just did this one for a client yesterday!
  	remsh "$host" lp -t"${user}${title:+\": \"}${title}" -o"$options" -n"$copies" -d"$lprid" < "$file"
  # (the fancy footwork in the "-t" option sticks the username in the banner
  # and separates it from the original banner with a colon/space IF there was
  # a title.  See the System V manual under sh(1).)
  #
  # NOTE:  To complete this, create a user "lp" on the Sun, which can do nothing
  # (or very little) except execute "lpr".  If you're not into security, you can
  # let "lp" do anything.  If "lp" is used, choose another name and add a "-l"
  # option to the above "remsh" lines; and give the user a ".rhosts" which allows
  # "lp" to use the login name.  There may be a bit more involved in plugging
  # any security holes; I haven't enough experience with TCP/IP to know all the
  # possible holes.  The restricted "lp" login is probably safest.
  done
  exit 0
  
  You can use, mangle, etc. the above to fit your needs.
--------

You'll note support for WIN/3B and UUCP.  If you have another network which
supports remote command execution, it can easily be adapted to the above
format; ditto for other print spoolers.  It's also a good example of the
flexibility of the "lp" spooler.  (plug, plug ;-)

++Brandon
-- 
Brandon S. Allbery, uunet!marque!ncoast!allbery			DELPHI: ALLBERY
	  For comp.sources.misc send mail to <backbone>!sources-misc
comp.sources.misc is moving off ncoast -- please do NOT send submissions direct
ncoast's days are numbered -- please send mail to ncoast!system if you can help



More information about the Comp.unix.wizards mailing list