> From [EMAIL PROTECTED] Fri Jan 11 07:14:01 2002
> Date: Wed, 09 Jan 2002 09:58:17 -0700 (MST)
> From: David Bear <[EMAIL PROTECTED]>
> Subject: LPRng: another stupid question
> To: [EMAIL PROTECTED]
>
>
> After going through the lprng how-to I'm still a little (no a lot)
> uncertain about if ifhp is using by the client, or the server. Most of my
> print jobs originate from windows clients -- so they are already in a
> print dependant language. In this case ifhp is completely extraneous,
> right?
If you want to have bombproof printing with ANY
combination of jobs, then you should use IFHP, which goes through
convulsive efforts to reset the printer and Do The Right Thing.
If you trust the Windows systems to do the right conversions,
stick in the right 'reset printer' commands, do not use IFHP.
>
> If so, then what about accounting. Is ifhp need to get page counts?
Yes/No/Maybe.
You can get them other ways... use SNMP... sigh..
>
> Finally, I know the lpd server can 'deliver' the print job direct to
> appsocket -- but then it appears that ifhp can do that as well. If so,
> and ifhp is used by the client, is a server needed at all?
The reason that ifhp has a 'direct connect' feature is that I use it
for other purposes as well as a print filter... For example, you can
throw a special 'get the printer status' job at a printer and it will
tell you all of the printer informaton:
^[%-12345X@PJL
@PJL INFO VARIABLES
@PJL ENTER LANGUAGE = POSTSCRIPT
^D
.... magic PostScript job to get values from systemdict
^[%-12345X@PJL
Now you can set up a nice database. Of course, if the printer
has SNMP, you can also get the values from the SNMP mib... but
most sites firewall off UDP...
>
> I guess the swiss army knife approach of ifhp is just causing me to think
> too much... but what I would like to see is a more modular approach --
> where 'delivery' to the print is handled my a well defined 'interface?'...
> So that you can the 'plug in' additional 'delivery' methods -- /dev/lp0,
> appsocket, serial, ipp are the obvious ones today. I guess in my attempt
> to oversimplify I picture the following:
Next release has this:
Version LPRng-4.0.0 - UNRELEASED
Major Addition:
lp=
(lpd|socket|filter|device|ipp|...)://(*|host)[(%|:)port/host[?originate_port=portlist]
You can now specify devices using URL format.
Note: the colon (:) in the URL must be escaped as shown below
when this is used in a printcap or it acts as an option separator.
In the discussion below, while options are indicated as restricted
to the particular format shown, they can actually be ANY option
that can be put in the printcap. These options are read and processed
AFTER the printcap options, if any, and are made part of the printcap
options. The option string is treated like a full URL escaped
string, so if you need to use % (=%25), & (=%26), or + (=%2b) in the option,
you need to substitute the indicated characters. To make life simple,
you do not need to escape spaces... I think I can handle that. But '+'
will be treated like a space.
NOTE: since in the printcap, : is a separator, you must actually
specify lpd\://... in the printcap file.
lpd://(*|host)[(%|:)port/host[?originate_port=portlist]
Examples:
lpd://10.0.0.1/lp = [EMAIL PROTECTED]
lpd://*/lp = rm=:rp=lp - use default server
lpd://10.0.0.1:2000/lp = [EMAIL PROTECTED]:lpd_port=2000
lpd://host/%P = lp=%P@host
>
> 1) send raw file to ifhp for formatting to correct printer langauge
> 2) ifhp sends to lp (rfc1179) for spooling
> 3) lpd sends spool jobs to a 'delivery' module which encapsulate all the
> semantics of whatever delivery mechanism is used and returns whatever is
> 'possibly' from the delivery language, ie handles control flow, return
> codes form printers include pages printed, and any other printer status.
> Would be great if it could grab info like jetadmin gives such as which
> trays are empty, amount of toner, etc.
>
> Have I totally missed the boat?
You are talking about an 'early binding' model. In this model of printing
the 'submitter' does the conversion work. You can do this in LPRng using the
'lpr_bounce' (ugh... I may change this to 'lpr_conversion'):
lp:client
:lpr_bounce
:filter=.../ifhp
:lp=queue@spooler
:force_localhost@
queue:server
:sd=/var/spool/lpd/%P
:filter=.../ifhp
:lp=ipp://.... OR :lp=device:/dev/lp0 OR ....
This causes the lpr utility to filter the job and then send the job
to queue@spooler for spooling. The lpd server processes jobs in
'queue', sending them to the destination. Note that you can arrange the
filtering so that if the job has been processed by LPR,
it will not get reprocessed by lpd.
ON THE OTHER HAND
You may want to do the conversion as late as possible (Late Binding).
This is the default for LPRng:
lp:client
:lp=queue@spooler
:force_localhost@
queue:server
:filter=.../ifhp
:lp=ipp://.... OR :lp=device:/dev/lp0 OR ....
>
> --
> David Bear
> College of Public Programs/ASU
> 480-965-8257
> ...the way is like water, going where nobody wants it to go
Patrick Powell Astart Technologies,
[EMAIL PROTECTED] 9475 Chesapeake Drive, Suite D,
Network and System San Diego, CA 92123
Consulting 858-874-6543 FAX 858-279-8424
LPRng - Print Spooler (http://www.lprng.com)
-----------------------------------------------------------------------------
YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
The address you post from MUST be your subscription address
If you need help, send email to [EMAIL PROTECTED] (or lprng-requests
or lprng-digest-requests) with the word 'help' in the body. For the impatient,
to subscribe to a list with name LIST, send mail to [EMAIL PROTECTED]
with: | example:
subscribe LIST <mailaddr> | subscribe lprng-digest [EMAIL PROTECTED]
unsubscribe LIST <mailaddr> | unsubscribe lprng [EMAIL PROTECTED]
If you have major problems, send email to [EMAIL PROTECTED] with the word
LPRNGLIST in the SUBJECT line.
-----------------------------------------------------------------------------