Script para fazer impressão periódica

1

Eu tenho uma impressora jato de tinta em rede ( HP all-in-one photosmart 5510 ), e atualmente eu tenho um script simples que me lembra periodicamente para enviar um pequeno trabalho para a impressora para que a tinta não seque. Estou usando o Ubuntu e a impressora foi adicionada como uma impressora de rede a partir da GUI da impressora.

Eu também tenho uma minúscula caixa linux na rede que está sempre ativa, e eu gostaria de automatizar este procedimento para um cronjob para que seja feito mesmo que eu não esteja em casa.

Existe alguma boa maneira de imprimir uma imagem (jpg) a partir de um script bash? Também é possível consultar de alguma forma o histórico de trabalho da impressora (ou seja, verificar quando foi o último trabalho impresso e, se tiver mais de x dias, enviar um documento para impressão)

    
por julumme 02.04.2015 / 10:09

2 respostas

2

O PDF tem sido o formato de impressão padrão por um tempo. Prepare um arquivo PDF de uma vez por todas. Você pode usar o comando convert do ImageMagick suite (ou o original ou o GraphicsMagick variante).

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

Você pode encontrar registros de impressão em /var/log/cups/page_log . Apenas a conta de administrador pode lê-los. Registros antigos estão em arquivos chamados /var/log/cups/page_log.0 , /var/log/cups/page_log.1.gz , etc. Uma entrada de registro é assim:

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

Nós nos preocupamos apenas com o nome da impressora e a data aqui. Entradas de log serão em ordem cronológica, por isso precisamos pegar o último correspondente à impressora desejada. Aqui está um fragmento de shell que faz isso e compara a data com a data atual e imprime um arquivo, a menos que algo tenha sido impresso nos últimos 7 dias. Substitua photosmart pelo nome que você deu à sua impressora. Aviso: código não testado.

#!/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

Execute este script em uma tarefa cron diária (ou menos frequente). Ele precisará ser executado como root porque os arquivos de log não podem ser lidos por usuários comuns (a menos que você altere a configuração do CUPS).

Se você usar aliases de impressora diferentes para imprimir trabalhos monocromáticos e coloridos, verá os diferentes aliases no log. No entanto, você pode usar o alias de cores para imprimir um trabalho do BW ou vice-versa, se você passar a opção explicitamente, portanto, esse não é um teste confiável.

    
por 03.04.2015 / 02:19
0

Supondo que você já configurou a impressora e sua caixa do ubuntu está usando cups , você pode querer dar uma olhada no Impressão e opções de linha de comando . Combinado com um cronjob, imprimir uma imagem deve ser um trabalho fácil.

    
por 02.04.2015 / 10:42