![[LWN Logo]](/images/lcorner.png) |
|
![[LWN.net]](/images/Included.png) |
From: Michael Goffioul <goffioul@imec.be>
To: "Michael J. Hammel" <mjhammel@graphics-muse.org>
Subject: Re: printing Q's on KDE/GNOME for LWN.net (fwd)
Date: Wed, 30 May 2001 10:46:58 +0200
Hi,
I would be glad to help as much as I can. However I don't know exactly where
to start. First let me tell you that my main print experience is about CUPS,
I started to cde tools for that system. Now I develop the new KDE printing
system which is globally a kind of integration of QtCUPS/KUPS into KDE, but
in a generic way (meaning it support other print system than CUPS as well).
Let me also tell you that I don't use GNOME so I don't know anything about
its printing architecture, existing tools, ...
Let's start with a short explaination of existing tools (I know):
- CUPS: you already know what it is
- XPP: graphical print dialog based on FLTK, to be used as a replacement of
lpr, for CUPS.
- QtCUPS: conceptually the same as XPP but using Qt library. It also provides
a library to easily integrate CUPS and QtCUPS dialog into Qt/KDE
applications (http://cups.sourceforge.net/qtcups/, but rather
outdated, latest version is 2.1).
- KUPS: KDE graphical CUPS management tool, allows to add/remove/configure
printers/classes using powerful, complete and user-friendly dialogs,
also includes a graphical CUPS server configuration tool. You can
find some infos at http://cups.sourceforge.net/kups/, but the site
is outdated. Latest KUPS version is 1.1 (only available in Mandrake
distro).
The best would be that you give those tools a try. You can find RPM packages
in Mandrake distros (and source RPM that you probably can recompile, however
you'll need KDE-2.x).
As you said, printing under Linux is a complex topic, the main reason being
there exist various print systems. All these systems uses different configuration
mechanism, file syntax, ...Moreover these print systems doesn't provide decent
easy-to-use management tools, which makes printing configuration a hard task
for a newbie (except for CUPS which comes with a web interface). So it's up
to developers to write configuration tools: but these tools are only made for
a particular system, and sometimes for a particular Linux distro (like RH
printtool).
Now, I'm developing a new printing system for the KDE environment, which try
to address these problems. I'm trying to reinvent the wheel, in the sense that
this KDE print architecture is not a "print system" like CUPS, but it's an
abstract layer between KDE and an underlying existing print system (CUPS,LPR,...)
for the developer (using a common API) as well as for the user (using the
same configuration tools, whatever the real print system is). So this print
architecture is based on a set of core libaries that define an abstract API
and print tools based on it, and on the other side you have a set of plugins
that implement the real print operations.
The graphical interface is heavily based on my previous work QtCUPS/KUPS. It
mainly consists of a powerful print dialog (like QtCUPS) which is now used by
default by all KDE apps, and of a control module for print management (like
KUPS). Everything is now included in KDE-2.2alpha, so if you have time, you
might want to give it a try (you only need kdelibs and kdebase). I'll try
to give here a short summary of main features of these tools (note that all
these features doesn't exist in all plugins, but well in the CUPS plugin):
- provides a complete control of the printer option when it's possible (like
in CUPS): collate, nup, duplex, orientation, + all driver options
- powerful add printer wizard: easy to use, and provides a lot of features like
network scanning for network printers, local printer auto-detection (not
implemented yet) with driver auto-selection, ...
- easy printer configuration and modification
- print job management (hold, cancel, move to another printer, ...)
- print server configuration (when possible, like CUPS)
- extension of the instance/destination concept from CUPS to any print
system
- implementation of a generic filter mechanism allowing to process data before
sending it to the printer. You can then graphically plug and configure filters
like "psnup", "enscript", "imagetops", ... New filters are easily added as
they are defined in external XML files
- recently I added the new concept of "special" printer, in contrast to a
"regular" printer. A special printer is not a real printer, but the print
data (usually PS) is sent to a third party program instead of the underlying
print system: examples are "print to file", "write PDF" (uses ps2pdf),
"fax it" (using a graphical fax program like kdeprintfax, provided with
the new print system). Those special printers appear along with regular printers
in the print dialog, and like before everything is graphically configurable
inside the control module. Those special printers are saved on a user basis,
so any user can add/remove/modify special printers.
- provides a job viewer automatically started when a print job is sent, which
docked itself into the KDE panel (like M$).
If I would have to summary this print system, I would say:
- usability: use the most comprehensive GUI, moreover use the same GUI whatever
the underlying print system is.
- flexibility: make everything graphically configurable
- genericity: try to support as many systems as possible, so that it can be
used in any situation
Now let's enumerate the existing plugins with they main features. All plugins
allows at least to print (from the print dialog), management need still to
be implemented in some cases.
- CUPS: the most complete one, support all described operations
- LPR(BSD): printer management (RH-printtool-compatible) is partially
implemented, no job management
- LPD: this is generic plugin to be used as default. It is not intended for
management. It simply list all available printers in many UNIX system
(Linux-LPD, BSD-LPD, Solaris, HP-UX, IRIX), and so allow to print in
these systems. Actually it provides the same functionality as the Qt
print mechanism.
- RLPR: plugin based on rlpr. Provides easy printer and basic job management.
- EXT: this the most flexible plugin. Allows to specify a print command, like
in netscape. This plugin can probably be used in any situation where
the others can't be used. Of course it does not provide any printer
management, but still provide basic job management (actually you control
the child print process).
OK, I think that's all I wanted to say. Unfortunately I can't point you to any
site for this new print system. The best is to try it. If you need it, I can
provide you some screenshots, just tell me what you would like to see. Feel free
to contact me if you need more informations. But pay attention I'm on european
time.
--
------------------------------------------------------------------
Michael Goffioul IMEC-DESICS-MIRA
e-mail: goffioul@imec.be (Mixed-Signal and RF Applications)
Tel: +32/16/28-8510 Kapeldreef, 75
Fax: +32/16/28-1515 3001 HEVERLEE, BELGIUM
------------------------------------------------------------------