Back to article
Sharing Linux Printers Across Subnets
Printing Is Still Vexatious. But We Can Prevail
December 20, 2007
Even small home networks are divided into subnets these days, thanks to the proliferation of combination router/firewall/wireless access points, and of course larger networks are subnetted, whether physically or with VLANs, for controlling access to network resources and easier administration. Sharing printers across subnets is not something that has been reduced to clicking a couple of checkboxes yet, and a lot of folks don't even know it can be done. With Linux it is fairly easy, but it takes some digging to learn how to do this. So I have dug, and today share the spoils of my digging.
Printing in Linux presents a classic Linux paradox: CUPS, the Common Unix Printing System, is sophisticated and chock-full of advanced features that put its closed-source counterparts to shame. But despite being a mature application and the standard printing subsystem for virtually all Linux distributions, it's still rather painful to configure, especially sharing printers over a network. Some Linux distributions are positively confused when it comes to sharing printers; Fedora and Ubuntu, to give two examples, enable Avahi by default, but turn off all shared printing. I have yet to see a single Avahi-enabled device or service, but I know that most folks want to be able to use networked printers.
Some of the problem lies in the interfaces. KDEPrint is pretty good and the Gnome printer interface is tolerable. The CUPS Web interface (http://localhost:631) is more complete than either one, but it comes with its own set of vexations. Some of them are inherent in a Web GUI, such as caching your mis-typed password and not accepting a fresh one, requiring re-authentication at random intervals, and dog-slow. They often barf on restarting the CUPS daemon, and all three suffer disconnects between what you tell them to do, and what actually appears in /etc/cups/cupsd.conf. For example, as I was preparing for this article I used the "Edit Configuration File" feature of the CUPS Web interface. Not only did it not do what I told it to do, it replaced my existing cupsd.conf with the default. As Ernest Tubb sings, Thanks, thanks a lot! Fortunately CUPS automatically archives old versions, so it was an easy (but should have been unnecessary) restore.