Este repositorio contiene una aplicación de impresora para impresoras PostScript que utiliza PAPPL para admitir la impresión IPP desde múltiples sistemas operativos. Además, utiliza los recursos de cups-filters 2.x (funciones de filtro en libcupsfilters, libppd) y pappl-retrofit (que encapsula los controladores CUPS clásicos en aplicaciones de impresora). Este trabajo (o ahora el código de pappl-retrofit) se deriva de la aplicación hp-printer.
Sus contribuciones son bienvenidas. Publique problemas y solicitudes de extracción.
Una aplicación de impresora sin trama: el formato de destino es PostScript, un formato vectorial/de alto nivel. Se aceptan datos de entrada en PostScript o PDF y la conversión necesaria se realiza sin ningún paso de trama intermedio.
Una aplicación de impresora que utiliza las nuevas funciones de filtro de cups-filters 2.x. Las funciones de filtro son funciones de biblioteca derivadas de los filtros CUPS y contienen décadas de desarrollo y refinamiento a partir de la introducción de CUPS en 2000.
Una aplicación de impresora actualizada para controladores CUPS clásicos, en este caso la forma más simple de archivos PPD únicamente para impresoras PostScript. Enumera los archivos PPD de los repositorios incluidos en Snap, carga el PPD necesario para la impresora real, extrae opciones del PPD para mostrarlas en la interfaz web, acepta configuraciones de trabajo como atributos IPP e inserta correctamente el código PostScript proporcionado por el PPD. en el flujo de datos de salida.
Una aplicación de impresora que no pasa por trabajos sin formato (el formato de entrada es el formato nativo de la impresora). Para asegurar que siempre el código PostScript del archivo PPD se inserte en el flujo de salida, llamamos al formato nativo de la impresora "aplicación/vnd.específico de la impresora", que no existe como formato de entrada, por lo que se fuerza la entrada "aplicación/postscript". a través de la función de filtro pstops().
Una aplicación de impresora ampliable: el usuario puede agregar archivos PPD a través de la interfaz web de administración para admitir modelos de impresora adicionales.
Otras propiedades son:
Para evitar la necesidad de reinventar el código para bifurcar subprocesos para que podamos pasar datos a través de una secuencia de filtros, creamos una función de filtro para enviar los datos a la impresora y formar una cadena del filtro que realmente convierte. función (una de pstops() y pdftops()) con esta función de filtro usando la función de filtro filterChain().
Para la entrada PWG/Apple Raster utilizamos devoluciones de llamada de ráster para que el procesamiento se realice en streaming, lo que permite trabajos grandes e incluso infinitamente largos. Usamos funciones libppd para insertar el código PostScript de la opción PPD en el flujo de salida y la función filterPOpen() para crear un descriptor de archivo para que las funciones libppd envíen datos al dispositivo.
La aplicación de impresora PostScript Snap tiene todos los archivos PPD PostScript de los proyectos foomatic-db y HPLIP integrados, por lo que la mayoría de los PPD de impresoras PostScript que generalmente vienen con distribuciones de Linux. Para evitar que esta gran cantidad de PPD aumente el tamaño del Snap, los comprimimos mucho usando pyppd. Tenga en cuenta que algunos PPD utilizan ciertos filtros CUPS para una funcionalidad adicional. Estos filtros están incluidos en Snap, por lo que se admite la funcionalidad adicional (en la mayoría de los casos, impresión protegida con PIN). El usuario puede agregar PPD adicionales sin necesidad de reconstruir el Snap (ver más abajo).
Usamos el ID del dispositivo IEEE-1284 de la impresora para identificar al principio que es una impresora PostScript (a través del campo CMD:) para ver si es compatible y solo luego verificamos mediante marca y modelo si la admitimos explícitamente con un PPD. A las impresoras PostScript para las que no hay PPD se les asigna un PPD genérico. Al verificar el campo CMD: antes de la búsqueda de marca/modelo, aseguramos que si PostScript es proporcionado por un módulo adicional, el módulo está realmente instalado.
Los atributos IPP del trabajo estándar se asignan a la configuración de la opción PPD que mejor se adapta a ellos para que los usuarios puedan imprimir desde cualquier tipo de cliente (como, por ejemplo, un teléfono o un dispositivo IoT) que solo admita atributos IPP estándar y no pueda recuperar las opciones PPD. Las bandejas, los tamaños de medios, los tipos de medios y la impresión dúplex se pueden asignar fácilmente, pero cuando se trata de color y calidad, la cosa se vuelve más compleja, ya que las opciones relevantes difieren mucho en los archivos PPD. Aquí utilizamos un algoritmo que automáticamente (quién quiere editar a mano ~10000 PPD para las tareas) encuentra el conjunto correcto de configuraciones de opciones para cada combinación de print-color-mode
( color
/ monochrome
), print-quality
( draft
/ normal
/ high
) y print-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
) en el PPD de la impresora actual. Por lo tanto, tiene fácil acceso a la calidad o velocidad total de su impresora sin necesidad de lidiar con la configuración de opciones específicas de la impresora (aún se puede acceder a las opciones originales a través de la interfaz de administración web).
Las capacidades de la impresora para un modelo de impresora determinado (un "controlador" en la Aplicación de la Impresora) no son estáticas durante la vida útil de la cola de impresión configurada en la Aplicación de la Impresora. El usuario puede configurar a través de una página en la interfaz de administración web qué accesorios de hardware (bandejas de papel adicionales, unidad dúplex, finalizadores,...) están instalados en la impresora y la aplicación de la impresora actualiza la estructura de datos del controlador y con esto las capacidades de la impresora. La respuesta a una solicitud IPP get-printer-attributes se actualiza adecuadamente.
PostScript es un lenguaje de programación completo y muchas impresoras PostScript permiten consultar la configuración de opciones y la presencia de accesorios de hardware instalables que ejecutan el código PostScript apropiado. Si se puede consultar una configuración, el fabricante coloca el código PostScript necesario en el archivo PPD, junto con la opción consultable. Estas consultas son compatibles con la interfaz web de la aplicación de impresora.
Los dispositivos de impresión disponibles se descubren (y utilizan) con los servidores de CUPS y no con los propios servidores de PAPPL. De esta manera, se utilizan soluciones peculiares para impresoras USB con problemas de compatibilidad (y son editables) y la salida PostScript se puede enviar a la impresora a través de IPP, IPPS (¡encriptada!) y LPD además del socket (generalmente el puerto 9100). El backend SNMP se puede configurar (comunidad, alcance de dirección).
Si tiene una configuración de sistema inusual o un firewall personal, es posible que su impresora no sea descubierta. En esta situación, la entrada totalmente manual "Impresora de red" en combinación con el campo nombre de host/IP puede resultar útil.
En la página "Agregar archivos PPD", en la lista de archivos PPD de usuario ya agregados, marque cuáles son realmente utilizados por una impresora que se configuró en la aplicación de impresora, para evitar que el usuario elimine estos archivos.
Cadenas legibles por humanos para opciones de proveedores (Necesita soporte de PAPPL: Número 58: Soporte de localización)
Internacionalización/Localización (Necesita soporte de PAPPL: Número 58: Soporte de localización)
Verificación del nivel de tinta SNMP a través de la función ps_status() (Necesita soporte de PAPPL: Problema #83: CUPS realiza encuestas de nivel de tinta IPP y SNMP a través de servidores, PAPPL debería tener funciones para esto)
Opciones de compilación para cups-filters, para compilar sin libqpdf y/o sin libppd, el primero permitirá crear el Snap de esta aplicación de impresora sin descargar ni compilar QPDF.
Para ejecutar y utilizar esta aplicación de impresora, simplemente instálela desde Snap Store:
sudo snap install --edge ps-printer-app
Luego siga las instrucciones a continuación para configurarlo.
Para construir el Snap usted mismo, en el directorio principal de este repositorio ejecute
snapcraft snap
Esto descargará todos los paquetes necesarios y creará la aplicación de impresora PostScript. Tenga en cuenta que PAPPL (próximamente 1.0) y cups-filters (próximamente 2.0) se extraen directamente de sus repositorios GIT, ya que aún no hay versiones apropiadas. Esto también puede llevar al hecho de que esta aplicación de impresora de repente ya no se compilará.
NOTA: Hay un error en Ubuntu Groovy (20.10) que le impide crear Snaps; consulte esta discusión en el foro de Snapcraft. El problema ya está resuelto pero aún no llegó a Groovy.
Cualquier versión de Ubuntu anterior (como 20.04) o más nueva (como 21.04) debería funcionar.
Para instalar la ejecución Snap resultante
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
La aplicación de impresora se iniciará automáticamente como un demonio de servidor.
Ingrese a la interfaz web
http://localhost:8000/
Utilice la interfaz web para agregar una impresora. Proporcione un nombre, seleccione la impresora descubierta, luego seleccione la marca y el modelo. También configure los accesorios instalados, los medios cargados y las opciones predeterminadas. La configuración de accesorios y los valores predeterminados de las opciones a menudo también pueden ser sondeados por la impresora.
Luego imprima archivos PDF, PostScript, JPEG, Apple Raster o PWG Raster con
ps-printer-app FILE
o imprima con CUPS, CUPS (y también cups-browsed) descubra y trate las impresoras configuradas con esta aplicación de impresora como impresoras IPP sin controlador (IPP Everywhere y AirPrint).
También puedes agregar archivos PPD sin reconstruir el Snap, ya sea usando el botón "Agregar archivos PPD" en la interfaz web o copiando archivos PPD manualmente:
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
Después de copiar (o eliminar) manualmente los archivos PPD, debe reiniciar el servidor o en la interfaz web, en la página "Agregar archivos PPD", haga clic en el botón "Actualizar" en la parte inferior. Esto agrega los cambios a la lista de controladores internos.
En la página "Agregar impresora" en el menú desplegable para seleccionar el controlador, los archivos PPD agregados por el usuario están marcados como "AGREGADOS POR EL USUARIO". Al configurar una impresora con selección automática de controladores, se prefieren los archivos PPD agregados por el usuario.
PPDFILE
en la línea de comando anterior no puede ser solo un único archivo PPD, sino cualquier número de archivos PPD individuales, archivos .tar.gz
que contienen PPD (en una estructura de directorio arbitraria) y ejecutables que generan PPD y que generalmente se colocan en /usr/lib/cups/driver
. También puede crear estructuras de subdirectorios arbitrarias en /var/snap/ps-printer-app/current/ppd/
que contengan los tipos de archivos mencionados. Solo asegúrese de no colocar allí ningún ejecutable que haga otra cosa que enumerar y generar archivos PPD.
Tenga en cuenta que con la interfaz web solo puede administrar archivos PPD individuales (sin comprimir o comprimidos con gzip
) en el propio /var/snap/ps-printer-app/current/ppd/
. Los archivos, ejecutables o subdirectorios no se muestran y no se aceptan cargas apropiadas. Esto evita especialmente agregar ejecutables sin derechos de root.
Cualquier archivo PPD agregado debe ser para impresoras PostScript, ya que los archivos PPD que no son PostScript son para controladores CUPS y, por lo tanto, necesitarían archivos adicionales para funcionar y dichos archivos no son compatibles con esta aplicación de impresora. La página "Agregar archivos PPD" muestra advertencias si se cargan dichos archivos.
Ver
ps-printer-app --help
para más opciones.
Utilice el argumento "-o log-level=debug" para un registro detallado en la ventana de su terminal.
Puede agregar archivos a /var/snap/ps-printer-app/common/usb/
para obtener reglas adicionales de peculiaridades USB. Edite los archivos existentes solo para pruebas rápidas, ya que se reemplazan en cada actualización del Snap (para introducir nuevas reglas).
Puede editar el archivo /var/snap/ps-printer-app/common/cups/snmp.conf
para configurar la detección de impresoras de red SNMP.
También puede realizar una compilación "rápida y sucia" sin necesidad de instalar PAPPL, cups-filters 2.x y pappl-retrofit en su sistema. Necesita un directorio con la última instantánea GIT de PAPPL, la última instantánea GIT de cups-filters y la última instantánea GIT de pappl-retrofit (ramas maestras de cada uno). Todos deben compilarse ( ./autogen.sh; ./configure; make
), no es necesario instalarlos. Instale también los archivos de encabezado de todas las bibliotecas necesarias (instalar "libcups2-dev" debería ser suficiente).
En el directorio con ps-printer-app.c ejecute la línea de comando
gcc -o ps-printer-app ps-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/
También hay un Makefile, pero necesita que PAPPL, cups-filters 2.x y pappl-retrofit estén instalados en su sistema.
Correr
./ps-printer-app --help
Cuando se ejecuta la versión no ajustada, de forma predeterminada, los archivos PPD se buscan en
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
La última ruta se utiliza al agregar archivos PPD usando la página "Agregar archivos PPD" en la interfaz web.
Puede configurar la variable de entorno PPD_PATHS
para buscar en otros lugares:
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Simplemente coloque una lista separada por dos puntos de cualquier cantidad de rutas en la variable, siendo siempre la última la utilizada en la página "Agregar archivos PPD". Se recomienda crear un script contenedor.
Esta aplicación de impresora utiliza los backends de CUPS y no los de PAPPL, lo que significa que para las impresoras USB se utilizan las soluciones alternativas USB de CUPS para problemas de compatibilidad, las impresoras de red también se pueden usar con los protocolos IPP, IPPS y LPD, y el descubrimiento de impresoras SNMP es configurable.
Las reglas de USB Quirk en /usr/share/cups/usb
y el archivo /etc/cups/snmp.conf
se pueden editar si es necesario.
Asegúrate de tener CUPS (al menos sus backends) instalados.
También necesita Ghostscript para imprimir trabajos en PDF.
Para acceder a la página de prueba testpage.ps
utilice la variable de entorno TESTPAGE_DIR:
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
o para su propia creación de una página de prueba (PostScript, PDF, PNG, JPEG, Apple Raster, PWG Raster):
TESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
La aplicación de impresora PostScript tiene Copyright © 2020 de Till Kamppeter.
Se deriva de la aplicación de impresora HP PCL, un primer modelo funcional de una aplicación de impresora rasterizada que utiliza PAPPL. Está disponible aquí:
https://github.com/michaelrsweet/hp-printer-app
La aplicación de impresora HP PCL tiene Copyright © 2019-2020 de Michael R Sweet.
Este software tiene la licencia Apache versión 2.0 con una excepción para permitir la vinculación con el software GPL2/LGPL2 (como versiones anteriores de CUPS). Consulte los archivos "LICENCIA" y "AVISO" para obtener más información.