コマンドラインからCUPSプリンタを再開するには?
CUPSにプリンタがあるのですが、ドライバの問題(HP 1010)で時々一時停止になってしまいます。
CUPSのプリンタを再開するために、1時間に1回実行されるシェルスクリプトを書きたいと思っています。しかし、シェルコマンドラインからプリンタを再開させる方法が、数分間ググってみてもさっぱりわからない。
私のプリンターはHP CP1215ですが、これもエラーが出ていました。Printer Paused - “/usr/lib/cups/backend/hp failed” ](https://bbs.archlinux.org/viewtopic.php?id=85454)
cups
とavahi-daemon
の両方を再起動して、lpstat -p
でプリンタを識別し、cupsenable
で有効化すると、再び印刷できました。cups
とpoissa käytöstä
の両方を再起動し、HP_Tuloostin
でプリンタを識別して0x6&で有効化すると、再び印刷できました。
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
ここで0x6&はフィンランド語のローカライズテキストでメンテナンスの “out of order"、0x6&はプリンタ名です。
私の経験では、デフォルトポリシーと現在のプリンタポリシーの両方を再試行ジョブに設定する必要があります。デフォルトポリシーは、新しいプリンタをインストールするときに取得するポリシーに過ぎません。
問題が 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>
セクションから削除するか、すべての 0x6& セクションから削除してください。これでGUIからログインせずにプリンタを再開できるようになりました。これは macworld で見ましたが、すべての cups インストールに適用されます。
上のJanneさんの回答、例えばこれ。
* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin
…を実行すると、どのプリンタがどのような状態にあるかに関わらず、1分ごとに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に置き換えてください。
ここにある解決策の多くは、私にはうまくいきませんでした (例: sudo cupsenable や lpadmin -E)。
Debian 8.6, Cinnamon 2.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.
Ubuntu 16.04の場合:
Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link.
これで印刷トラブルシューターが開きます。次に何をすべきかを教えてくれます。
0x1&
おそらく、印刷設定でCUPSプリンタのEnabledプロパティをチェックする必要があるでしょう。(最初にロックを解除する必要があります)。
最後に、この問題が再発しないようにするために、上記のプリンタ設定でプリンタの「ポリシー」を「リトライジョブ」に変更してください(「プロパティ」→「ポリシー」)。
これで解決しました。
この問題の原因: CUPS PRINTERに印刷するときにwifiプリンターの電源が落ちていて、ポリシーが「プリンターを停止」になっていると、印刷できなかったというメッセージが出て、プリンターが無効になっています(有効はチェックを外しています)。ポリシーが「ジョブを再試行する」に設定されている場合のみ、Enabledのチェックが外されません。プリンタの電源が回復してから数分後にジョブが印刷されるようになります。
(これについては私の 他の の記事を参照してください)
ここでも同じようなCUPSの無意味な処理をしなければならなかった…。解決策は、n分毎に実行されるsystemdスクリプトだった。
#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*//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