1 min read

Picking the right drivers for remote printing to a CUPS server, in a nutshell

So you've got CUPS (the Common Unix Printing System) installed on your new *nix box, and you want to set up remote printing. How do you do it? Getting CUPS itself set up isn't too difficult - there's no shortage of instructions and tutorials out there - but picking the correct print drivers on the server and client side can be a bit more daunting for the uninitiated. If you understand a few basic principles, though, it's really not too bad.

Scenario: *nix (CUPS) client → *nix CUPS server

  • Either the CUPS client or the CUPS server should be configured with the Generic - Raw Queue driver.
  • If the client is configured as a raw queue (recommended), then the server should be configured with a make/model-specific driver for your printer, and vice versa.

Scenario: Windows client → *nix CUPS server (using IPP)

  • Option 1: Set up the printer on the CUPS server as a raw queue and set up the printer on the Windows client using the make/model-specific driver.
  • Option 2: Set up the printer on the CUPS server using a make/model-specific driver and set up the printer on the Windows client using a PostScript driver.

For Windows clients, Option 1 is usually best as it allows you to take full advantage of any special features exposed by the native driver. Additionally, PostScript printing on Windows can be iffy depending on application support and driver quality; for example, HP lasers tend to behave much better when using PCL-based drivers.

If you have a mixed environment with both Windows + *nix (CUPS) clients, then you can either:

  • set up a raw queue on the server and use model-specific drivers on all clients
  • set up two different print queues on the server: one with the model-specific CUPS driver (for raw CUPS clients), and the other as a raw queue (for Windows clients with their own model-specific drivers.)

I personally prefer the latter for maximum flexibility, but have had success with both approaches.

If you'd like a more in-depth technical explanation, I recommend this article: https://en.opensuse.org/SDB:Printing_from_Windows_to_Linux