"lpadmin -m"で使用する既存のプリンタのモデル/ドライバ/ppdを取得するコマンドはありますか?

"lpadmin -m"で使用する既存のプリンタのモデル/ドライバ/ppdを取得するコマンドはありますか?

あるサーバーのCUPSが他のCUPSサーバーと同じプリンターセットを持つように設定しています。私は主にCLIを使用していますが、プリンタのリストが多すぎてこれがどれほど簡単になるのか疑問に思います。コマンドに関するドキュメントを見ると、次のようにプリンタを追加できることがわかりました。

lpadmin -p $printer_name -E -v $printer_location -m $printer_model

以下を使用して$printer_namesとsを取得できます$printer_location

lpstat -v

$printer_modelしかし、各プリンタを知らせるコマンドが見つからないようです。私は人間が読めるモデルを手に入れるhttp://localhost:631ために傷を付け、それから一致するものを手にcurl入れたいlpinfo -mlpadmin -mですが、もっと伝統的なものが欲しいのです。

答え1

/etc/cups/ppd/ppdファイルと(保護された)ファイルからいくつかのコンテンツをgrepできますが、/etc/cups/printers.confcupライブラリにはpycups情報を取得するためにサーバーと通信できるPythonインターフェースがあります。例えば、

#!/usr/bin/python3
import cups
conn = cups.Connection()
printers = conn.getPrinters()
for printer in printers:
    p = printers[printer]
    print(printer, p['printer-make-and-model'])

返されるプリンタ辞書には、次の項目が含まれていますprinter-make-and-model printer-is-shared printer-type device-uri printer-location printer-uri-supported printer-state-message printer-info printer-state-reasons printer-statepycupsrpmパッケージで見つかりましたpython3-cups

答え2

インストールされているプリンタ用のドライバをインポートする一般的なコマンドはありません。

以下は、mihのライブラリの使用提案に従ってlpadmin -m許可されているppd仕様(相対パスおよび/またはURI)を一覧表示するdrv:///ソリューションです。gutenprint*://

# hpcups and gutenprint put their version in the model names. That means
# that if you install a printer then update the drivers, the model of the
# printer won't match with those available listed by `lpinfo -m`. So, we'll
# strip the version.
strip_versions() {
  sed -E 's/(, hpcups|- CUPS\+Gutenprint).*//'
}

# Using @ as a custom field delimiter since model names have whitespace.
# `join` is to match the printers' model names with those of the available
# drivers.
join -t@ -j2 -o 1.1,2.1 \
  <(
    ruby -r cupsffi -e '
      CupsPrinter.get_all_printer_attrs.each do |name, attrs|
        puts "#{name}@#{attrs["printer-make-and-model"]}"
      end
    ' | strip_versions | sort -t@ -k2
  ) \
  <(lpinfo -m | sed 's/ /@/' | strip_versions | sort -t@ -k2) |
# We may get multiple ppd specs per printer. For a few printers, I'm
# getting a relative path from the system model directory and either a
# drv:/// uri or a gutenprint.5.3:// URI. We'll filter out all but the
# first per printer.
awk -F@ '!a[$1]++' |
# Change the @ column delimiter for whitespace and align columns.
column -ts@ 

cupsffiマウント可能なルビージュエリーですgem install cupsffi

関連情報