It’s all my fault, really. This wouldn’t have been an issue if I had just let Xtina use my computer to print her boarding pass, but in my defense I didn’t know that she was doing that. So I gave her our iPad to use.
When it came time to print, she quite logically asked me how she would do that. I, of course, did not know how — I’ve never tried printing from iPad or smartphone, though I vaguely knew it was possible. The issue just never came up and I hate printers.
I knew that it would require avahi, so I started installing that on our printserver while I hit Google to see what else I would need.
The first hit was a very fine article by Linux Magazine, and it explained pretty much everything. But it’s never that simple, because nothing printed and cups started using 100% of a CPU.
Repeated in the
/var/log/cups/error_log a billion times were messages like these:
Request from "192.168.1.32" using invalid Host: field "dandelion.local:631"
That took a little more detective work because I didn’t read the Linux Magazine article carefully enough. The solution was to add an additional directive to the cups config:
--- /backup/snapshots/dandelion.0/etc/cups/cupsd.conf 2015-06-08 08:33:31.000000000 -0400 +++ /etc/cups/cupsd.conf 2015-06-24 19:29:34.410488191 -0400 @@ -1,6 +1,7 @@ LogLevel warn PageLogFormat # Allow remote access +ServerAlias * Port 631 Listen /run/cups/cups.sock # Share local printers on the local network.
Gentoo packages required:
Also download and run airprint-generate after cups is configured and running.
If you have iOS 6+, which is pretty much a given nowadays, make sure you have the correct MIME types available, and add them if not:
echo 'image/urf urf string(0,UNIRAST<00>)' > \ /usr/share/cups/mime/airprint.types echo 'image/urf application/pdf 100 pdftoraster' > \ /usr/share/cups/mime/airprint.convs
Add the appropriate services to your default runlevel, and start them as well:
# rc-update add cupsd default # rc-update add cups-browsed default # rc-update add avahi-daemon default