Home

Your company decided to deploy iPad/iPhone.

Now you want to print from the device onto your corporate printer.

You ask Apple and get the usual answer, its not supported.

Hopefully the solutions described below will provide you with a solution.

iPad/iPhone use bonjour to discover printers.

Bonjour uses broadcasting, so odds are you cannot see stuff outside the wireless subnet

What you need to do is add a bunch of entries into your DNS and setup a CUPS printserver.

This will now allow the iOS device to discover printers and send print requests.

Assumptions:

Your internal DNS domain is: foocompany.com

We are going to setup a new subdomain called bonjour.foocompany.com

This allows us to play with DNS.

More importantly, you can use DNS views and show printers relative to the subnet address from where the DNS queries come from.

IE: Building A has subnet A1, Building B has subnet B1.

If a customer is in Building B, you only want to show printers in Building B.

Assuming when a customer is in Building B, they are on subnet B1, you can create a view in DNS that says when

the client ipaddress (of the DNS request) is in subnet B1, used the following DNS entries.

In this case I use a Ubuntu Linux server to test out DNS and CUPS.

SETUP

Setup a test DNS server which forwards all requests to your primary DNS server while supporting the test entries that you

need to play with.

Setup your /etc/bind/named.conf as follows, replace everything that is UPPERCASE with your site specific stuff

options {

directory "/var/cache/bind";

forwarders { REALDNSSERVER_IPADDR1 ; REALDNSSERVER_IPADDR1 ; };

forward first;

allow-query-cache { any; }; // Allow client queries from other subnet to query from cache

auth-nxdomain no; # conform to RFC1035

recursion yes;

};

zone "bonjour.FOOBAR.COM." { type master; file "/etc/bind/db.home"; };

zone "FOOBAR.COM" { type forward; forward only; forwarders { REALDNSSERVER_IPADDR1 ; REALDNSSERVER_IPADDR1 ; }; };

setup your /etc/bind/db.home file

$TTL 60

@ SOA ns.bonjour.FOOBAR.COM. hostmaster.bonjour.FOOBAR.COM. (2006010102 10800 3600 604800 1)

NS ns.bonjour.FOOBAR.COM.

ns IN A YOURTESTDNSSERVER_IPADDR

printserver IN A YOURCUPSPRINTSERVER_IPADDR

lb._dns-sd._udp IN PTR @

b._dns-sd._udp IN PTR @

_cups._sub._ipp._tcp IN PTR pname1._printer._tcp

_universal._sub._ipp._tcp IN PTR pname1._printer._tcp

_cups._sub._ipp._tcp IN PTR pname2._printer._tcp

_universal._sub._ipp._tcp IN PTR pname2._printer._tcp

pname1._printer._tcp IN SRV 0 0 631 printserver

pname2._printer._tcp IN SRV 0 0 631 printserver

pname1._printer._tcp IN TXT ( "txtvers=1" "qtotl=1" "rp=printers/PRINTERNAME1" "adminurl=http://printserver:631/printers/PRINTERNAME1

6_LJ" "ty=HP Laserjet PRINTERNAME1" "product=(HP LaserJet 4200)" "transparent=t" "copies=t" "duplex=t" "color=f" "pdl=application/octet-stream,

application/pdf,application/postscript,image/jpeg,image/png,image/urf" "URF=W8,SRGB24,CP1,RS600" )

pname2._printer._tcp IN TXT ( "txtvers=1" "qtotl=1" "rp=printers/PRINTERNAME2" "adminurl=http://printserver:

631/printers/PRINTERNAME2" "ty=HP PRINTERNAME1" "product=(HP color LaserJet 4650)" "transparent=t" "copies=t" "duplex=t" "

color=t" "pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf" "printer-type=0x801046" "URF=W8,SRGB24,CP1,RS600" )

Setup your CUPS server to print to a printer. See http://www.cups.org/

Assuming you setup a printer in CUPS with the queue name PRINTERNAME1, you need to put the same name in DNS above.

In the "product=" key you need to put the model info from the PPD file /etc/cups/ppd/PRINTERNAME1.ppd .

grep "*Product:" /etc/cups/ppd/PRINTERNAME1.ppd

Just pick one of many choices for model name, the iPAD does not use it, however OSX on Mac's does.

The "ty=" key is used in OSX to display a user friendly name

iPAD however uses the DNS name, in this case the stuff before the "_printer._tcp" part.

In CUPS ensure that the printer queue is accessible from your Intranet.

You can check by navigating to http://printserver.bonjour.FOOBAR.COM:631

You should have something like this in your config file /etc/cups/cupsd.conf

ServerAlias *

# Allow remote access

Port 631

Listen /var/run/cups/cups.sock

AccessLog syslog

AccessLogLevel all

LogLevel debug

MaxLogSize 0

SystemGroup lpadmin

# Enable printer sharing and shared printers.

Browsing On

BrowseOrder allow,deny

BrowseAllow all

BrowseRemoteProtocols CUPS

BrowseAddress @LOCAL

BrowseLocalProtocols CUPS dnssd

BrowseProtocols all

DefaultAuthType Basic

Now setup your ipad network config to point to your test DNS server and add "bonjour.FOOBAR.COM" in your DNS search path.

Try to print from the Photo application.

Good luck!

If found this information useful, please shoot me an email. It nice to hear that this helped someone.

Thanks you for visiting.

Ashish

mailto:ashish.logmaster@gmail.com

Update 2011-04-24

Received correction from Stuart Cheshire [Yes folks, the "inventor" of Bonjour]

You only need the lb and b records here.

The following are not needed:

db (default browse)

r (register)

dr (default register)

cf (configuration options -- not used)