1. INTRODUCTION
---------------
AirPrint is an Apple technology that helps you create full-quality printed
output from iOS or OS X devices without the need to download or install
drivers.
Some printers support AirPrint natively; for those you don't need CUPS
AirPrint support. For any other printer, if it can be printed to via CUPS
on openSUSE, this package provides the additional tools and configuration
files needed to add CUPS AirPrint support for basic printing tasks from
iOS or OS X devices. For limitations see the "caveats" section below.
CUPS AirPrint support works by combining three open-source technologies:
-mDNS/DNS-SD (a.k.a. Bonjour, or ZeroConf) for printer discovery, and
-CUPS for receiving print jobs that are sent from iOS or OS X devices
via the IPP protocol, and
-cups-filters + Linux printer drivers for converting the printing data
in a print job (PDF or URF) into the native data format of the
particular printer device that finally produces the printout.
On openSUSE Linux, the standard mDNS implementation is called Avahi.
This package is about the first item:
-discovery of CUPS printers on iOS or OS X devices via mDNS/DNS-SD
The CUPS AirPrint support that is provided by this package generates
and publishes appropriate DNS-SD records for CUPS printers
so that iOS and OS X devices can use them.
2. CAVEATS
----------
In general: CUPS + Linux printer drivers != AirPrint.
Sharing CUPS printers (i.e. sharing printers with Linux printer drivers)
via appropriate DNS-SD records so that iOS and OS X devices can use them
often works but may also fail in spectacular and frustrating ways, which
is the reason why there is no native AirPrint support in CUPS.
In general basic printing tasks from iOS or OS X devices should work
like printing emails or web pages to standard Letter or A4 media.
But as soon as one goes beyond basic printing tasks things may fall apart.
Some examples what may not work when using CUPS as an AirPrint server:
-Ready media (that's how one gets to pick media sizes on iOS)
-Proper media selection, scaling, and rotation
-Printer status ("out of paper", etc.)
-Duplex printing with some printers
-Color/grayscale mode
-Copies
Some of these deficiencies would require major changes to CUPS and its
driver architecture to fix, others require driver and (in some cases)
printer firmware updates to correct.
For reference see the "How to enable AirPrint in CUPS" mail thread
on the "CUPS user discussion list" <cups@cups.org> in October 2015,
in particular see
http://cups.org/pipermail/cups/2015-October/027192.html
http://cups.org/pipermail/cups/2015-October/027196.html
http://cups.org/pipermail/cups/2015-October/027201.html
3. PREREQUISITES
----------------
All printers for which you want to add CUPS AirPrint support must first
be set up to accept print jobs via CUPS. Only shared CUPS printers will
be offered for access via AirPrint.
At least some iOS apps send the URF format when printing via AirPrint so that
the matching urftopdf filter that is provided in cups-filters >= 1.0.25 is
required to convert URF into PDF (PDF is the current standard printing data
format which can be further converted into the printer's native data format).
Because cups-filters cannot be reasonably well used with traditional
CUPS <= 1.5.4 also a modern CUPS >= 1.6 is in practice required.
In the following instructions it is assumed (and recommended) that the CUPS and
Avahi servers are running on the same host, and that the default configuration
of Avahi is used. It is also assumed that the (Apple) client devices and the
CUPS/Avahi host are on the same subnet (see 6.2).
4. AUTOMATIC CONFIGURATION
--------------------------
By installing this package, some setup steps are automatically taken care of:
-All required depencies are installed automatically (if you use zypper).
-Some extra MIME configuration files for CUPS are added:
/usr/share/cups/mime/apple.types
/usr/share/cups/mime/local.convs
-A tool for generating mDNS service profiles for CUPS printers is installed:
/usr/sbin/airprint-generate.py
5. MANUAL CONFIGURATION
-----------------------
The following manual configuration steps must be carried out after installing
this package:
5.1 CUPS configuration
A "ServerAlias" configuration entry must be added to /etc/cups/cupsd.conf. You
can do it by running the command
cupsctl "ServerAlias=$HOST.local"
or by editing the file manually. The command is convenient, but has the
unfortunate side effect of completely reformatting the cupsd.conf file, as well
as removing all comments from it.
Next, enable printer sharing if it isn't enabled already:
cupsctl --share-printers
Make sure each individual printer you wish to access via AirPrint is also
shared.
Finally, restart CUPS:
systemctl restart cups
5.2 Avahi configuration
Generate Avahi service definitions for your CUPS printers:
airprint-generate.py -v -d /etc/avahi/services/
With the -v option, the script prints some output about the printers it
generates profiles for. If you see no output at all, check the CUPS settings.
Make sure that the Avahi service is running.
5.3 Firewall
In general regarding firewall protection see
https://en.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings
If there is a firewall between the CUPS/Avahi host and your Apple devices, the
relevant service ports must be opened:
-port 631 (ipp)
-port 5353 (mdns)
If you are using SuSEfirewall2, you can run "yast firewall" to open the ports.
Under "Allowed Services" you need to allow the "Zeroconf/Bonjour Multicast DNS"
service, and, in the advanced settings, to open the "ipp" TCP port.
If you want to edit /etc/sysconfig/SuSEfirewall2 manually, you need to add
"ipp" and "avahi" to the following variables:
FW_SERVICES_EXT_TCP="ipp"
FW_CONFIGURATIONS_EXT="avahi"
6. REMARKS
----------
6.1 CUPS internal mDNS responder
With CUPS version 1.4 an internal mDNS responder was added for announcing
printers on the local network. Unfortunately, the printer records it sends are
not accepted for use with AirPrint. [1]
The workaround is to publish duplicate printer records specifically tailored
for AirPrint, which is what this package is for.
6.2 Local subnet only
These instructions only work if your Apple devices are on the same subnet as
the CUPS/Avahi server. It is possible to make AirPrint work across subnets, but
it takes some more effort (e.g., see [2]), and it is out of scope for this
package.
[1] http://www.finnie.org/2010/11/13/airprint-and-linux/
[2] http://pig.made-it.com/cups-dns-sd.html#7041
6.3 Trademarks
AirPrint, Bonjour, and OS X are trademarks of Apple Inc., registered
in the U.S. and other countries, see
http://www.apple.com/legal/intellectual-property/trademark/appletmlist.html