Files
printserver/openspec/changes/archive/2026-10-20-fix-colour-defaults-and-client-options/tasks.md
T
juergen 30670de93b
ci/woodpecker/push/build Pipeline was successful
fix pale colours and map driverless print options
Set *DefaultBRColorMode: None in the vendor PPD so every job sends
<</UseCIEColor false>>: Brother's Normal/Vivid modes enable the printer's
own CIE conversion, which washed the colours out.

Add six APPrinterPreset entries mapping print-color-mode and
print-quality from driverless (AirPrint/IPP) clients onto the Brother
device options; they use the notation CUPS generates itself (Apple
metadata as 'key value' pairs, PPD options as '*Name Value'), because
key=value strings are silently discarded. print-quality is 3/4/5.

Add the PRINTER_OPTIONS env var: whitespace-separated key=value pairs
applied as queue defaults on every start via lpadmin -o, validated
against the queue's PPD, with warnings instead of a failed startup.

Document all of it in the README. The VividNoCIE candidate was dropped
after test prints showed no difference from None. Archive the OpenSpec
change and sync the printserver/cups spec with the two new
requirements.
2026-10-20 08:28:08 +02:00

5.7 KiB
Raw Blame History

Tasks

1. PPD: Farbmodus-Default, Presets und Dokumentation

  • 1.1 assets/Brother HL-4150CDN/ppd/BR4150_2.PPD: *DefaultBRColorMode von Normal auf None ändern, alle eigenen Ergänzungen mit %-Kommentar (Herkunft/Zweck) markieren. Verifikation: grep -n 'DefaultBRColorMode\|^% Modified' "assets/Brother HL-4150CDN/ppd/BR4150_2.PPD" zeigt *DefaultBRColorMode: None und den Kommentar.
  • 1.2 PPD: sechs APPrinterPreset-Einträge ergänzen (Kombinationen color/monochrome × low/normal/high gemäß Tabelle in design.md). Verifikation: grep -c '^\*APPrinterPreset' "assets/Brother HL-4150CDN/ppd/BR4150_2.PPD" ergibt 6, und nach einem Build listet lpoptions -p <queue> -l weiterhin alle Optionen ohne PPD-Warnung in /var/log/cups/error_log. Ergebnis (2026-10-20): Zunächst als einzeilige key=value-Strings geschrieben – CUPS verwarf alle sechs stillschweigend (_ppdParseOptions() trennt an Whitespace, key=value wurde zum Namen). Mit libcups-2.4.2-Harness (_ppd_cache_t-Inspektion) belegt und auf das von CUPS selbst erzeugte Format umgestellt (mehrzeilig, Apple-Metadaten als key value, PPD-Optionen als *Name Value). Danach greifen alle sechs im pstops-Pfad (siehe 3.x).
  • 1.3 PPD: Choice VividNoCIE unter BRColorMode ergänzen (<</UseCIEColor false /BRColorMode 1>>setpagedevice) und per Testdruck gegen None vergleichen; nur behalten, wenn der Ausdruck deutlich gesättigter ist. Verifikation: lpoptions -p <queue> -l zeigt die Choice, die Entscheidung (behalten/entfernen) ist im README-Auswertungs-Abschnitt notiert. Ergebnis (2026-10-20): Testdrucke BRColorMode=VividNoCIE (Job 5) und BRColorMode=None (Job 6) sind nicht unterscheidbar → Choice wieder entfernt (README/Tabelle bereinigt).
  • 1.4 README: Abschnitt „Farben sind blass" (Ursache UseCIEColor, durchgeführte Testreihe mit lp -o BRColorMode=…, Ergebnis None), Abschnitt „Änderungen an der Hersteller-PPD" (welche Einträge ergänzt wurden und warum) und Abschnitt „Optionen fehlen im macOS/iOS-Dialog" (nur IPP-Standardoptionen sichtbar, PPD-Optionen über PRINTER_OPTIONS/CUPS-Web-UI/lp). Verifikation: die im README genannten lp/lpoptions-Befehle laufen unverändert gegen den laufenden Container.

