获取已安装打印机的列表


8

在脚本内部,我发送了一个特定的文件,以使用该lpr命令在用户选择的打印机上进行打印。

用户从中选择要使用的打印机列表,lpstat -a然后使用该命令,然后将第一个空格之前的所有内容都视为打印机的名称。

这可以工作,但是严重依赖于lpstat -a命令的特定输出格式。恐怕将来(或现在使用不同的发行版)输出格式更改时,它将破坏脚本。

因此,是否有一种方法可以比我使用的打印机更安全的方式获取所有已安装打印机的名称?

Answers:


1

CUPS(部分)是GPL许可的,因此您只需获取(1)的来源lpstat并创建自己的小打印机(GPL许可)的“我的打印机清单”程序,该程序就永远不会改变其输出数据的方式。

(1)在中cups-XX/cups/systemv/lpstat.c,我只是不明白那里的版本号。


这是一个很好的解决方案,但是不幸的是,“脚本”实际上是一个Java applet,我无法更改目标系统或在其上安装新的东西。它与以下问题有关:stackoverflow.com/questions/13743738/…我认为使用lpr代替是一个好主意
Enoon 2012年

嗯,有CUPS4J,它可能是也可能不是一个选项...它可以“从CUPS服务器中获取打印机对象,该打印机可用于打印和监视作业”
sr_

这似乎是一个有效的解决方案,谢谢!
Enoon 2012年

3

我还需要打印机列表,并且有同样的顾虑。根据以上建议,我检查了lpstat.c的源代码。我期望它是一个suid,因此它可以显示为“ /etc/cups/printers.conf”。我现在意识到它不会这样做。

而是将HTTP POST请求发送到运行cupsd的localhost:631。该请求的形式为Content-Type:application / ipp以及诸如request-attributes auth-info-required之类的内容。不更具体的原因是它使用了非标准编码(请参阅:http : //en.wikipedia.org/wiki/Internet_Printing_Protocol)...因此我怀疑实际上解析lpstat -a的输出实际上是更干净的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.