Copies ignored when printing from Chromium with duplex (splix PPD lacks *Collate; CUPS chain passes NumCopies correctly)
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
Piste de recherche
Commencez dans src/rastertoqpdl.cpp et include/request.h pour suivre comment la valeur du nombre de copies de CUPS arrive dans Request, puis lisez src/printer.cpp, où l’en-tête du travail PJL est émis. Ajoutez le nombre de copies demandé à l’en-tête du travail lorsqu’il est supérieur à un, et confirmez qu’un travail de deux copies inclut @PJL SET COPIES=2, tandis qu’un travail d’une copie reste inchangé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
rastertoqpdl silently drops the number of copies requested by the application: every job prints exactly one copy, no matter what "copies" value is passed through CUPS. This is most visible when printing from a browser (Chromium/Edge: duplex + N copies → only one sheet comes out), but it affects every client that requests copies through the CUPS job options, including plain lp -n 2.
Root cause
src/rastertoqpdl.cppreads the copies count from the CUPS filterargv[4]and stores it in theRequestobject (Request::_copiesNr, set inloadRequest()).- But
_copiesNr/copiesNr()is never read anywhere afterwards. - The copy count that actually ends up in the QPDL page header (
src/qpdl.cpp:header[0x2..0x3] = page->copiesNr()) is taken from the CUPS raster page header (src/document.cpp:page->setCopiesNr(header.NumCopies)), which raster producers leave at 1.
Net effect: the requested copies count is discarded.
How to reproduce
lp -n 2 -d <splix-driven-queue> # a one-page job prints exactly one copy
Observed on a Samsung ML-2160 (USB), splix 2.0.2, CUPS 2.4.16, Ubuntu 26.10.
Suggested fix
Let the printer engine duplicate the job: emit @PJL SET COPIES=N in the PJL job header when N > 1. Engine-side duplication keeps per-copy duplex collation correct, whereas duplicating page data inside the QPDL stream would break collation for duplex jobs.
The following patch against 2.0.2 was built and verified on an ML-2160: after applying it, a 2-copy job stream contains @PJL SET COPIES=2, while 1-copy jobs are untouched.
--- splix-pristine/include/request.h
+++ splix-patched/include/request.h
@@ -110,6 +110,10 @@
*/
Duplex duplex() const {return _duplex;}
/**
+ * @return the number of copies requested for this job.
+ */
+ unsigned long copiesNr() const {return _copiesNr;}
+ /**
* @return TRUE if it's a reversed duplex. Otherwise it returns FALSE.
*/
bool reverseDuplex() const {return _reverseDuplex;}
--- splix-pristine/src/printer.cpp
+++ splix-patched/src/printer.cpp
@@ -272,6 +272,11 @@
break;
}
+ // Honor the number of copies requested by the application (CUPS argv[4]):
+ // the engine duplicates the job, which keeps duplex collation correct.
+ if (request.copiesNr() > 1)
+ printf("@PJL SET COPIES=%lu\n", request.copiesNr());
+
// Set some job options
if (request.ppd()->get("MediaType").isNull())
printf("@PJL SET PAPERTYPE=OFF\n");
Happy to prepare a proper PR if that helps.
- Langage dominant
- C++
- Étoiles
- 54
- Forks
- 20
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de OpenPrinting/splix
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
OpenPrinting/splix#26 · 3 commentaires ·
-
Multi-threading issuesPeut-être pris @dutch2005 l’a pris il y a 188 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 38/100
OpenPrinting/splix#15 · 6 commentaires ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 42/100
OpenPrinting/splix#8 · 5 commentaires ·
Toutes les issues de OpenPrinting/splix
Issues similaires
-
A-tools P-medium S-ready-to-start studio task
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
Status: Needs confirmation Status: Needs triage Type: Code Quality
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
Les mainteneurs répondent en général sous 1 jour
-
Image.resolveAssetSource's TypeScript declaration drops the null it returns for an unknown assetOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
react/react-native#59648 ·
Les mainteneurs répondent en général sous 2 jours
-
platform: Linux
Difficulté 1/5 Moins d'une heure Accessibilité débutants 80/100
keepassxreboot/keepassxc#13947 ·
Les mainteneurs répondent en général sous 1 jour
-
Shell: serve the home app's Cookie Policy on a hard reloadPeut-être pris @2001anshkaushik l’a pris aujourd’hui. Ouvertefeature module:ai
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
rocketride-org/rocketride-server#2899 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours