This section of the KDEPrint Handbook will live from the readers' feedback. Here is just a small beginning.
CUPS does the “print accounting” by passing nearly every job through the “pstops” filter. This one does, amongst other things, the page counting. Output of this filter there may be piped into other filters (like pstoraster --> rastertopcl) or sent to the printer directly (if it is a PostScript® printer).
In any case, this works for network, parallel, serial or USB printers the same. For pstops to work, it needs DSC, Document Structuring Convention compliant PostScript® (or near-equivalent) as input. So it calculates the pages during filtering on the print server and writes info about every single page (what time, which user, which job-ID and -name, which printer, how many copies of which pages of the document, how many kilo-bytes?) into /var/log/cups/page_log.
By the way: on my personal “wishlist” is a hack of “webalizer” to read and analyse the page_log and give a similar output. Anyone?
However, it is not giving correct results in the following cases:
Therefore the page accounting of CUPS is “only” an approximation (in many cases an excellent or at least good one, in others a quite poor one). The only reliable print count is the one done by the internal printer counter. (Because this is the one you pay for, if you are on a “click price” or similar.) Some, by far not most, printers can be queried remotely for that information via SNMP (Simple Network Management Protocol). That means, in a bigger network with many different printers there is just no completely reliable and accurate page accounting tool!
From Windows® clients jobs nearly always need to be sent as “raw”. Why? If CUPS works as a print server for Windows® clients using the original native Windows® driver for the target print device, this guarantees the correct formatting of the job on the clients already; therefor the server should not touch it and print “raw”; therefor no filtering is started (and this is not even possible as the input from the clients is not PostScript® as pstops expects; hence no page-count other than the default “1”.
See the man page for the lpoptions command. You may investigate a CUPS-enabled box about any option of its available printers. There is no need to have the printer installed locally. As long as the printer is available locally (through the CUPS “printer browsing” feature), it will also work remote.
To query for a printers' option typing lpoptions -p HitachiDDP70MicroPress -l will give a long listing of all available options as read from the PPD file for the given Hitachi-Printer (in my case installed on remote server transmeta). Remote server Transmeta and its CUPS daemon as well as the localhost's CUPS daemon need to be up and running for this to succeed.
You know that for PostScript® printer manufacturers it is “legal” to define their own internal names and procedures even for standard PostScript® options. As long as the driver is able to retrieve the option from the PPD and show it to the user in a way that he understands it everything is OK. But what do you do, if you want to use some obscure printer options on the command line? How do you find out its exact syntax?
Let's take an example. Looking at Hitachi's DDP70 printer and how it implements duplex printing is revealing somehow. How do you tell how to print double sided? duplex or Duplex? Or another name altogether?.
lpoptions -h transmeta -p Hitachi_DDP70_ClusterPrintingSystem -l | grep uplex
This leads to the output
TR-Duplex/Duplex: False *True
This is to be interpreted like follows:
To override the present default setting (duplex) and print a job in simplex, you need to use the following command:
lpr -P Hitachi_DDP70_ClusterPrintingSystem -o TR-Duplex=False /path/to/your/printjob
Use the lphelp command which may be installed on your system locally. There is not yet a man page for lphelp.
lphelp infotecP450
This lists the available options for the named printer. It is nicely formatted and does explain every available option and how to use it. You can query different printers' options at once:
lphelp infotec7410color DANKA_fullcolor_D2000 HP_ColorLaserJet8550
It also works for PPD files. Just specify the path to the PPD:
lphelp /home/kurt/PPDs/HP-ColorLaserJet8550.ppd
No system is perfect. Here are some commonly seen traps people have fallen into.
The printer names used in CUPS shall start with a letter and may contain up to 128 letters, numbers or underscores. Using dashes may lead to problems. Speaking about naming: printer names in CUPS are not case sensitive. So a printer named Best_of_Danka will be the same as best_of_danka or BEST_OF_DANKA. (This is a requirement of IPP, which CUPS is fully compliant with).
3 My files for printer lp sometimes mysteriously disappear and two days later I am told they got printed on a printer 3 storeys below my office. What's on?
Believe me, it is very unlikely that your printer is the only one with the name lp. Maybe CUPS is playing a trick on you. As you might have the setting “ImplicitClasses On” activated, CUPS tries to stuff all printers it sees on the network into a “Class” name lp. All jobs destined to lp are sent to this class and the first available member prints it. So if you had this nice fellow (who listened closely when you raved about CUPS and KDEPrint) install CUPS and poke around the system...get the idea?
Take my advice: choose a unique name for any network printer! (Mind you, the one on your parallel port also turns out to be a network printer for the rest of the world if you don't take care of your settings).