Implementing AirPrint with DNS-SD
Background
I'm trying to implement AirPrint through static DNS, like documented on http://dns-sd.org/ServerStaticSetup.html. The iPad gets the dns search domain "lan" through DHCP, and I verified that in Settings-WLAN. I think I created all necessary entries in the right places, the iPad however doesn't find my printer or if it happened to find it, it showed a lock after the printers name and didn't print. (iOS version is 6.0.1)
Has anyone here a clue, as to why iOS does not find the printer or if it finds it, why it shows it as locked?
This is my setup (simplified with example domain)
DNS entries
Redirect to browse domain
PTR b._dns-sd._udp.lan = bonjour.lan
PTR lb._dns-sd._udp.lan = bonjour.lan
Printer entries
PTR _ipp._tcp.bonjour.lan = TestPrinter._ipp._tcp.bonjour.lan
PTR _universal._sub._ipp._tcp.bonjour.lan = TestPrinter._ipp._tcp.bonjour.lan
SRV TestPrinter._ipp._tcp.bonjour.lan = 0 0 631 mfp.printer
TXT TestPrinter._ipp._tcp.bonjour.lan
txtvers=1
qtotal=1
rp=Print
ty=Toshiba MFP
adminurl=http://mfp.printer
note=Shared MFP
priority=0
product=(Toshiba eStudio 351c)
printer-state=3
printer-type=0xC0B0DE
Transparent=T
Binary=T
Fax=F
Color=T
Duplex=T
Staple=F
Copies=T
Collate=T
Punch=F
Bind=F
Sort=T
Scan=T
pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf
URF=none
Caveats: I don't own an AirPrint device nor do I have one available elsewhere for testing. So I'm not talking from my own experience in the following answer...
-
First, when publishing a printer (AirPrint or not) from a DNS server ("static, Wide Area Bonjour"), you should include ALL of the TXT record key/value pairs which are listed in the current Bonjour Printing specification.
A tabular overview is listed in chapter 9 of the specification document (for all details please read the complete chapter):
-
Second, the Bonjour Printing specification requires that for a printer you always have to register the LPD protocol (
_printer._tcp
), even if the device does not support it (port = 0
) !.The reason for this seemingly braindead requirement is this: LPD is considered the "flagship" protocol for service discovery related to printing. (Meaning: if you own the service instance name for
_printer
then you also own it for_pdl-datastream
,_ipp
,_ipps
, etc.)Some older versions of OS X enforced this. They would not work without it. Newer versions (and probably the next macOS version too) are less dogmatic and more pragmatic...
In your case the
air
(has nothing to do with AirPrint, but means s.th. like authentication information required),TLS
,UUID
,usb_MFG
,usb_CMD
andusb_MDL
keys are missing (even if you'd use""
as their key values). -
Third, please take to heart the general rule about the trailing dot for domain names. Details are outlined here:
- dns-sd.org/TrailingDotsInDomainNames.html
-
Fourth, maybe you also should enclose your key values in quotes. Example:
pdl="application/pdf,image/urf"
not
pdl=application/pdf,image/urf
Fifth, in general, what is quoted above in the OP code block does not look like a valid format for a zone file to me. (I notice that the original question has been edited by other people than the OP, so I won't comment on the details...)