Mopria 和 DNS-SD

Mopria 和 DNS-SD

随着 Android 4.4 Kit 的问世,Google 现在原生支持某种形式的内置打印功能。

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

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

但是,在 Airprint 上我们可以创建指向打印机的 DNS-SD 记录,从而让 IOS 设备列出不同子网中的设备。

Mopria 也有办法实现这个功能吗?

答案1

发布适用于 Android 的打印机Mopria 打印服务通过 Bonjour 使用:

  • bonjour 服务类型:_ipp._tcp
  • txt-record pdl:这些 pdl 中的一个或多个
    • 图像/pwg-光栅
    • 应用程序/PCLm
    • 应用程序/pdf
  • txt-record ty:必须存在,例如CUPS
  • txt-record rp:适当的 IPP-URI 路径(cups-printer-name)

(代码极客可能会研究mopria/wfds java 源代码

概念证明:

使用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-Print-Service 发现和使用

问题 2:

由于某种原因,我无法使用 avahi 来使 cups-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 会感到困惑。对于 Avahi 测试,您应该禁用 CUPS 的 bonjour 广告。

文件:/etc/cupsd.conf

Browsing Off  
#BrowseOrder allow,deny  
#BrowseAllow all  
#BrowseLocalProtocols CUPS dnssd

相关内容