获取已安装打印机的列表

获取已安装打印机的列表

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

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

这是可行的,但很大程度上依赖于命令的特定输出格式lpstat -a。我担心将来(或现在在不同的发行版上)如果输出格式发生变化,它会破坏脚本。

那么,有没有一种方法可以比我正在使用的方法更安全地获取所有已安装打印机的名称?

答案1

我还需要一份打印机列表并且有同样的担忧。按照上述建议,我检查了 lpstat.c 的来源。我希望它是一个 suid,这样它就可以读取 "/etc/cups/printers.conf" 。我现在意识到它不这样做。

相反,它会向 cupsd 运行的 localhost:631 发送 HTTP POST 请求。请求的格式为 Content-Type: application/ipp 以及 requests-attributes auth-info-required 等内容。不更具体的原因是它使用非标准编码(请参阅:http://en.wikipedia.org/wiki/Internet_Printing_Protocol)...所以我怀疑实际上解析 lpstat -a 的输出实际上更干净。

答案2

计算机辅助系统是(部分)GPL 许可的,所以你可以直接获取的来源lpstat(1)并创建你自己的小程序(GPL许可)提供我的打印机列表-永远不会改变其输出数据方式的程序。

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

答案3

距离最初的问题已经过去了六年,我正在使用 Cups 2.2.7 并且“lpstat -a”仍然在第一个单词中返回打印机的名称。因此,我认为可以肯定地认为它将继续作为获取已安装打印机列表的正确方法。

相关内容