在iOS设备中创建Bonjour AirPrint服务

所以我想到要将iOS服务作为打印机发布(宣布服务),我使用NSNetService并将类型设置为_ipp._tcp

但为了被认可为AirPrint打印机,要求包括:

  • AirPrint使用IPP进行打印管理。
  • AirPrint收听mDNS(Bonjour / Avahi)的打印机发现。
  • 在考虑列出打印机之前,AirPrint要求_ipp通告中存在_universal子类型。
  • 在考虑列出打印机之前,AirPrint需要额外的TXT记录“URF”才能存在且非空。
  • 虽然这种URF格式(见下文)似乎是Apple的未来选择,但所有当前支持AirPrint的应用程序似乎都以PDF格式发送打印数据。
  • 当打印机受用户名/密码保护时,iTunes / AirPrint守护程序将发送TXT记录“air = username,password”。

资源

所以我试图弄清楚如何发布子类型并在NSNetService下发布我无法做到的TXT记录。 有人有主意吗?

此链接告诉您如何配置avahi以允许访问您的打印机。

试试这篇文章,很容易理解,作者回复博客文章: http : //sybaspot.com/configuring-dns-to-share-bonjour-printers-across-subnets-and-vlans-including-airprint-for -ios /

由于到目前为止您甚至没有显示代码的起点或存根,因此这里有一个不同的提示:您可以在本地LAN / WLAN中模拟有效的,正常工作的AirPrint服务公告,这将允许您的iOS客户端成功打印到现有的打印机(AirPrint与否)。

要求:带OS X的Mac。

一旦你完成这项工作,你现在可以使用Wireshark或tcpdump类的东西来捕获线上或空中的包并保存和分析它们。

然后开始编写您自己的应用程序,并使其发出与模拟相同的包。


已知以下内容适用于OS X Yosemite(10.10.x)。

假设,…

  • 你有运行OS X的Mac(Book),
  • 这个Mac的主机名是mymac
  • 其IP地址是192.168.111.111
  • 它有一个名为abcd共享打印机(不需要支持AirPrint!),以及
  • 打印机共享不需要身份validation(将DefaultAuthType none放入/etc/cups/cupsd.conf ),

…然后您可以将abcd队列提供给iOS客户端。

要测试这个,只需在Terminal.app窗口中执行以下命令(注意,命令不会返回 – 如果关闭Terminal.app窗口,命令的效果将消失!):

  dns-sd \ -P AirPrint-abcd \ _ipp._tcp,_universal \ local. \ 631 \ mymac.local. \ 192.168.111.111 \ pdl="application/pdf,image/urf" \ kind="document" \ priority="1" \ product="Model Name of my Printer" \ rp="printers/abcd" \ URF="DM3" \ Duplex="T" \ Color="T" \ note="Testing AirPrint via MacBook"\ txtvers="1" \ qtotal="1" \ printer-type="0x0480FFFC" \ printer-state="3" \ air="none" \ UUID="54321abc-1234-1234-abcd-1238e4babcd8" 

如果这样做(应该如此),您可以轻松地提出一个脚本或cron作业,每次启动Mac时都会执行此命令(并让它在后台运行)。 这留给读者练习。

(如果第一台Mac提供共享打印队列并且上面的所有细节都与第一台Mac的设置相匹配,那么你甚至可以从第二台完全不同的Mac运行同样的命令。)


背景资料:

dns-sd命令行实用程序是一个测试和开发工具,适用于所有人进入Bonjour,mDNS(多播DNS)和DNS-SD(基于DNS的服务发现)。 自Bonjour复活以来,它是每个OS X系统的一部分。

dns-sd-P参数将向本地LAN / WLAN发出Bonjour“代理通知”。 该公告将告知潜在的AirPrint客户以下信息:

  • 您的.local.有一个AirPrint设备.local. 域。
  • 它的名字是Airprint-abcd
  • 它可以通过IP地址192.168.111.111和端口631到达。
  • 使用打印机队列名称printers/abcd打印到它。
  • 它可以使用PDF和URF栅格文档。
  • 它不需要身份validation。
  • 它可以输出双面和彩色文档。

有关此实用程序的详细信息,请参阅man dns-sd 。 有关更多背景信息,请参阅dns-sd.org和其他答案 。