定期的に印刷するスクリプト

定期的に印刷するスクリプト

私はネットワークに接続されたインクジェットプリンタ(HP all-in-one photosmart 5510)を持っており、現在インクが乾かないようにプリンタに小さなジョブを送るように定期的に知らせる簡単なスクリプトを持っています。私はUbuntuを使用しており、プリンタはプリンタGUIからネットワークプリンタとして追加されました。

また、私のネットワークには常にオンになっている小さなLinuxボックスがあります。

Bashスクリプトから画像(jpg)を印刷する良い方法はありますか?どういうわけかプリンタでジョブ履歴を照会することもできます(たとえば、最後のジョブが印刷された時期を確認し、日より古い場合は印刷用に文書を送信します)。

ベストアンサー1

PDFはしばらくの標準印刷形式でした。 PDFファイルを一度に準備してください。あなたはそれを使用することができますconvertコマンドは以下から来ます。イメージマジシャンスイート(どちらにしてもオリジナルまたはグラフィックマジシャン変形)。

convert foo.jpg /path/to/foo.pdf

印刷ログインが見つかります/var/log/cups/page_log。管理者アカウントのみを読むことができます。以前のログは、次の名前のファイル/var/log/cups/page_log.0にあります。/var/log/cups/page_log.1.gzログエントリ次のようになります。

printername 1234 julumme [date] 42 1 - localhost filename.pdf

ここでは、プリンタ名と日付のみを考慮します。ログエントリは時系列でソートされるため、目的のプリンタに対応する最後のエントリを取得する必要があります。以下は、これを実行し、日付を現在の日付と比較して、過去7日以内に印刷された内容がない場合にファイルを印刷するシェルコードの断片です。photosmartプリンタに指定した名前に変更してください。警告:テストされていないコードです。

#!/bin/sh
printer_name="photosmart"
last_date=$(
  { zcat /var/log/page_log.1.gz;
    cat /var/log/page_log.0 /var/log/page_log; } 2>/dev/null |
  awk '
      $1 == "photosmart" {sub(/\].*/, ""); sub(/.*\[/, ""); last_date = $0}
      END {print last_date}
  ')
if [ -n "$last_date" ]; then
  seconds_since_last_printing=$(($(date -d "$last_date" +%s) - $(date +%s)))
  if [ $seconds_since_last_printing -lt $((7*24*60*60)) ]; then
    # There was a recent print job
    exit
  fi
fi
lp -d "$printer_name" /path/to/foo.pdf

毎日(または頻度の低い)クローンジョブでこのスクリプトを実行します。 CUPS構成を変更しない限り、通常のユーザーはログファイルを読み取ることができないため、rootとして実行する必要があります。

白黒およびカラージョブを印刷するために異なるプリンタエイリアスを使用している場合は、ログに別のエイリアスが表示されます。ただし、オプションを明示的に渡すと、カラーエイリアスを使用して白黒ジョブを印刷でき、その逆も可能であるため、これは信頼できるテストではありません。

おすすめ記事