首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AirPrint设备中创建Bonjour AirPrint服务

在AirPrint设备中创建Bonjour AirPrint服务
EN

Stack Overflow用户
提问于 2011-09-05 16:13:59
回答 1查看 5.4K关注 0票数 4

因此,为了将(宣布服务)发布到iOS设备上作为打印机,我使用NSNetService并将类型设置为_ipp._tcp

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

  • AirPrint使用IPP进行打印管理。
  • AirPrint听mDNS (Bonjour/Avahi)的打印机发现。
  • AirPrint在考虑列出打印机之前,需要在_ipp公告中显示一个_universal子类型。
  • AirPrint需要一个额外的TXT记录"URF",在它考虑列出打印机之前,它必须是非空的。
  • 尽管这种URF格式(见下文)似乎是苹果未来的选择,但目前所有支持AirPrint的应用程序似乎都以PDF格式发送打印数据。
  • 当打印机受到用户名/密码的保护时,iTunes/AirPrint守护进程将发送TXT记录"air=username,password“。

来源

因此,我试图找出如何在NSNetService下发布子类型和TXT记录,这是我无法做到的。有人有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-04 23:04:03

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

要求:带有OS的Mac。

一旦你做到了这一点,你现在可以使用类似Wireshark或tcpdump之类的东西来捕捉电线上或空中的包,并保存和分析它们。

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

下面是已知的工作在OS约塞米蒂(10.10.x)。

假设..。

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

...then,您可以使abcd队列对iOS客户端可用。

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

代码语言:javascript
复制
 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中运行这个命令也可以保持不变。)

背景信息:

dns-sd命令行实用程序是一个测试和开发工具,每个人都可以访问Bonjour、mDNS (多播DNS)和DNS-SD (基于DNS的服务发现)。自从Bonjour出现以来,它是每一个OS系统的一部分。

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

  • 在您的AirPrint域中有一个.local.设备可用。
  • 它的名字是Airprint-abcd
  • 它可以通过IP地址192.168.111.111和端口631来实现。
  • 使用printers/abcd的打印队列名对其进行打印。
  • 它可以使用PDF和URF光栅文件。
  • 它不需要认证。
  • 它可以输出双工和彩色文档。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7310506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档