Understanding the export printer driver feature

Kurt Pfeifle kde-print@mail.kde.org
Sun, 26 Jan 2003 00:43:51 +0100


Kurt Pfeifle wrote:

> Michael Goffioul wrote:
> 
>>> OK, I've now got a copy of all the files in the list, but am having a 
>>> slight
>>> problemw ith the export bit. In my case I'm running cups & samba on 
>>> an old
>>> P150, and am running KDE on my laptop. Does KDEPrint require that the 
>>> wizard
>>> and cups/samba servers be running on the same system? If not, where 
>>> do I put
>>> the files on my laptop so that KDEPrint will find them to export them?
>>
>>
>>
>> I don't think CUPS server must be running,
> 
> 
> No -- cupsd *must* be running too; but not necessarily on the same 
> system. In
> the case of the "KDE Export Driver Wizard" on the laptop, it only needs the
> CUPS and Samba client parts of the programs installed. [I bet Michael knows
> this, because his KDEPrint Wizards work....  ;-)  but his remarks might not
> be understood fully because of their brevity...]
> 
> NOTE, that there could be not just 2, but 3 different hosts 
> participating in
> the execution of the command(s) [or even 4, if you count the printing Win
> clients too]:
> 
>    * the one where "cupsaddsmb" is executed (which at least needs CUPS 
>      client commands and Samba client commands installed);
> 
>    * the CUPS server with the actual printer (and a Ghostscript or other 
>      CUPS driver) -- specified with "-h cupsservername" (CUPS server needs 
>      Samba installed too);

Hmmmm -- this last sentence should *of course* have read "CUPS server needs
*not* Samba installed too" (as I made clear in the mail at all other places).
Sorry.

>    * the Samba server which offers the (PS-) Win driver for download 
>      from its [print$]-share  --  specified with "-H sambaservername" 
 >      (*this*  Samba server doesn't necessarily require a CUPS installation).
> 
> If you don't give "-h" or "-H" options it is assumed that everything 
> concerns
> localhost only.
> 
> 
>> but samba server should be
>> running 
> 
> 
> On the notebook you don't necessarily need a Samba *daemon* running...
> 
>> as cupsaddsmb (and KDEPrint) uses smbclient and rpcclient
>> are used internally.
> 
> 
> Before smbclient and rpcclient are doing their work, cupsaddsmb uses IPP
> calls to retrieve the real PPD for the printer ("from /etc/cups/ppd/") from
> the CUPS server. This part of the cupsaddsmb command is not visible from
> the "-v" verbose output (see for an example what the output looks like at
> http://de.samba.org/samba/docs/Samba-HOWTO-Collection.html#AEN1089 -- 
> note that
> it looks a bit different in more recent versions of CUPS and Samba.).
> 
> This is then copied to "/var/spool/cups/tmp/some-random-name" of the host
> where the cupsaddsmb command runs, and used by smbclient to "put" it to the
> intended Samba-Server's [print$]-share for download:
> 
>    smbclient //sambaservername/print\$ -N -U'root%secret' \
>       -c 'mkdir W32X86;put /var/spool/cups/tmp/3cd1cc66376c0 
> W32X86/infotec_IS2027.PPD...
> 
> and later "rpcclient" enables and activates the drivers and initializes
> the correct "device mode". (This stuff is required by the Windows clients;
> basically it is s.th. which emulates what a MS Win NT print server would
> retrieve from its registry when a Win client asks for it during driver
> installation... [That's why a simple copying of the files to the
> [print$]-share doesn't work. Samba stores this info in various *.tdb
> files -- "ntdrivers.tdb", "ntprinters.tdb" and "printing.tdb"]):
> 
>    rpcclient sambaservername -N -U'root%secret' \
>       -c 'adddriver "Windows NT x86" \
>       
> "infotec_IS2027:ADOBEPS5.DLL:infotec_IS2027.PPD:ADOBEPSU.DLL:ADOBEPSU.HLP:NULL:RAW:NULL"' 
> 
> 
>    rpcclient localhost -N -U'root%secret' -c 'setdriver infotec_IS2027 
> infotec_IS2027'
> 
> At this stage all the files should be in the [print$]-share for download.
> The clients "see" a shared printer on the Samba server with the driver
> files possibly as "printername@cupsserver" (if the CUPS server had
> "BrowseShortNames Off"). When they download the driver, the printer is
> installed as "printername@cupsserver on sambaserver", where
> "printername@cupsserver" is the name of the printer and "on sambaserver"
> is automatically added. (This has been tested with Win 2K and XP
> clients by me -- dunno about Win 9x/NT clients, where it might not work
> at all or where the indicated printername might be different).
> 
> An actual print job would get spooled to the Samba server first (using
> MS RPC printing calls), then transferred to the CUPS server (using the CUPS
> API, because Samba is compiled against libcups), whereupon CUPS does the
> rest of the job. (NOTE, that Samba doesn't need to be running on the
> CUPS server because the primary Samba server is able to transfer the job
> to the CUPS server using the CUPS API (with IPP).
> 
> I hope I didn't confuse you too much. (For me, it actually helped to
> understand the whole network transparent mechanism better, once I thought
> of the the procedure taking place on three different hosts [or four, once
> you counted the Win clients in]...).

[ I am not sure if the ASCII art drawing which I included here was
   readable for everyone receiving it or if it was garbled...]

> Once a Win client downloads the driver from the Samba server and prints,
> the CUPS server does *not* need a running Samba server  --  because 
> Samba is
> compiled against "libcups" it is a perfect CUPS IPP client and can transfer
> the jobfile remotely (by using CUPS IPP functions) into the CUPS spool 
> directory.
> 
> 
> 
>> The location where to put the files is the
>> same as for cupsaddsmb, chech manual page.
> 
> 
> IIRC, this also works with KDEPrint (long time since I tested this.). 
> However,
> it is a bit less comfortable than the commandline. While you can type in 
> the
> (remote) Samba server directly in the "Export driver..." dialog, you need
> to specify the (remote) CUPS server by using the "Configure Manager" -->
> "CUPS server" dialog first. (And BTW, this part of KDEPrint has working
> "What's this?" quickhelps...)
> 
>> Michael.
> 
> 
> Cheers,
> Kurt