CUPSにプリンターがあり、ドライバーの問題(HP 1010)が原因で時々一時停止します。
CUPSでプリンターを再開するために1時間に1回実行されるシェルスクリプトを記述したいと思います。しかし、数分間グーグルで検索した後、シェルコマンドラインからプリンターを再開する方法はわかりません。
Cupsenableコマンドがあります。
cupsenable printer
無効なプリンターを起動します(プリンター名を確認するには、lpstat -p
またはlpc status
)。
RootまたはSudoを介してコマンドを実行する必要がある場合があります。したがって、シェルスクリプトでプリンターを有効にする必要がある場合は、シェルをルートのcrontabに追加するか、sudoersファイルを編集する必要があります。
実行しているCUPSのバージョンに応じて、さまざまな方法で問題に取り組むことができます。
より多くのCUPSの最新バージョン(バージョン1.2以降)には、ここで役立つ組み込み機能が付属しています。 「ErrorPolicy」と呼ばれています。デフォルトの設定はcupsd.confで選択されており、cupsdが期待どおりに動作しない印刷キューを処理する方法を決定します。各キューに個別にタグ付けする3つの選択肢があります。
ErrorPolicy abort-job
ErrorPolicy retry-job
ErrorPolicy retry-this-job
ErrorPolicy stop-printer
説明:
abort-job
-このジョブを中止して、同じキューの次のジョブに進みます
retry-job
-N秒待ってからこのジョブを再試行します(Nはcupsd.confの "JobRetryInterval"ディレクティブによって決定されます)。
retry-this-job
-現在のジョブをすぐに無期限に再試行します。
stop-printer
-現在の印刷キューを停止し、将来の印刷のためにジョブを保持します。これは、上記の代替方法に従って別の方法で定義しない限り、デフォルトのままです。これは、デフォルトであり、CUPSの以前のバージョンのすべてのキュー(可能な限り、質問に従って削除したいキュー)でのみ可能な動作です。
さらに、個々のErrorPoliciesを各個別の印刷キューに設定できます。この設定は、printers.confファイルに記録されます。 (lpadmin -p printername -o printer-error-policy=retry-this-job
を使用してコマンドラインから設定します)。
CUPSの古いバージョンの場合CUPSのbeh
を確認することをお勧めします BackEnd Handler 。 beh
は、任意のCUPSバックエンドに適用できるラッパーです。
現在、印刷キューがsocket://192.168.1.111:9100
のバックエンドを定義していて、希望しない動作をしていると想定します(ネットワーク接続の問題により、cupsdによって無効にされる場合があります)。 beh
では、次のようにバックエンドを再定義します。
beh:/0/20/120/socket://192.168.1.111:9100
これにより、ジョブが2分間隔で20回再試行されます。成功した。またはこれを行うことができます:
beh:/1/3/5/socket://192.168.1.111:9100
これにより、試行の間に5秒の遅延が生じ、ジョブが3回再試行されます。ジョブがまだ失敗する場合は、破棄されますが、キューは無効になりません。 cupsdに無期限にデバイスへの接続を試行させたいですか?いいでしょう、これを試してください:
beh:/1/0/30/socket://192.168.1.111:9100
プリンターが戻るまで無限に試行します。接続試行の間隔は30秒です。プリンタの電源がオフになっているときにジョブが失われることはありません。プリンタの電源を切るだけで、意図的に印刷を遅らせることができます。デスクトッププリンターやホームユーザーに適した構成です。
全体的に、CUPSキューが不規則にダウンするのを再開するために、bashスクリプト、cronジョブ、lpadmin
、cupsenable
またはSudo
をいじる必要はありません。
lpadmin
で使用される-E
プリンターオプションは、これを実行する必要があります。
lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)
以下のコメントで指摘されているように、lpadmin
オプションではなく、ここでのプリンターオプションであるため、プリンター名の後に-E
を必ず追加してください。 man lpadmin
ページからの次の抜粋に注意してください。
-d、-p、または-xオプションの前に指定すると、-Eオプションはサーバーへの接続時に強制的に暗号化します。
問題が再発する場合は、lpadmin
コマンドを使用してCRONジョブを作成できます。時間ごとのcron
エントリ:
0 * * * * /usr/sbin/lpadmin -p your_printer -E
次のコマンドを実行して追加できます。
Sudo crontab -e
私のプリンターはHP CP1215でもあり、エラーが発生しました: Printer Paused-"/ usr/lib/cups/backend/hp failed"
cups
とavahi-daemon
の両方を再起動し、lpstat -p
でプリンターを識別し、cupsenable
で有効にした後、もう一度印刷することができました。 cups
のみを再起動して有効にしても、うまくいきませんでした。
また、デフォルトのポリシーを再試行ジョブに変更し、最終的にcronjobで将来エラーを回避することになりました。
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
ここで、poissa käytöstä
は、保守のためのフィンランド語のローカリゼーションテキストであり、 "out of order"であり、HP_Tuloostin
は、プリンターの名前です。
私の経験では、デフォルトポリシーと現在のプリンターポリシーの両方を再試行ジョブとして構成する必要があります。デフォルトのポリシーは、新しいプリンタをインストールするときに取得するポリシーです。
ls /etc/cups/ppd/ |cut -d "." -f1 |grep -v VMware |xargs -i cupsenable {}
これは、インストールされたプリンターを表すすべてのppdファイルをリストし、ppd拡張子を切り取り、多くのVMwareサーバーに含まれているVMware ppdを無視します(これが必要ない場合は、|grep -v VMware
)、および他の名前をxargs
に渡し、すべてのプリンターの一時停止を解除します。
Cronジョブはこれをうまく機能させるはずです。
GUIがプリンターを再開するためにログインを必要とするという事実に問題がある場合、別の解決策は、ログインせずにGUIを介してプリンターを再開できるようにすることです。これを行うには、カップをシャットダウンし、この行を編集しますSudo vi /etc/cups/cupsd.conf
:
<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel- Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
Resume-Printer
ディレクティブを削除してから、cupsを再起動します。ディレクティブが複数の<Limit>
セクションにある場合は、関連する<Policy>
セクションから削除するか、すべてから削除できます。これで、GUIからログインせずにプリンターを再開できるはずです。私はこれを macworld で見ましたが、すべてのcupsインストールに適用されます。
上記のJanneからの回答。この:
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
...は、プリンタの状態に関係なく、CUPSを毎分再起動します。これは、cups restart句が&&とペアになっていないためです。
これは、障害状態の検出時にCUPSの再起動を条件付きにするために使用した短いBASHスクリプトです。
#!/bin/bash
DATE=$(date)
DS40=$(/usr/bin/lpstat -p |grep "DS40" |grep "disabled")
if [ ! -z "${DS40}" ]; then
echo "${DATE} - Restarted avahi and cups" >> /var/log/cups/restart-cron-tim.log
/usr/sbin/service avahi-daemon restart
/usr/sbin/service cups restart
/usr/sbin/cupsenable Dai_Nippon_Printing_DS40
fi
「DS40」をステータスを探しているプリンタに置き換え、「disabled」を言語のlpstat -p出力に置き換えます。
ここで同じCUPSナンセンスを処理しなければなりませんでした...私にとっての解決策は、n分ごとに実行されるsystemdスクリプトでした。
#!/bin/sh
for printer in $(lpstat -v | Perl -pe 's/device for ([A-Za-z0-9_]+):.*/\1/g')
do
echo "Forcely enabling printer: $printer"
# Enable:-E PrinterId:-p
/usr/bin/lpadmin -E -p "$printer"
done
[Unit]
Description = Forcely enable printer occassionally. Why CUPS disables printers in the first place has yet to be determined.
[Service]
Type = simple
ExecStart = /usr/local/cups/enable_cups_printers.sh
[Install]
WantedBy = multi-user.wants
[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.
[Timer]
OnBootSec=15min
OnUnitActiveSec=300
[Install]
WantedBy = timers.target
Cupsd.confを次の行で更新しました:
ErrorPolicy中止ジョブ
次に、/ etc/init.d/cups restartを使用してcupsdを再起動しました
しかし、printers.confファイルを見ると、ErrorPolicyが更新されていません。 cupsのドキュメントによると、「ErrorPolicy abort-job」という行がプリンターセクションに表示されている必要があります。
また、lpadminを使用してErrorPolicyを更新しました。 ErrorPolicyは何も変更されません。また、printers.confファイルには反映されません。
何が欠けていますか? cupsdがエラー時にジョブを実際に中止することを確認するにはどうすればよいですか?
ここでのソリューションの多くは私にとってはうまくいきませんでした(例:Sudo cupsenableとlpadmin -E)。
Debian8.6、Cinnamon2.2.16(Linux)を使用している場合は、GUIスタートメニューから次の手順を実行します。
Click Administration | Print Settings,
Then select your stalled CUPS printer,
Click Unlock (and give it your admin password),
Click Server | Settings,
In this click the blue "Problems?" link.
Ubuntu16.04の場合:
Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link.
これにより、印刷のトラブルシューティングツールが開きます。次に何をすべきかを教えてくれます。
おそらく、印刷設定でCUPSプリンターのEnabledプロパティを確認する必要があります。 (最初にロックを解除する必要があります)。
最後に、これが再び発生しないようにするには、上記のプリンター設定(プロパティ|ポリシーの下)でプリンターの「ポリシー」を「再試行ジョブ」に変更します。
私のために修正しました!
この問題の原因:CUPSプリンターに印刷するときに私のwifiプリンターの電源が切れており、私のポリシーが「プリンターの停止」である場合、「できませんでした」というメッセージが表示されますt印刷し、プリンタを無効にします([有効]をオフにします)。ポリシーが「ジョブを再試行する」に設定されている場合のみ、[有効]のチェックを解除しません。プリンタの電源を入れてから数分後に、ジョブの印刷が始まります。
(私の other これについて投稿してください。)
lpadmin -p p-go-avtom2 -v p-go-avtom2 -E