Usar un script de shell como impresora virtual

10

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

La secuencia de comandos de shell es una secuencia de comandos dúplex manual que toma un archivo PDF, imprime páginas pares, le da un aviso al usuario usando zenity pidiéndole que voltee las páginas y luego imprima 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
usuario80551
fuente

Respuestas:

2

Nunca he intentado esto, pero hay una herramienta llamada tea4cupsque suena como si pudieras implementar un preenganche a tu script que haría la impresión. Luego, puede hacer que esta impresión se cancele 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íe el mismo trabajo a varias impresoras al mismo tiempo, lo cual 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 de impresión en 15 minutos (SÍ, ESTO ES REAL)
  • etc ...

Tea4cups proporciona las siguientes facilidades:

Tea4CUPS proporciona tres formas de iniciar comandos:

  • filtros: un filtro puede modificar los datos de entrada antes de enviarlos a la impresora o ponerlos a disposición de los ganchos previos y posteriores definidos a continuación. Actualmente se puede definir un único filtro por cola de impresión.
  • ganchos previos: se garantiza que se inicien antes de enviar el trabajo de impresión a la impresora real. Cualquier gancho previo que salga de -1 puede cancelar el trabajo de impresión. Se puede definir cualquier número de ganchos previos para una cola de impresión particular.
  • posthooks: se garantiza que se iniciará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 por un gancho previo. Se puede definir cualquier número de posthooks para una cola de impresión particular.
slm
fuente
2

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

Para anunciar una impresora virtual, solo edite su /etc/printcap. Esto no es muy fácil, porque la sintaxis de PRINTCAP necesita 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 usa como filtro de impresión. La impresora en sí es /dev/null.

Quizás necesite instalar cups-bsd, pero a menudo es la configuración predeterminada.


fuente
Tenga en cuenta que printcapes el archivo de configuración para BSD lpr o lprNG, no para CUPS, que es el estándar de facto en la actualidad y es el estándar en Mint.
Gilles 'SO- deja de ser malvado'
Por lo tanto, mencioné el cups-bsdpaquete, que también está disponible en Mint, instalado de forma predeterminada y también es compatible. cups-bsdno es lprng! Es solo una envoltura, que proporciona la funcionalidad de impresión BSD para tazas para admitir aplicaciones que se utilizan lprpara imprimir (es decir, xpdf).
0

Tarde a la fiesta, pero quería hacer lo mismo y no encontré ninguna 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. Fácilmente adaptable para otras impresoras, supongo.

Denis
fuente