Usando um script de shell como uma impressora virtual

10

Eu tenho um script de shell que usa um arquivo PDF como argumento e o imprime com opções adicionais específicas da impressora. Como posso adicionar esse script como uma impressora virtual que pode ser selecionada na GUI?

O shell script é um script duplex manual que pega um arquivo PDF, imprime páginas pares, fornece um prompt de usuário usando zenity, pedindo ao usuário para virar as páginas e imprimir as páginas ímpares.

Meu fluxo de trabalho atual é:

  1. Arquivo - > Imprimir - > Salvar no arquivo - > tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Existe alguma maneira de fazer isso como:

  1. Arquivo - > Imprimir - > my_script_as_virtual_printer

Nota: Isso é no Linux mint 13 canela. Eu tentei gnome-manual-duplex mas não funciona para mim.

A caixa de diálogo da GUI a partir da qual posso imprimir em um arquivo PDF

my_duplex_script

#!/bin/bashlp_args=whilegetoptso:optdocase"$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift 'expr $OPTIND - 1'

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd='expr $page_count % 2'

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0
    
por user80551 14.06.2014 / 09:06

2 respostas

2

Eu nunca tentei isso, mas há uma ferramenta chamada tea4cups que parece que você poderia implementar um presaok para o seu script que faria a impressão. Você poderia ter essa impressão cancelada e não ir para uma impressora real via cups, permitindo que seu script faça a impressão.

trecho

The possibilities are endless :

  • Send the same job to several printers at the same time, which is not possible with CUPS.
  • Automate the PDF archiving of all print jobs.
  • Forbid duplicate print jobs (a simple example is shown in the sample configuration file)
  • Create a print accounting solution in 15 minutes ( YES, THIS IS FOR REAL )
  • etc...

Tea4cups fornece os seguintes facilitadores:

Tea4CUPS provides three ways to launch commands :

  • filters : A filter can modify the input datas before they are sent to the printer or made available to the pre and post hooks defined below. Currently a single filter can be defined per print queue.
  • prehooks : these are guaranteed to be launched before the print job is sent to the real printer. Any prehook which exits -1 can cancel the print job. Any number of prehooks can be defined for a particular print queue.
  • posthooks : these are guaranteed to be launched after the print job has been sent to the real printer, unless the job was previously cancelled by a prehook. Any number of posthooks can be defined for a particular print queue.
    
por 14.06.2014 / 14:13
1

How can I add this script as a virtual printer that can be selected from the GUI?

Para publicar uma impressora virtual, basta editar seu /etc/printcap . Isso não é muito fácil, porque a sintaxe do PRINTCAP precisa ser usada.

Um exemplo de como fazer isso é mostrado aqui Serviço PDF com o Samba :

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

Aqui, o script /usr/bin/smbprint é usado como um filtro de impressão. A impressora em si é /dev/null .

Talvez você precise instalar cups-bsd , mas geralmente é a configuração padrão.

    
por 14.06.2014 / 20:49