web-dev-qa-db-ja.com

インストールされているプリンターのリストを取得する

スクリプト内で、ユーザーが選択したプリンターでlprコマンドを使用して印刷する特定のファイルを送信します。

ユーザーが使用するプリンターを選択するプリンターの一覧で、lpstat -aコマンドを使用して、最初のスペースの前のすべてをプリンターの名前と見なしています。

これは機能しますが、lpstat -aコマンドの特定の出力形式に大きく依存しています。将来(または現在、別のディストリビューション)で、出力形式が変更された場合、スクリプトが壊れると思います。

それで、私が使用しているものよりも安全な方法で、インストールされているすべてのプリンターの名前を取得する方法はありますか?

8
Enoon

[〜#〜] cups [〜#〜] は(部分的に)GPLライセンスであるため、取得できるのは lpstatのソース(1) データを出力する方法を決して変更しない独自の小さな(GPLライセンス)give-my-list-of-printers-programを作成します。

(1)cups-XX/cups/systemv/lpstat.c、バージョン番号がわかりません。

1
sr_

プリンターのリストも必要でしたが、同じ懸念がありました。上記の提案に従って、lpstat.cのソースを確認しました。 "/etc/cups/printers.conf"を読み取れるように、それがsuidであると期待していました。私は今それがこれを行わないことに気づきました。

代わりに、HTTP POST要求をcupsdが実行されるlocalhost:631に送信します。要求の形式はContent-Type:application/ippで、requested-attributes auth-info-requiredなどです。より具体的にならない理由は、非標準のエンコーディングを使用しているためです(参照: http://en.wikipedia.org/wiki/Internet_Printing_Protocol )...したがって、実際に出力を解析しているのではないかと思いますlpstat -aのほうが実際にはクリーンです。

3
GraemeV