O que eu faço é o seguinte --- não é tão versátil quanto você pediu, mas funciona quase bem. Você precisa ter todas as suas impressoras definidas e, então, você precisa desses dois scripts:
-
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
Você precisa colocá-los em seu caminho (por exemplo, ~/bin
) e torná-los executáveis com chmod +x
. CAVEAT : Eu não tenho nenhuma impressora com espaços em seus nomes. Os scripts não são testados nesse caso (mas tenho certeza de que um dos gurus do nosso script de shell corrigirá os scripts em um flash; -) ...)
Agora, você pode emitir:
[romano:~] % stop_printers
Printer PDF: paused.
Printer ColorDEA: paused.
Printer Deskjet_6980: paused.
Printer fotocop5: paused.
E você pode imprimir de onde quiser, a impressora será pausada:
Você pode ver sua fila:
[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
(AFAIK, as filas de impressão são persistentes nas reinicializações). E quando você quiser imprimir:
[romano:~] % start_printers
Printer PDF: restarted.
Printer ColorDEA: restarted.
Printer Deskjet_6980: restarted.
Printer fotocop5: restarted.
Usando lprm
, você pode remover um trabalho se precisar; lpr
para enfileirar um documento via linha de comando, e se você quiser diferentes "listas", ninguém proíbe definir a mesma impressora várias vezes com nomes diferentes.
Você também pode retomar cada impressora manualmente; é só uma questão de executar cupsenable <printername>
no prompt.
O que eu não acho que você possa fazer com essa solução é alterar as opções de impressão após o fato --- você terá que desenfileirar e reencarquivar o documento para isso.