Making Windows 10 to print to a CUPS printer over the network

Have you ever wondered if you could print from your Windows 10 machine to a CUPS printer on your local network? It might be actually quite easy. See this documentation about how I did it with my black & white Samsung SCX-3205 printer.

Checking CUPS configuration and access

Lets say you have somehow configured CUPS. In order for it to serve external computers, at least these settings should be present in /etc/cups/cupsd.conf:

Listen 0.0.0.0:631


# A bit more down...


# Old setting, comment out:
#<Location />
#  Order allow,deny
#</Location>

# New setting:
<Location />
  Allow all
</Location>

So here we made the CUPS root accessible externally. Restart cups for settings to take effect. Next, on your Windows 10 machine navigate to your cups host, for example http://172.16.8.164:631/printers . Click on the printer you have installed earlier:

Next you get the printer page, for for example like this:

NOW ENSURE THAT THE URL IS HTTP! NOT HTTPS! And save the URL. My URL was http://172.16.8.164:631/printers/Samsung_SCX-3200_Series .

Adding the CUPS printer in Windows 10 with generic(ish) drivers

Next open the Printers setting:

Click to add new printer…

…and select that printer is not listed:

Allow UAC prompt:

Now select the “Select a shared printer by name” option and write the URL you had earlier. For me it was http://172.16.8.164:631/printers/Samsung_SCX-3200_Series . Then select Next:

Now Windows asks about what driver to use. For my black & white printer the driver named “HP LaserJet 9000 PS Class Driver” seems to work with CUPS:

(For color printers, maybe something else is needed? Maybe “HP Color Laserjet 5500 PS Class Driver” ? But I have not tested this.)

Next you can print test page:

Observe how it comes out. Looks good!

Next you can close the wizard:

Observe also the printer listed with other printers:

Finally close the settings and you are done. Not so difficult, eh?

26 Replies to “Making Windows 10 to print to a CUPS printer over the network”

    1. Cool I could help! I was dead sure many people on the Internet would be having the same problem and it indeed seems to be so.

  1. What’s amazing is how can Microsoft still use http protocol instead of https, it’s year 2021, but why Am I surprised with a company that uses users private data without their consempt, changing EULA without notice all the time!

    1. I can only guess, but maybe it technically happens because certificates on PI are self-signed. I’m quite confident that some library on Windows side barfs on this silently. It is obviously a security measure, but please.. How about modifying the code putting a checkbox there saying “allow all certificates” or something?

    2. This is not a Microsoft issue. To use https u need a certificate that is issued to your local ip. I bet you can create a self-signed certificate and install it on the rpi if you use DNS name instead of ip-address. It isn’t really necessary to use encrypted traffic as long as it’s in your local network.

  2. Wonderful article! Got my mom’s printer on a pi as windows wouldn’t seem to wake it. Needs USB to Ethernet cable for WOL. I know I have one around somewhere 😂 anyways, cups running on a pi, got her scanner on there too! So much easier when I can check the logs with my phone

  3. Thanks for the article Janne, it helped me out setting up my printer.

    I was wondering, is there a way to remove the “on https://172.16.8.164:631” when looking at the printer names in the printers list? I’d like it just to say “Samsung_SCX-3200_Series.

    1. In windows, when adding the printer, setup a printer with a network port instead of browsing network shared printers, and when asked for the printer port, use the http link.

  4. Thank you Janne,

    I bought some used Dymo Labelwriters (Model 320 (Version 90795)), these are first release.
    They will not work with Windows 10, as the USB connection is not confirm the USB spec. As they work with Linux, this was never a problem for me. However now I wanted to use small Dymo Labels (11353). These come with two labels next to each other. gLabel (Linux) could not handle this format and would only print 1 label.
    With your solution I can use the official Dymo Labelwriter Software on Windows 10 and still print the on the old Dymo printers.

    Thanks a lot.

  5. I have a BlackCopper USB printer BC-85AC connected to my local Windows OS. My cup is installed on the server side. I have followed all the above steps, when I am sending test print and checking on cups browser the job is in processing and giving an error “Unable to get printer status.” Can anyone help me with this?

  6. I have an issue when brining up any print dialogue in any program I get not responding window for 30-40 seconds when windows has a CUPs printer set up

  7. Oh man, I’ve wasted tens of pages printed with white stripes cause of wrong Windows 10 driver for my p1005, and all I needed was just a link to RPI hosted CUPS service? WOW!

    1. Glad it worked! I should update the howto for year 2022, there seems to be not the same stock driver available anymore. Or maybe my IT just got me this driver I choose to select with my RPI. Dunno, lol.

  8. Fantastic! Now my family are empowered to print things off for themselves. Thanks.

    In case it helps anyone else, with an Ubuntu 20.04 hosted CUPS server, I had to open port 631 on the firewall with “sudo ufw allow 631/tcp”. On the Windows 10 side, “HP LaserJet 9000 PS Class Driver” wasn’t available so instead I installed “HP Universal Print Driver for Windows – Postscript” from https://support.hp.com/gb-en/drivers/selfservice/hp-universal-print-driver-series-for-windows/503548/model/503550. During installation I selected the USB plug-and-play option, which meant I could add the driver to the list that appears when manually adding the CUPS connected printer.

  9. Very instructive and good article, thank you! However, I still have a problem:
    I am setting up a Dymo LabelWriter 450 on a USB port on my Raspberry Pi, trying to access it from my custom software on Windows 11. My program works when I connect the printer directly to my Windows machine. However, when configured as a shared Cups printer, the program throws a null pointer exception at me. The source of the exception is buried deep in the Dymo support software – after long time of debugging, I found out that the print queue is null/not initialized. Anybody else had a problem like this?

Leave a Reply

Your email address will not be published. Required fields are marked *