所以我想到要将iOS服务作为打印机发布(宣布服务),我使用NSNetService并将类型设置为_ipp._tcp
。
但为了被认可为AirPrint打印机,要求包括:
_universal
公告中出现_ipp
子类型才会考虑列出打印机。所以我试图弄清楚如何发布子类型并在NSNetService下发布我无法做到的TXT记录。有人有什么想法吗?
答案 0 :(得分:1)
由于到目前为止您甚至没有显示代码的起点或存根,所以这里有一个不同的提示:您可以在本地LAN / WLAN中模拟有效的,有效的AirPrint服务公告,这将允许您的iOS客户端成功打印到现有打印机(AirPrint与否)。
要求:使用OS X的Mac。
一旦你完成这项工作,你现在可以使用Wireshark或tcpdump
这样的东西来捕获电线或空中的包裹并保存和分析它们。
然后开始编写您自己的应用程序,并使其发出与模拟相同的包。
以下已知适用于OS X Yosemite(10.10.x)。
假设,...
mymac
,192.168.111.111
,abcd
的共享打印机( NOT 需要是AirPrint吗? - 能够!)和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系统的一部分。
-P
的 dns-sd
参数将生成一个Bonjour"代理公告"到您的本地LAN / WLAN。该公告将告知潜在的AirPrint客户以下信息:
.local.
域中有一个AirPrint设备。Airprint-abcd
。192.168.111.111
和端口631
来访问。printers/abcd
的打印队列名称进行打印。有关此实用程序的详细信息,请参阅 man dns-sd
。有关更多背景信息,请参阅dns-sd.org和these other answers。
答案 1 :(得分:0)
This link告诉您如何配置avahi以允许访问您的打印机。
答案 2 :(得分:0)