Ce référentiel contient une application d'imprimante pour les imprimantes PostScript qui utilise PAPPL pour prendre en charge l'impression IPP à partir de plusieurs systèmes d'exploitation. De plus, il utilise les ressources de cups-filters 2.x (fonctions de filtrage dans libcupsfilters, libppd) et pappl-retrofit (encapsulant les pilotes CUPS classiques dans les applications d'imprimante). Ce travail (ou maintenant le code de pappl-retrofit) est dérivé de hp-printer-app.
Vos contributions sont les bienvenues. Veuillez publier des problèmes et des demandes de tirage.
Une application d'imprimante non raster : le format de destination est PostScript, un format vectoriel/de haut niveau. Les données d'entrée au format PostScript ou PDF sont acceptées et la conversion nécessaire est effectuée sans aucune étape raster intermédiaire.
Une application d'imprimante qui utilise les nouvelles fonctions de filtre de cups-filters 2.x. Les fonctions de filtre sont des fonctions de bibliothèque dérivées des filtres CUPS et contiennent des décennies de développement et de perfectionnement depuis l'introduction de CUPS en 2000.
Une application d'imprimante modernisée pour les pilotes CUPS classiques, dans ce cas la forme la plus simple de fichiers PPD uniquement pour les imprimantes PostScript. Il répertorie les fichiers PPD des référentiels inclus dans Snap, charge le PPD nécessaire à l'imprimante réelle, extrait les options du PPD pour les afficher dans l'interface Web, accepte les paramètres de travail en tant qu'attributs IPP et insère correctement le code PostScript fourni par le PPD. dans le flux de données de sortie.
Une application d'imprimante qui ne transmet pas les travaux bruts (le format d'entrée est le format natif de l'imprimante). Pour garantir que le code PostScript du fichier PPD est toujours inséré dans le flux de sortie, nous appelons le format natif de l'imprimante "application/vnd.printer-spécifique" qui n'existe pas comme format d'entrée, donc l'entrée "application/postscript" est forcée. via la fonction de filtre pstops().
Une application d'imprimante extensible : l'utilisateur peut ajouter des fichiers PPD via l'interface Web d'administration pour prendre en charge des modèles d'imprimante supplémentaires.
Les autres propriétés sont :
Pour éviter d'avoir à réinventer le code pour diviser en sous-processus afin que nous puissions transmettre les données à travers une séquence de filtres, nous créons une fonction de filtre pour envoyer les données à l'imprimante et former une chaîne du filtre réellement converti. fonction (l'un des pstops() et pdftops()) avec cette fonction de filtre en utilisant la fonction de filtre filterChain().
Pour l'entrée PWG/Apple Raster, nous utilisons des rappels raster afin que le traitement soit diffusé en continu, permettant ainsi des tâches volumineuses, voire infiniment longues. Nous utilisons les fonctions libppd pour insérer le code PostScript de l'option PPD dans le flux de sortie et la fonction filterPOpen() pour créer un descripteur de fichier pour que les fonctions libppd envoient des données au périphérique.
Le Snap d'application d'imprimante PostScript contient tous les fichiers PPD PostScript des projets foomatic-db et HPLIP intégrés, donc la plupart des PPD d'imprimante PostScript qui sont généralement fournis avec les distributions Linux. Pour éviter que ce grand nombre de PPD n'explose la taille du Snap, nous les compressons fortement à l'aide de pyppd. Notez que certains PPD utilisent certains filtres CUPS pour des fonctionnalités supplémentaires. Ces filtres sont inclus dans le Snap, donc les fonctionnalités supplémentaires sont prises en charge (dans la plupart des cas, impression protégée par code PIN). L'utilisateur peut ajouter des PPD supplémentaires sans avoir besoin de reconstruire le Snap (voir ci-dessous).
Nous utilisons l'ID de périphérique IEEE-1284 de l'imprimante pour identifier d'abord qu'il s'agit d'une imprimante PostScript (via le champ CMD :) pour voir si elle est prise en charge et ensuite seulement vérifier via make et model si nous la prenons explicitement en charge avec un PPD. Les imprimantes PostScript pour lesquelles il n'existe pas de PPD se voient attribuer un PPD générique. En vérifiant le champ CMD: avant la recherche de marque/modèle, nous garantissons que si PostScript est fourni par un module complémentaire, celui-ci est réellement installé.
Les attributs IPP des tâches standard sont mappés aux paramètres d'option PPD qui leur conviennent le mieux afin que les utilisateurs puissent imprimer à partir de n'importe quel type de client (comme par exemple un téléphone ou un appareil IoT) qui prend uniquement en charge les attributs IPP standard et ne peut pas récupérer les options PPD. Les bacs, les tailles de support, les types de support et le mode recto verso peuvent être facilement mappés, mais lorsqu'il s'agit de couleur et de qualité, cela devient plus complexe, car les options pertinentes diffèrent beaucoup dans les fichiers PPD. Ici, nous utilisons un algorithme qui automatiquement (qui souhaite éditer manuellement ~ 10 000 PPD pour les affectations) trouve le bon ensemble de paramètres d'options pour chaque combinaison de print-color-mode
( color
/ monochrome
), print-quality
( draft
/ normal
/ high
), et print-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
) dans le PPD de l'imprimante actuelle. Vous avez ainsi un accès facile à toute la qualité ou à la vitesse de votre imprimante sans avoir à gérer les paramètres d'options spécifiques à l'imprimante (les options d'origine sont toujours accessibles via l'interface d'administration Web).
Les capacités d'imprimante pour un modèle d'imprimante donné (un « pilote » dans l'application d'imprimante) ne sont pas statiques pendant toute la durée de vie de la file d'attente d'impression configurée dans l'application d'imprimante. L'utilisateur peut configurer via une page de l'interface d'administration Web quels accessoires matériels (bacs à papier supplémentaires, unité recto verso, finisseurs, ...) sont installés sur l'imprimante et l'application d'imprimante met à jour la structure des données du pilote et avec cela les capacités de l'imprimante. La réponse à une requête IPP get-printer-attributes est mise à jour de manière appropriée.
PostScript est un langage de programmation à part entière et de nombreuses imprimantes PostScript permettent d'interroger les paramètres des options et la présence d'accessoires matériels installables exécutant le code PostScript approprié. Si un paramètre peut être interrogé, le fabricant place le code PostScript nécessaire dans le fichier PPD, avec l'option interrogeable. Ces requêtes sont prises en charge par l'interface Web de l'application d'impression.
Les imprimantes disponibles sont découvertes (et utilisées) avec les backends de CUPS et non avec les propres backends de PAPPL. De cette façon, des solutions de contournement bizarres pour les imprimantes USB présentant des problèmes de compatibilité sont utilisées (et sont modifiables) et la sortie PostScript peut être envoyée à l'imprimante via IPP, IPPS (crypté !) et LPD en plus du socket (généralement le port 9100). Le backend SNMP peut être configuré (communauté, portée de l'adresse).
Si vous disposez d'une configuration système inhabituelle ou d'un pare-feu personnel, votre imprimante ne sera peut-être pas découverte. Dans cette situation, l'entrée entièrement manuelle « Imprimante réseau » en combinaison avec le champ nom d'hôte/IP peut être utile.
Sur la page "Ajouter des fichiers PPD", dans la liste des fichiers PPD utilisateur déjà ajoutés, marquez ceux qui sont réellement utilisés par une imprimante configurée dans l'application d'imprimante, pour éviter que l'utilisateur ne supprime ces fichiers.
Chaînes lisibles par l'homme pour les options du fournisseur (nécessite une prise en charge par PAPPL : problème n° 58 : prise en charge de la localisation)
Internationalisation/Localisation (nécessite le support de PAPPL : problème n°58 : support de localisation)
Vérification du niveau d'encre SNMP via la fonction ps_status() (nécessite la prise en charge par PAPPL : problème n°83 : CUPS effectue des sondages de niveau d'encre IPP et SNMP via les backends, PAPPL devrait avoir des fonctions pour cela)
Options de construction pour cups-filters, à construire sans libqpdf et/ou sans libppd, la première permettra de créer le Snap de cette application d'imprimante sans télécharger et construire QPDF
Pour simplement exécuter et utiliser cette application d'imprimante, installez-la simplement à partir du Snap Store :
sudo snap install --edge ps-printer-app
Suivez ensuite les instructions ci-dessous pour le configurer.
Pour construire le Snap par vous-même, dans le répertoire principal de ce référentiel, exécutez
snapcraft snap
Cela téléchargera tous les packages nécessaires et créera l'application d'imprimante PostScript. Notez que PAPPL (à venir 1.0) et cups-filters (à venir 2.0) sont extraits directement de leurs référentiels GIT, car il n'existe pas encore de versions appropriées. Cela peut également conduire au fait que cette application d'imprimante ne sera soudainement plus construite.
REMARQUE : il existe un bug dans Ubuntu Groovy (20.10) qui l'empêche de créer des Snaps, voir cette discussion sur le forum Snapcraft. Le problème est déjà résolu mais n'est pas encore intégré à Groovy.
Toute version d'Ubuntu plus ancienne (comme la 20.04) ou plus récente (comme la 21.04) devrait fonctionner.
Pour installer l'exécution Snap résultante
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
L'application d'imprimante sera automatiquement démarrée en tant que démon serveur.
Entrez dans l'interface Web
http://localhost:8000/
Utilisez l'interface Web pour ajouter une imprimante. Fournissez un nom, sélectionnez l'imprimante découverte, puis sélectionnez la marque et le modèle. Définissez également les accessoires installés, les supports chargés et les options par défaut. La configuration des accessoires et les valeurs par défaut des options peuvent également être souvent interrogées depuis l'imprimante.
Imprimez ensuite des fichiers PDF, PostScript, JPEG, Apple Raster ou PWG Raster avec
ps-printer-app FILE
ou imprimez avec CUPS, CUPS (et également avec navigation par tasses), découvrez et traitez les imprimantes configurées avec cette application d'imprimante comme des imprimantes IPP sans pilote (IPP Everywhere et AirPrint).
Vous pouvez également ajouter des fichiers PPD sans reconstruire le Snap, soit en utilisant le bouton « Ajouter des fichiers PPD » dans l'interface Web, soit en copiant manuellement les fichiers PPD :
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
Après avoir copié (ou supprimé) manuellement les fichiers PPD, vous devez redémarrer le serveur ou dans l'interface Web, sur la page "Ajouter des fichiers PPD", cliquez sur le bouton "Actualiser" en bas. Cela ajoute les modifications à la liste des pilotes internes.
Sur la page « Ajouter une imprimante » dans la liste déroulante permettant de sélectionner le pilote, les fichiers PPD ajoutés par l'utilisateur sont marqués « USER-ADDED ». Lors de la configuration d'une imprimante avec sélection automatique du pilote, les fichiers PPD ajoutés par l'utilisateur sont préférés.
PPDFILE
dans la ligne de commande ci-dessus ne peut pas être seulement un seul fichier PPD, mais un nombre quelconque de fichiers PPD uniques, des fichiers .tar.gz
contenant des PPD (dans une structure de répertoires arbitraire) et des exécutables de génération de PPD qui sont généralement placés dans /usr/lib/cups/driver
. Vous pouvez également créer des structures de sous-répertoires arbitraires dans /var/snap/ps-printer-app/current/ppd/
contenant les types de fichiers mentionnés. Assurez-vous simplement de ne pas y placer d'exécutables qui font autre chose que lister et générer des fichiers PPD.
Notez qu'avec l'interface Web, vous ne pouvez gérer que des PPD individuels (non compressés ou compressés avec gzip
) dans le /var/snap/ps-printer-app/current/ppd/
lui-même. Les archives, exécutables ou sous-répertoires ne sont pas affichés et les téléchargements appropriés ne sont pas acceptés. Cela évite notamment d'ajouter des exécutables sans droits root.
Tout fichier PPD ajouté doit être destiné aux imprimantes PostScript, car les fichiers PPD non PostScript sont destinés aux pilotes CUPS et ils auraient donc besoin de fichiers supplémentaires pour fonctionner et ces fichiers ne sont pas pris en charge par cette application d'imprimante. La page « Ajouter des fichiers PPD » affiche des avertissements si de tels fichiers sont téléchargés.
Voir
ps-printer-app --help
pour plus d'options.
Utilisez l'argument "-o log-level=debug" pour une journalisation détaillée dans la fenêtre de votre terminal.
Vous pouvez ajouter des fichiers à /var/snap/ps-printer-app/common/usb/
pour des règles de bizarrerie USB supplémentaires. Modifiez les fichiers existants uniquement pour des tests rapides, car ils sont remplacés à chaque mise à jour du Snap (pour introduire de nouvelles règles).
Vous pouvez modifier le fichier /var/snap/ps-printer-app/common/cups/snmp.conf
pour configurer la découverte d'imprimantes réseau SNMP.
Vous pouvez également effectuer une construction "rapide et sale" sans casser et sans avoir besoin d'installer PAPPL, cups-filters 2.x et pappl-retrofit dans votre système. Vous avez besoin d'un répertoire avec le dernier instantané GIT de PAPPL, le dernier instantané GIT de cups-filters et le dernier instantané GIT de pappl-retrofit (branches principales de chacun). Ils doivent tous être compilés ( ./autogen.sh; ./configure; make
), l'installation n'est pas nécessaire. Installez également les fichiers d'en-tête de toutes les bibliothèques nécessaires (l'installation de "libcups2-dev" devrait le faire).
Dans le répertoire avec ps-printer-app.c, exécutez la ligne de commande
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/
Il existe également un Makefile, mais celui-ci nécessite que PAPPL, cups-filters 2.x et pappl-retrofit soient installés sur votre système.
Courir
./ps-printer-app --help
Lors de l'exécution de la version non capturée, par défaut, les fichiers PPD sont recherchés dans
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
Le dernier chemin est utilisé lors de l'ajout de fichiers PPD à l'aide de la page « Ajouter des fichiers PPD » dans l'interface Web.
Vous pouvez définir la variable d'environnement PPD_PATHS
pour qu'elle recherche d'autres emplacements :
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Mettez simplement une liste de chemins séparés par deux points dans la variable, le dernier étant toujours utilisé par la page "Ajouter des fichiers PPD". La création d'un script wrapper est recommandée.
Cette application d'imprimante utilise les backends de CUPS et non ceux de PAPPL, ce qui signifie que pour les imprimantes USB, les solutions de contournement USB de CUPS pour les problèmes de compatibilité sont utilisées, les imprimantes réseau peuvent également être utilisées avec les protocoles IPP, IPPS et LPD, et la découverte d'imprimante SNMP est configurable.
Les règles USB Quirk dans /usr/share/cups/usb
et le fichier /etc/cups/snmp.conf
peuvent être modifiés si nécessaire.
Assurez-vous que CUPS (au moins ses backends) sont installés.
Vous avez également besoin de Ghostscript pour imprimer des tâches PDF.
Pour accéder à la page de test testpage.ps
utilisez la variable d'environnement TESTPAGE_DIR :
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
ou pour votre propre création d'une page de test (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
L'application d'impression PostScript est protégée par copyright © 2020 par Till Kamppeter.
Il est dérivé de l'application d'imprimante HP PCL, un premier modèle fonctionnel d'application d'imprimante raster utilisant PAPPL. Il est disponible ici :
https://github.com/michaelrsweet/hp-printer-app
L'application d'imprimante HP PCL est protégée par copyright © 2019-2020 par Michael R Sweet.
Ce logiciel est sous licence Apache License Version 2.0 avec une exception pour permettre la liaison avec le logiciel GPL2/LGPL2 (comme les anciennes versions de CUPS). Voir les fichiers « LICENCE » et « AVIS » pour plus d'informations.