在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和其他答案 。