使用Debian系统将文件打印到支持AirPrint的打印机上
总结
长期以来,使用Linux系统打印需要支持PostScript或ESC/P等页面描述语言的打印机。但是,由于苹果开发的AirPrint标准在iPhone上的推广,这种情况可能会有重大改变。
AirPrint由以下三个组成部分组成。
Bonjour プロトコルでプリンタを発見する。
Apple Raster Format (image/urf) で印刷データを用意する。
Internet Printing Protocol (IPP) で印刷データを送信する。
在中国的本地化,可以将以下内容改写为:由于除了Apple Raster Format之外的组件都有标准化,因此它在Linux上也很容易支持。作为AirPrint的类似规范,IPP Everywhere存在,但与AirPrint不同的是,打印数据的格式不同。
Bonjour プロトコルでプリンタを発見する。
PWG Raster Format (image/pwg-raster) で印刷データを用意する。
Internet Printing Protocol (IPP) で印刷データを送信する。
因此,基本上只需要在Debian上进行设置,就可以使用IPP Everywhere,并且可以使用AirPrint兼容打印机。
设置步骤
首先,安装两个软件包cups-browsed和avahi-daemon。
$ sudo apt install cups-browsed avahi-daemon
avahi-daemon是负责Bonjour协议的守护进程,而cups-browsed则是通过Bonjour协议发现的打印机通知和添加到cups的守护进程。
然后,在/etc/cups/cups-browsed.conf中添加以下设置。
CreateIPPPrinterQueues All
只有这些!如果被认可了,你应该可以通过lpstat命令来确认,如下所示。
$ lpstat -tv
Brother_DCP_J973N のデバイス: ipp://BRNXXXXXXXXXXXXX.local:631/ipp/print
在我的环境中,我可以使用Brother DCP-J973N打印。
故障排除
很遗憾,大多数情况下都需要故障排除。
你好的故障排除
要确认Bonjour是否找到打印机,请按照以下方式进行操作。
$ sudo apt install avahi-utils
$ avahi-browse -art
+ wlp2s0 IPv6 Brother DCP-J973N Internet Printer local
+ wlp2s0 IPv4 Brother DCP-J973N Internet Printer local
(以下略)
如果在avahi-browse命令中找不到打印机,那就要怀疑网络的运作了。在我的环境中,由于设置了拒绝来自外部的通信,所以Bonjour无法运行。所以,我在/etc/iptables/rules.v4中写下以下内容,以允许与Bonjour使用的5353端口的通信。
# Generated by xtables-save v1.8.2 on Sat Jul 20 18:13:39 2019
*filter
:INPUT ACCEPT [256:44171]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [295:38238]
-A INPUT -p tcp -m tcp --dport 5353 -j ACCEPT
-A INPUT -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -i enp+ -m state --state INVALID,NEW -j DROP
-A INPUT -i wlp+ -m state --state INVALID,NEW -j DROP
-A FORWARD -i enp+ -m state --state INVALID,NEW -j DROP
-A FORWARD -i wlp+ -m state --state INVALID,NEW -j DROP
COMMIT
# Completed on Sat Jul 20 18:13:39 2019
杯子浏览的故障排除
将以下设置添加到/etc/cups/cups-browsed.conf文件中。
LogDir /var/log/cups
DebugLogging file
当然,现在/cups/cups-browsed_log中会留下操作日志,我们需要仔细研究其内容。根据我的经验,通过动作日志我发现了指定CreateIPPPrinterQueues指令的错误。