在我的网络上,我想使用Linux CUPS打印系统对IPPEverywhere使用无人驱动打印。
我有一些网络打印机,它确实支持无驱动打印与IPP,只有非常小。一个不打印一些pdf文件,另一个不打印一个以上的副本,等等。但他们都很好地使用它的原生PPD打印机驱动程序打印。因此,我想在我的网络上显示一个打印服务器,它使用自己的打印机驱动程序为网络打印机提供服务,但在网络上显示为(虚拟的?)为每台网络打印机提供全功率IPP设备。
这通常意味着打印服务器正在将无驱动的IPP打印命令从网络客户端“转换”到打印机遗留的打印命令,因此我在网络上只有IPPEverywhere打印队列。默认情况下,CUPS创建一个本地打印队列,用于使用IPPEverywhere或使用打印机遗留驱动程序使用其PPD文件为打印机提供服务。
┏━━━━━━━━━━━━━┓
┃ localhost ┃
┃ ┌───────┐ ┃ ┏━━━━━━━━━┓
┃ │ Queue │═╋════════════════┫ Printer ┃
┃ └───────┘ ┃ ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛
现在的想法是拥有一个像网络上没有驱动的打印机那样的打印服务器:
┏━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━┓
┃ localhost ┃ ┃ printserver ┃
┃ ┌───────┐ ┃ IPPEverywhere ┃ ┌───────┐ ┃ legacy PPD driver ┏━━━━━━━━━┓
┃ │ Queue │═╋════════════════┫ │ Queue │═╋═════════════════════┫ Printer ┃
┃ └───────┘ ┃ ┃ └───────┘ ┃ ┗━━━━━━━━━┛
┗━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━┛
将打印机与其遗留驱动程序连接到打印服务器是没有问题的。这是旧的方法(但将成为反对和删除上游CUPS版本)。
但是我如何在网络上找到打印服务器,这样我就可以连接到它,例如我的安卓智能手机和打印,使用IPPEverywhere?
发布于 2021-01-04 23:12:51
当时,我使用的部分解决方案只能用于网络上的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 ...
参考资料:
https://unix.stackexchange.com/questions/626211
复制相似问题