Mopria和DNS-SD

随着Android 4.4套件的出现Google现在本身支持某种forms的内置打印function。

这意味着现在很多打印机都支持Mopria。

就像IOS上的Airprint一样,Mopria只不过是用于检测打印机和IPP 2.0的多点传送DNS来实际打印。 当然,MDNS只有在手机或平板电脑与打印机位于同一子网时才能使用。

但是,在Airprint上,我们可以创build指向打印机的DNS-SDlogging,因此IOS设备会在不同的子网中列出设备。

也有与Mopria一样的方式吗?

要通过Bonjour发布适用于Android Mopria打印服务的打印机,请执行以下操作:

  • bonjour-service-type:_ipp._tcp
  • txt-record pdl:这些pdls中的一个或多个
    • 图像/ PWG光栅
    • 应用程序/ PCLM
    • 应用程序/ PDF格式
  • txt-record ty:必须存在,例如CUPS
  • txt-record rp:相应的IPP-URI-Path(cups-printer-name)

(代码极客可能会查看mopria / wfds的java源代码 )

概念validation:

使用dns-sd (Mac OS X)来宣传远程打印服务(在rasperry pi / cups上):

dns-sd -P "mopria" _ipp._tcp local 631 pi 192.168.2.118 \ rp=printers/colorlaser \ pdl=application/pdf \ ty=CUPS

我的Android设备现在可以打印PDF到我的CUPS打印机,即USB连接到我的树莓派。

问题1:

Mopria-Discovery无法为每个主机处理两台或更多台打印机。 就“硬件打印机”而言,假定每个IP /主机有一个“队列”是合理的。 就像CUPS这样的打印假冒者而言,你将面临严重的问题。

Mac OS X:只有一台共享打印机可以被Mopria打印服务发现和使用

问题2:

出于某种原因,我无法使用avahi为了使cup-ipp-service可以在Android的Mopria-Print-Service中看到。

这应该但不适用于我:

<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name>mopria</name> <service> <type>_ipp._tcp</type> <port>631</port> <txt-record>txtvers=1</txt-record> <txt-record>qtotal=1</txt-record> <txt-record>rp=printers/colorlaser</txt-record> <txt-record>pdl=application/pdf</txt-record> <txt-record>ty=CUPS</txt-record> </service> </service-group>

问题3:

当mDNS响应者太多时,Mopria会感到困惑。 对于avahitesting,您应该禁用CUPS的bonjour广告。

文件:/etc/cupsd.conf
浏览closures
#BrowseOrder允许,否认
#BrowseAllow全部
#BrowseLocalProtocols CUPS dnssd