Usar un script de shell como impresora virtual

Usar un script de shell como impresora virtual

Tengo un script de shell que toma un archivo PDF como argumento y lo imprime con opciones adicionales específicas de la impresora. ¿Cómo puedo agregar este script como una impresora virtual que se puede seleccionar desde la GUI?

El script de shell es un script dúplex manual que toma un archivo PDF, imprime páginas pares, le indica al usuario mediante zenity que voltee las páginas y luego imprime las páginas impares.

Mi flujo de trabajo actual es:

  1. Archivo -> Imprimir -> Guardar en archivo -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

¿Hay alguna manera de hacerlo como:

  1. Archivo -> Imprimir -> my_script_as_virtual_printer

Nota: Esto está en Linux mint 13 canela. Lo he intentado gnome-manual-duplexpero no me funciona.


El cuadro de diálogo GUI desde el que puedo imprimir en un archivo PDF Cuadro de diálogo de impresión GTK estándar

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$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

Respuesta1

Nunca he probado esto pero hay una herramienta llamadatea4cupslo que parece que podría implementar un preenganche a su script que haría la impresión. Luego, podría cancelar esta impresión y no ir a una impresora real a través de tazas, permitiendo que su script haga la impresión.

extracto

Las posibilidades son infinitas :

  • Envía el mismo trabajo a varias impresoras al mismo tiempo, lo que no es posible con CUPS.
  • Automatice el archivo PDF de todos los trabajos de impresión.
  • Prohibir trabajos de impresión duplicados (se muestra un ejemplo simple en el archivo de configuración de muestra)
  • Cree una solución de contabilidad impresa en 15 minutos (SÍ, ESTO ES REAL)
  • etc...

Tea4cups proporciona lo siguiente facilita:

Tea4CUPS proporciona tres formas de ejecutar comandos:

  • filtros: un filtro puede modificar los datos de entrada antes de enviarlos a la impresora o ponerlos a disposición de los enlaces previos y posteriores definidos a continuación. Actualmente se puede definir un único filtro por cola de impresión.
  • prehooks: se garantiza que se ejecutarán antes de que el trabajo de impresión se envíe a la impresora real. Cualquier preenganche que salga de -1 puede cancelar el trabajo de impresión. Se puede definir cualquier número de prehooks para una cola de impresión en particular.
  • posthooks: se garantiza que se ejecutarán después de que el trabajo de impresión se haya enviado a la impresora real, a menos que el trabajo haya sido cancelado previamente mediante un prehook. Se puede definir cualquier número de posthooks para una cola de impresión en particular.

Respuesta2

¿Cómo puedo agregar este script como una impresora virtual que se puede seleccionar desde la GUI?

Para anunciar una impresora virtual, simplemente edite su archivo /etc/printcap. Esto no es muy fácil, porque la sintaxis de IMPRIMIRNecesita acostumbrarse.

Aquí se muestra un ejemplo de cómo hacerlo.Servicio PDF con 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:

Aquí el /usr/bin/smbprintscript se utiliza como filtro de impresión. La impresora en sí es /dev/null.

Quizás necesites instalar cups-bsd, pero suele ser la configuración predeterminada.

Respuesta3

Llegué tarde a la fiesta, pero quise hacer lo mismo y no encontré otra solución.

Escribiré aquí cómo lo resolví, tal vez otros encuentren útil la solución.

  • hizo un filtro para tazas para atrapar el archivo a imprimir
  • hizo un backend para imprimir el archivo
  • Hizo un instalador agradable y fácil.

El código fuente está en github: https://github.com/dentys03/manual_duplex_linux

Debería funcionar en cualquier impresora HP. Supongo que se adapta fácilmente a otras impresoras.

información relacionada