時々、ラップトップで作業しているときに、後で印刷するためにいくつかのドキュメントをキューに入れたいと思うことがあります。
ただし、実際のプリンタキューはこのために設計されていません。彼らはすぐにドキュメントを印刷しようとし、私がネットワークに接続するとすぐにすべてが突然印刷を開始しますが、これは通常私がやりたいことではありません。さらに、キュー内のドキュメントの順序を変更したい場合がありますが、これは特に簡単ではありません。特に、一部のドキュメントが印刷を開始した後です。
また、印刷が失敗する場合があります。プリンターの用紙またはトナーがなくなったため、ドキュメントを別のプリンターに再印刷したい。これは例えば簡単ではありません。 CUPS
またはsystem-config-printer
;通常は、戻ってPDFリーダーを再度開き、最初からやり直す必要があります。私が知っているPDFリーダーはどれも、後で印刷するドキュメントのリストを保持することはできませんが、これは私が知らないPDFリーダーの隠された機能かもしれません。
とにかく、ここで私ができることをしたいです:
シェルスクリプト、lpr
、およびテキストファイル内のパスのリストを使用して何かをハッキングできることは知っていますが、この問題は既により堅牢でエレガントな方法で既に解決されていると感じることはできません。
ボーナスポイント:
助言がありますか?
私がしていることは次のとおりです---それはあなたが尋ねたほど汎用的ではありませんが、ほとんど問題ありません。すべてのプリンターを定義してから、次の2つのスクリプトが必要です。
stop_printers
:
#!/bin/bash -f
#
allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
for i in ${allp[@]}; do
echo -n Printer $i:
cupsdisable "$i"
echo " " paused.
done
start_printers
:
#!/bin/bash -f
#
allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
for i in ${allp[@]}; do
echo -n Printer $i:
cupsenable "$i"
echo " " restarted.
done
それらをパス(たとえば~/bin
)に入れ、chmod +x
で実行可能にする必要があります。 警告:名前にスペースが含まれているプリンターはありません。その場合、スクリプトはテストされません(ただし、シェルスクリプトの第一人者がフラッシュ内のスクリプトを修正すると確信しています;-)...)
これで、次を発行できます。
[romano:~] % stop_printers
Printer PDF: paused.
Printer ColorDEA: paused.
Printer Deskjet_6980: paused.
Printer fotocop5: paused.
そして、どこからでも印刷でき、プリンターは一時停止します。
あなたのキューを見ることができます:
[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank Owner Job File(s) Total Size
1st romano 439 Bones_3+RG.pdf — Flesh depth 125952 bytes
(知る限り、印刷キューは再起動後も持続します)。そして、印刷したい場合:
[romano:~] % start_printers
Printer PDF: restarted.
Printer ColorDEA: restarted.
Printer Deskjet_6980: restarted.
Printer fotocop5: restarted.
lprm
を使用すると、必要に応じてジョブを削除できます。 lpr
コマンドライン経由でドキュメントをキューに登録します。異なる「リスト」が必要な場合、同じプリンターを異なる名前で何度も定義することを禁止しません。
各プリンターを手動で再開することもできます。プロンプトからcupsenable <printername>
を実行するだけです。
このソリューションでできることはないと思いますが、事後に印刷オプションを変更することです---このためにドキュメントをデキューし、再エンキューする必要があります。
私のパッケージ(恥知らずのプラグ)、 duplexpr はあなたが望むもののいくつかを行い、あなた自身のバージョンをロールするのに役立つかもしれないbash関数を含みます。 (bashでコーディングされているため、比較的簡単に変更できるはずです。できる限り支援します。)
非両面プリンターで両面印刷をエミュレートするように設計されており、独自のシンプルな印刷キュー管理を実装しています。 GUIとCLIの両方のインターフェースがあります。
現在のバージョンは両面印刷のみで、非両面プリンターでのみ動作しますが、新しいバージョンでは、両面ハードウェアを備えたプリンターを処理します。これは、本質的に、両面エミュレーションソフトウェアなしのプリンターおよびキュー管理のみです。 (プロジェクトなどを介して直接私に連絡したい場合に既に動作するスクリプトのアルファ版があります。)
システムは現在のデフォルトプリンターに印刷しますが、dplxおよびデュプレックススクリプトは追加の引数を受け入れます。これらの引数はlpに渡され、プリンターやその他のプロパティなど、lpが理解できるオプションを設定するために使用できます。
システムは現在、PDF、PostScript、およびプレーンテキストファイルを処理します。
notが行うことの1つは、withinAcroread。これらのファイルはlpでは機能せず、問題が何であるかを理解するために上流の人々の注意を引くことができませんでした。
個人的には、ほとんどのアプリケーションがサポートされている場合でも、ほとんどすべてを「オフライン」で印刷します(ほとんどのアプリケーションがサポートする[ファイルに印刷]オプションを使用)。それは私がやっていることに集中するのに役立ちます。その後、適切なブレークポイントに到達すると、ジョブのバッチを印刷します。
また、再生成せずに何かの別のコピーを印刷したい場合、印刷キューを持つことは本当に素晴らしいです。これは、紙詰まりやトナー切れなどのプリンタエラーに対処するために不可欠です。
この問題の完全な解決策はないようですが、オートコンプリートの追加の利便性を備えた、上記の Rmanoの答え に似た.bashrc
に追加した関数を次に示します。
all-printers() {
if [ "$*" = "" ]
then
# Print usage."
printf "Usage:\n"
printf "all-printers start\n"
printf "all-printers stop\n"
return 1
Elif ! [ "$1" = "stop" -o "$1" = "start" ]
then
printf "Unrecognized command: $1\n"
return 1
fi
cut -f 1 -d '|' /etc/printcap |
grep -v '^#' |
while read printer_name
do
if [ "$1" = "stop" ]
then
cupsdisable "$printer_name"
printf "$printer_name stopped.\n"
Elif [ "$1" = "start" ]
then
cupsenable "$printer_name"
printf "$printer_name started.\n"
fi
done
}
complete -W 'stop start' all-printers