root / pykota / trunk / docs / filterpykota.sgml @ 1500

Revision 1500, 6.0 kB (checked in by jalet, 20 years ago)

The old pykota filter has been removed. LPRng support disabled for now.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1<!-- $Id$ -->
2
3<chapter>
4  <title id="filter">PyKota's internals</title>
5 
6  <para>Last modified on $Date$</para>
7 
8  <para>
9    To account for pages or eventually ink usage
10    <footnote>
11      <para>
12        PyKota doesn't currently account for ink usage, it only accounts
13        pages. To account for ink usage, you should use PrintBill instead.
14      </para> 
15    </footnote> 
16    , you must plug your accounting
17    system somewhere into the printing system you use, be it either <application>CUPS</application>
18    or <application>LPRng</application>. One way to do this without having
19    to modify the printing system itself, is by using a <firstterm>filter</firstterm>.
20  </para>
21 
22  <para>
23    A filter is a computer program which takes data in one format as its input, and outputs the
24    same data but transformed into another format. <application>CUPS</application> already
25    contains many filters. For example there's one filter named <filename>pstops</filename> which accepts
26    PostScript data as its input, and, as its name implies, outputs PostScript data too, but after having
27    eventually rearranged the pages to fit several pages on a single sheet of paper, or other manipulations
28    like that.
29  </para>
30 
31  <para>
32    The <filename>pstops</filename> filter described above is also in charge of doing basic page
33    accounting, but <application>PyKota</application> currently doesn't use this facility since it may
34    prove to be unreliable depending on the drivers used or if a paper jam occurs for example.
35  </para>
36 
37  <para>
38    <application>LPRng</application> can also use filters, one often used in combination with
39    <application>LPRng</application> is <application>magicfilter</application> which can convert
40    different input formats to native printers languages like PostScript or ESC/P2.
41  </para> 
42 
43  <para>
44    So to do its own accounting, <application>PyKota</application> has its own filters, for <application>CUPS</application>
45    it's named <filename>cupspykota</filename>, which is in fact a <application>CUPS</application> backends wrapper,
46    and for <application>LPRng</application> it's named ########## TODO ########## .
47    The procedure to plug the correct filter into your printing system is described in the
48    <xref linkend="installation" endterm="installation"> chapter.
49  </para>
50 
51  <para>
52    Currently with a <application>CUPS</application> internal accounting mechanism, the <filename>pstops</filename>
53    filter can be bypassed. That's why <application>PyKota</application> uses its own backend.
54    The <filename>cupspykota</filename> backend wrapper ensures that jobs can't bypass the filtering mechanism, so you can use
55    any printer with any driver and any command line option, and you can be sure that your
56    print job will be correctly accounted for.
57  </para>
58 
59  <para>
60    When used with an <application>LPRng</application> backend, the accounting filter is not defined the same way
61    input filters are, so the problem described above doesn't exist, and <application>PyKota</application>
62    may work with non-postscript printers, provided they can report their page counter and you know how to retrieve
63    it.
64  </para>
65 
66  <para>
67    When you submit a print job, <application>PyKota</application>'s accounting mechanism is automatically launched by your printing system,
68    so it has to detect which system you are using (<application>CUPS</application> or <application>LPRng</application>)
69    and behave like if it was specifically designed for your printing system. Fortunately there's not a lot
70    of differences, the more important one is the exit codes used to tell the printing environment if a job
71    has to be accepted or rejected.
72  </para>
73 
74  <para>
75    When using the <literal>hardware</literal> accounting method,
76    the <application>cupspykota</application> CUPS backend
77    asks the printer for its internal page counter at the start and at the end of the print job, and
78    computes the values' difference so accounting is done immediately.
79  </para>
80 
81  <para>
82    When using the <literal>software</literal> accounting method,
83    and if the user is still allowed to print,
84    the command you specified is launched with the job's data on its
85    standard input. Your command must print the job's size in number of
86    pages on a single line on its standard output. This number is then
87    read by <application>PyKota</application> and used to update the current user's quota information.
88    Of course checks are also done like with the <literal>hardware</literal>
89    accounting method, to see if the current job is allowed to be printed or not.
90  </para>
91 
92  <para>
93    If a problem occurs, it is logged either to the filter's standard error or to the system logger, depending on
94    your preferences in <application>PyKota</application>'s configuration files. Also if a print quota is reached
95    you may choose if the administrator, the user, both or no-one will receive an email message explaining
96    the situation and proposing a solution. You can even configure another action instead of sending email
97    messages if you want.
98  </para>
99 
100</chapter>
101
102<!--
103
104$Log$
105Revision 1.11  2004/05/25 09:49:52  jalet
106The old pykota filter has been removed. LPRng support disabled for now.
107
108Revision 1.10  2004/05/13 13:59:28  jalet
109Code simplifications
110
111Revision 1.9  2004/03/03 19:35:36  jalet
112Spelling problem. Thanks to Jurandy Martins
113
114Revision 1.8  2003/11/15 14:59:53  jalet
115Documentation wrt the new CUPS backend.
116
117Revision 1.7  2003/10/14 20:26:53  jalet
118Better documentation.
1191.15 is out !
120
121Revision 1.6  2003/07/25 13:10:58  jalet
122Improved documentation
123
124Revision 1.5  2003/07/25 10:41:29  jalet
125Better documentation.
126pykotme now displays the current user's account balance.
127Some test changed in ldap module.
128
129Revision 1.4  2003/04/30 20:00:51  jalet
130Typo
131
132Revision 1.3  2003/04/24 21:09:47  jalet
133Documentation slightly improved.
134
135Revision 1.2  2003/03/25 09:32:06  jalet
136Improved documentation.
137
138Revision 1.1  2003/02/08 00:03:35  jalet
139Documentation skeleton added
140
141
142-->
Note: See TracBrowser for help on using the browser.