IOS – Implementing AirPrint with DNS-SD

airprintbonjourdnsios

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

Best Answer

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...


  1. 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):

    Printer Description TXT Record Keys for Bonjour/AirPrint

  2. 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 and usb_MDL keys are missing (even if you'd use "" as their key values).

  3. Third, please take to heart the general rule about the trailing dot for domain names. Details are outlined here:

  4. Fourth, maybe you also should enclose your key values in quotes. Example:

    pdl="application/pdf,image/urf"
    

    not

    pdl=application/pdf,image/urf
    
  5. 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...)