CUPS 无驱动打印服务器作为具有旧版 PPD 打印机驱动程序的打印机的代理

CUPS 无驱动打印服务器作为具有旧版 PPD 打印机驱动程序的打印机的代理

在我的网络上,我想使用无驱动打印无处不在的IPP使用Linux计算机辅助系统打印系统。

我有一些网络打印机,它支持 IPP 无驱动打印,但有很多问题。一种不打印某些 pdf 文件,另一种不打印超过一份副本,依此类推。但它们都使用其原生 PPD 打印机驱动程序打印得非常好。因此,我想在网络上提供一个打印服务器,该服务器通过自己的打印机驱动程序为网络打印机提供服务,但在网络上显示为每个网络打印机的(虚拟?)全功能 IPP 设备。

这通常意味着打印服务器正在将无驱动程序 IPP 打印命令从网络客户端“转换”为打印机传统打印命令,因此网络上只有 IPPEverywhere 打印队列。默认情况下,CUPS 创建一个本地打印队列,为无驱动打印机提供服务无处不在的IPP或使用其 PPD 文件使用打印机的旧驱动程序。

┏━━━━━━━━━━━━━┓
┃ localhost   ┃
┃   ┌───────┐ ┃                ┏━━━━━━━━━┓
┃   │ Queue │═╋════════════════┫ Printer ┃
┃   └───────┘ ┃                ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛

现在的想法是拥有一个打印服务器,其行为就像网络上的无驱动打印机:

┏━━━━━━━━━━━━━┓                ┏━━━━━━━━━━━━━┓
┃ localhost   ┃                ┃ printserver ┃
┃   ┌───────┐ ┃ IPPEverywhere  ┃   ┌───────┐ ┃  legacy PPD driver  ┏━━━━━━━━━┓
┃   │ Queue │═╋════════════════┫   │ Queue │═╋═════════════════════┫ Printer ┃
┃   └───────┘ ┃                ┃   └───────┘ ┃                     ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛                ┗━━━━━━━━━━━━━┛

使用旧版驱动程序将打印机连接到打印服务器没有问题。这是旧方法(但将被弃用并在上游 CUPS 版本中删除)。

但是我如何在网络上找到打印服务器,以便我可以使用 Android 智能手机连接到它并使用 IPPEverywhere 进行打印?

答案1

有时,我使用的部分解决方案只能与网络上的 Linux 设备一起使用,但不能作为移动设备的通用打印解决方案。但为了将其记录下来,我将分享它。也许社区有一些指示或答案,以便我们得到最终的解决方案。

我假设打印机已成功连接,您可以从打印服务器打印到它:

printserver ~$ lp -E -d myprinter /usr/share/cups/data/testprint

我用打印机共享可以直接访问打印服务器上的队列。为此,我必须将其配置为默认服务器,而不是localhost本地打印队列。

┏━━━━━━━━━━━━━┓                ┏━━━━━━━━━━━━━┓
┃ localhost   ┃                ┃ printserver ┃
┃             ┃ IPPEverywhere  ┃   ┌───────┐ ┃  legacy PPD driver  ┏━━━━━━━━━━━┓
┃             ┃════════════════╋═══│ Queue │═╋═════════════════════┫ myprinter ┃
┃             ┃                ┃   └───────┘ ┃                     ┗━━━━━━━━━━━┛
┗━━━━━━━━━━━━━┛                ┗━━━━━━━━━━━━━┛

在安装了 CUPS 的打印服务器上使用 Debian Buster,您必须启用共享:

printserver ~$ sudo cupsctl -E --share-printers
printserver ~$ sudo cupsctl -E   # check settings

另外,对于安装了 CUPS 的设备上的 Debian,请在以下位置设置默认打印服务器/etc/cups/client.conf

client ~$ sudo bash -c 'echo "ServerName printserver" >> /etc/cups/client.conf'

这就是我们访问打印机所需要做的全部事情。检查其状态和选项:

client ~$ lpstat -E -t
client ~$ lpoptions -E
client ~$ lpoptions -E -l

使用最后一个命令,您将发现打印机的特殊选项,这些选项不是通用的lp,例如BRMonoColor我的彩色打印机。此示例将以灰色而不是默认颜色打印双面纸的两份副本:

client ~$ lp -E -d myprinter -n 2 -o fit-to-page -o collate=true -o sides=two-sided-long-edge -o BRMonoColor=Mono ./two-pages.pdf

例如,如果您有本地连接到客户端的 USB 打印机,则可能会出现问题。您不会在 上看到它的队列localhost。在这种情况下,您始终可以使用环境变量指定打印服务器CUPS_SERVER

client ~$ CUPS_SERVER=localhost lpstat -E -t
client ~$ CUPS_SERVER=localhost lp -E ...

参考:

相关内容