2. entrypoint: PRINTER_OPTIONS

  • 2.1 entrypoint.sh: PRINTER_OPTIONS (Standard leer) nach der Queue-Erzeugung in Tokens key=value zerlegen und jedes per lpadmin -o setzen, an derselben Stelle wie printer-is-shared/-D/-d, bei jedem Start. Verifikation: Start mit PRINTER_OPTIONS="BRColorMode=Vivid TonerSaveMode=False" und lpoptions -p <queue> -l zeigt Vivid und True als Default (*Vivid, *True).
  • 2.2 Fehler pro Token abfangen, damit set -eu den Start nicht abbricht, und warnen. Verifikation: Start mit PRINTER_OPTIONS="NoSuchOption=Foo" erzeugt eine Warning-Zeile im Log, der Container erreicht „ready: CUPS on 631/tcp" und lpstat -r meldet „scheduler is running".
  • 2.3 README: neue Zeile in der Env-Var-Tabelle plus Kurzbeispiel unter „Environment variables" (inkl. Hinweis lpoptions -p <queue> -l zur Entdeckbarkeit der Namen). Verifikation: das Beispiel aus der Tabelle in einen podman run-Befehl übertragen, Start und lpoptions-Abfrage wie beschrieben.

3. Integrationstests am laufenden System

  • 3.1 Image neu bauen und Container starten. Verifikation: podman build -t printserver:latest . endet ohne Fehler, das Log enthält „ready: CUPS on 631/tcp, mDNS on 5353/udp". Ergebnis (2026-10-20, podman 6.1.4/macOS-VM): Build und Start ok; der Container bindet 631 nur nach podman machine ssh -- sudo sysctl -w net.ipv4.ip_unprivileged_port_start=631 (rootless VM) – danach „ready".
  • 3.2 S/W-Druck aus dem macOS-Dialog (derselbe Farbjob wie zuvor). Verifikation: Ausdruck ist schwarz/weiß – vorher kam er farbig heraus. Server-seitig verifiziert (2026-10-20): print-color-mode=monochrome → <</BRProcessColor 1>>. Sichtprüfung durch Nutzer (2026-10-20): Testseite 2 ist schwarz/weiß. Bestanden.
  • 3.3 Farbdruck ohne weitere Optionen aus dem Dialog und per lp -d <queue> test.pdf. Verifikation: Ausdruck ist so gesättigt wie der bisherige BRColorMode=None-Testdruck; lpoptions -p <queue> -l zeigt *None als Farbmodus-Default. Verifiziert (2026-10-20): lpoptions zeigt *None, pstops emittiert <</UseCIEColor false>> auch ohne Job-Optionen. Sichtprüfung durch Nutzer: Testseite 1 ist kräftig/gesättigt (nicht mehr blass). Bestanden.
  • 3.4 Qualitätsstufen prüfen. Verifikation: lp -o print-quality=3 test.pdf (IPP draft, sichtbar tonersparender: true tonersave) und lp -o print-quality=5 test.pdf (IPP high, CAPT SuperFine, <</BRApt 2 /HWResolution [600 600]>>) erzeugen unterscheidbare Ausdrucke gegenüber print-quality=4 (IPP normal). Hinweis: IPP-print-quality ist 3/4/5 – nicht 2/5. Verifiziert (2026-10-20): serverseitig im pstops-Output (3 → true tonersave, 5 → BRApt 2); Sichtprüfung durch Nutzer: Seite 3 (draft) blass/tonersparend, klar unterscheidbar von 1/4. Seite 1 = 4 erwartungsgemäß (SuperFine vs. Fine bei diesem Testmotiv optisch gleich, serverseitig aber gesetzt). Bestanden.

Workflow follow-up

  • Nach Review und grünem Durchlauf die Änderung mit /opsx-archive archivieren und das Ergebnis prüfen.