The Common Unix Printing System, or CUPS, does have some basic
print quota features. However, it does not allow for per-user or per-group page quotas, or for quotas which
automatically expire after a certain date. I wanted a finer-grained system, so I modified an existing print
accounting system (called accsnmp) to support quota
enforcement. The result is called quosnmp.
Quosnmp is released under the GNU GPL v2.
The goal of quosnmp is to provide reliable print quota enforcement while keeping the code simple and extensible.
All you need to use quosnmp is CUPS, Perl, the quosnmp script itself, and one Perl module which is not part of a
standard Perl install: Net::SNMP.
Among the enhancements which quosnmp adds to a default CUPS install are:
- Different quotas may be assigned to individual users or to groups.
- Users or groups may be given unlimited quota or be prevented from printing at all.
- Quotas can be absolute numbers (e.g. 500 pages) and/or adjustments (e.g. 100 extra pages for everyone in
group foo).
- Quotas can be set to automatically expire at a particular date and time.
- Uses hardware-based print accounting.
- Creates a more detailed page_log ("quosnmp_page_log").
- Creates a more detailed error_log ("quosnmp_error_log"). The level of detail of the
information printed to the error log is configurable.
Other important features include:
- Comes with an install script.
- Can use SNMP or PJL commands to query printer status, and can use SNMP, PJL or Postscript commands to
get pagecount.
- Can notify users by e-mail when they exceed their print quota.
- Supports HPLIP URIs.
- Can credit accounts for mandatory banner pages (like billing sheets).
- Comes with a utility script ("quosnmp-util") for doing administrative tasks like checking and
setting quotas.
- Written in Perl, so the code is relatively easy to customize.
The quosnmp backend also has some limitations and caveats, including:
- Only works with network printers, not USB, parallel port, or other locally-connected printers.
- Quosnmp does not natively support period quotas, e.g. ones which reset every month. It does
include some features which make it simple to set up periodic quotas using a cron job. A sample bash script to run
in cron ("reset_print_quotas") is included.
- Quotas by quantity of data in bytes (KLimits) are not supported, though the KLimits enforced
by CUPS itself still apply.
Get it here!
Last modified on 2009-03-13