Tackling a shared USB printer (linux -> WXP)

Jeff Vian jvian10 at charter.net
Tue May 4 23:59:50 UTC 2004



Brion Swanson wrote:

>It seems to me that the printer is hooked up to a single machine - i.e.
>presumably a machine that only runs one operating system at a time - or it's
>hooked up to a hardware print server.  In either case, the interface through
>which the printer receives its data should be of one type.  In other words,
>when I - as the software printing driver - talk to the physical printer, I
>use only one language to talk to that printer -- the most appropriate common
>language.  All other devices that want to talk through the printer must go
>through the printer driver -- a single printer driver.
>  
>
The concept here is that window refuses to queue a file before it is 
processed thru the driver for that printer. If spooled raw it will not 
print properly, EVER.

>If I set up a printer in Windows and shared it, I don't believe I'd need to
>set up multiple versions of the same printer, one for each different OS that
>uses it.  Windows would configure one printer, with one driver (the Canon
>driver in my case) and then other computers would talk to Windows to print,
>not to the printer directly.  In which case, I only need the driver that
>works with windows to be loaded and possibly some translation software to
>convert, say, a stream of bytes into something the printer will understand.
>  
>
This is wrong in concept but right in queueing.

If you have a printer on an XP machine and are sharing it with a 98 
machine they both have their own version of the driver for that printer 
(for many printers) and each sends the file preformatted to the print queue.

The biggest difference is when the file gets queued.  By default a file 
to be printed on linux is spooled.  Then when it is despooled for 
printing it is handed off to the printer driver for the formatting that 
is printer specific and streamed to the printer.  This means the queue 
is set up specifically for each printer because the queue config knows 
what driver to hand the job to for formatting  And if I want, I can use 
different drivers for the same printer -- postscript,  non postscript, 
PCL, or otherwise depending on the abilities of the printer and my 
wants.  I just set up a different print queue for each type handling I want.

On Windows, the file is formatted (and binary) before it is spooled to 
the queue (raw on Windows as well as on Linux).

With these differences it is important that the linux queue knows what 
type file it is receiving.  Preformatted or Raw.

>I agree it's logical to have one queue for each device that needs a
>different driver, but managing 'n' number of queues for a single printer
>because I have 'n' number of different OSes, each of which talk to the
>printer in a different language is, if not difficult at least annoying.
>  
>
Think of the linux print queue as doing the job the windows print 
drivers do before spooling.
The file spooled is raw, usually much smaller than the formatted file, 
(and often saves a lot of space) as well as making a single point in 
time where the formatting occurs  (exactly when needed). After the 
driver manages the formatting the file is now binary and streamed  to 
the printer.

>I want to set up the printer locally in linux, then tell the rest of the
>world, "Hey! I have a printer you can use if you want to talk to it through
>me!" and have that be it.  It doesn't seem like such a difficult task.
>Other operating systems do it - why not this one?
>  
>
If you change the way linux spools the print files so they are 
preformatted before spooling then ALL print sources would be able to use 
a raw print queue. In the present setup, the printer drivers do not even 
touch the file until it is despooled for printing.

The raw print queue is functionally identical to the print queue in 
Windows.  It receives a (binary) file to be spooled and sends it to the 
printer without doing any other processing.

>Sorry this turned into a little rant, but it just bugs me that this
>"thousand-queue" solution is the best thing linux has to offer when sharing
>a USB printer with other operating systems.
>
>Brion
>  
>
This is not difficult.  When sharing with linux machines you have a 
choice on the sending machine of  preformatting and sending to a raw 
queue or sending it raw an using a printer specific queue on the print 
server.  The same choices are (theoretically) available whether you are 
providing services for Linux workstations or Windows (except Windows 
does NOT allow the choice.  It MUST be sent to a raw print queue).

OTOH, the concept of the print queue providing the driver formatting on 
*nix goes a little deeper.  It not only saves space in a print queue, 
but it also meens the workstations being served do NOT have to even 
install a printer driver and do not care what printer their job is sent 
to. (I know, this is a carry-over from when workstations were dumb and 
drive space was at a premium;  But the idea is still sound)

>----- Original Message ----- 
>From: "Jeff Vian" <jvian10 at charter.net>
>  
>
>>Why does it seem wrong.??
>>
>>The os being used to print (windows), preformats the printer output so
>>it is correctly printed.  Thus it needs to be streamed to the printer
>>via a "RAW" queue that gets no further processing.
>>
>>Linux also needs to format its output for the printer, so it cannot use
>>the raw queue but needs a different path that does process the output
>>and prepares it for the printer.
>>
>>This seems very logical to me.
>>
>>    
>>
BOTTOM LINE: flexibility. Windows is not, Linux is almost limitless. 
 Tailor it as you see fit.
A few seconds spent in planning and configuration provides a lot of 
later flexibility.


If you do not like the flexibility options of windows why not get a 
network print server appliance and remove the printing from Linux 
totally?  Then every station would have to send files to the printer 
exactly the same - preformatted and all.





More information about the fedora-list mailing list