Linux – Use CUPS own driver when sharing a printer

cupsdriverslinuxprinter

I am trying to get an old printer working for a family member. The printer itself is working fine but I can't find a way to print from Windows 10 to that printer, the drivers for that printer no longer support the most modern versions of Windows.

Luckily, I was able to print to that printer using Ubuntu and I shared the printer using the GUI. The Windows machine was able to see it but still asked me for a driver before being able to print to it.

From what I just read (correct me if I'm wrong), Ubuntu use CUPS by default for printing, and CUPS should use its own driver when sharing, which was apparently not the case. Am I missing something ?

Just a little note: I will eventually use a Raspberry Pi for this (I have none that I can use right now), so if there something I might need to know that will be different on a Pi (else then the GUI), please let me know!

EDIT: I forgot to mention, this is a USB printer.

Best Answer

Since you can print on Linux, you have a proper driver. This is important because CUPS also supports “raw” queues where it does not actually know how to create printer data itself but relies on client-side drivers to do that.

Because CUPS knows how to print, you can just feed it PostScript data. Windows ships with various suitable drivers. They need not be related to your printer in any way.

I’ll quote Arch Wiki’s Printer sharing article on the following.

First, to enable sharing, it refers to the CUPS server:

Open up the web interface to the server, select the Administration tab, look under the Server heading, and enable the "Share printers connected to this system" option. Save your change by clicking on the Change Settings button. The server will automatically restart.

Then, to install the printer on Windows:

Sharing via IPP

The preferred way to connect a Windows client to a Linux print server is using IPP, as the configuration is simpler than using Samba. It is a standard printer protocol based on HTTP, allowing you to use port forwarding, tunneling etc. IPP has been natively supported by Windows since Windows 2000.

Note: You may have to add the Internet Printing Client to Windows (Control Panel->Programs->Turn Windows features on or off->Print and Document Services)

[...]

On the Windows computer, go to Control Panel->Devices and Printers and choose 'Add a printer'. If on Windows 10, click "The printer that I want isn't listed". Next, choose 'Select a shared printer by name' and type in the location of the printer:

http://hostname:631/printers/printer_name

(where hostname is the GNU/Linux server's hostname or IP address and printer_name is the name of the print queue being connected to. [...]

Note:

  • The 'Add Printer' dialog in Windows suggests the format http://computername/printers/printername/.printer, which it will not accept. Instead, use the syntax suggested above.
  • If you are using a proxy carefully check any used proxy exclusions. A wrong setting here may result in you being unable to add a printer until the next reboot even if you disable the proxy afterwards (at least on Windows 7).

After this, install the native printer drivers for your printer on the Windows computer. If the CUPS server's print queue is set up to use its own printer drivers instead of as a raw queue, you can just select a generic postscript printer driver for the Windows client (e.g. 'HP Color LaserJet 8500 PS' or 'Xerox DocuTech 135 PS2').

(Emphasis in last paragraph mine).

Related Question