
隨著 Android 4.4 Kit 的出現,Google 現在原生支援某種形式的內建列印功能。
這意味著許多印表機現在都支援 Mopria。
就像 IOS 上的 Airprint 一樣,Mopria 只不過是用來偵測印表機和 IPP 2.0 進行實際列印的多播 DNS。當然,MDNS 僅當手機或平板電腦與印表機位於同一子網路時才起作用。
但是,在 Airprint 上,我們可以建立指向印表機的 DNS-SD 記錄,因此可以讓 IOS 設備列出不同子網路中的裝置。
Mopria 也有辦法做到這一點嗎?
答案1
宣布推出適用於 Android 的印表機Mopria 列印服務透過 Bonjour 使用:
- bonjour 服務類型:_ipp._tcp
- txt-record pdl:這些 pdl 中的一個或多個
- 影像/pwg-光柵
- 應用/PCLm
- 申請/pdf
- txt記錄ty:必須存在,例如
CUPS
- txt-記錄 rp:對應的 IPP-URI-路徑(cups-印表機-名稱)
(程式碼極客可能會研究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 連接到我的樹莓派。
問題一:
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