filter(7) | OpenPrinting | filter(7) |
filter - CUPS-Datei-Umwandlungsfilter-Schnittstelle
filter Auftrag Benutzer Titel Anz-Kopien Optionen [ Dateiname ]
#include <cups/cups.h> ssize_t cupsBackChannelRead(char *buffer, size_t bytes, double timeout); cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command, char *data, int *datalen, double timeout); #include <cups/ppd.h> const char *cupsGetOption(const char *name, int num_options, cups_option_t *options); int cupsMarkOptions(ppd_file_t *ppd, int num_options, cups_option_t *options); int cupsParseOptions(const char *arg, int num_options, cups_option_t **options); ppd_choice_t *ppdFindMarkedChoice(ppd_file_t *ppd, const char *keyword); void ppdMarkDefaults(ppd_file_t *ppd); ppd_file_t *ppdOpenFile(const char *filename);
Die CUPS-Filterschnittstelle stellt eine Standardmethode zum Hinzufügen von Unterstützungen für neue Dokumententypen oder Drucker zu CUPS bereit. Jeder Filter ist in der Lage, von einem oder mehreren Eingabeformaten in andere Ausgabeformate zu konvertieren, die entweder direkt gedruckt oder an einen weiteren Filter weitergeleitet werden können, der es dann in ein druckbares Format wandelt.
Filter MÜSSEN in der Lage sein, aus einem Dateinamen auf der Befehlszeile oder der Standardeingabe zu lesen und in letzterem Fall die Standardeingabe in eine temporäre Datei zu kopieren, wie dies vom Dateiformat benötigt wird. Die gesamte Ausgabe MUSS an die Standardausgabe gesandt werden. Filter DÜRFEN NICHT versuchen, direkt mit dem Drucker, anderen Prozessen oder Diensten zu kommunizieren.
Der Befehlsname (argv[0]) wird auf den Namen des Zieldruckers gesetzt. Er ist aber auch über die Umgebungsvariable PRINTER verfügbar.
Optionen werden in argv[5] übergeben und aus den bei der Einreichung des Auftrags entsprechenden IPP-Attributen kodiert. Verwenden Sie die Funktion cupsParseOptions(), um die Optionen in ein Feld cups_option_t zu laden und die Funktion cupsGetOption(), um den Wert eines bestimmten Attributes zu ermitteln. Seien Sie vorsichtig, nach häufigen Alias von IPP-Attributen, wie »landscape« für das IPP-Attribut »orientation-requested«, Ausblick zu halten.
Auf der Befehlszeile übergebene Optionen enthalten typischerweise nicht die Standardauswahl aus der PPD-Datei des Druckers. Verwenden Sie die Funktionen ppdMarkDefaults() und cupsMarkOptions() in der CUPS-Bibliothek, um die Optionen auf die PPD-Vorgaben anzuwenden und alle IPP-Attribute auf die entsprechenden Optionen abzubilden. Verwenden Sie ppdFindMarkedChoice(), um die vom Benutzer getroffene Auswahl für eine PPD-Option zu ermitteln. Ein Filter kann beispielsweise den folgenden Code verwenden, um den aktuellen Wert der PPD-Option Duplex zu ermitteln:
ppd_file_t *ppd = ppdOpenFile(getenv("PPD")); cups_option_t *options = NULL; int num_options = cupsParseOptions(argv[5], 0, &options); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); ppd_choice_t *choice = ppdFindMarkedChoice(ppd, "Duplex");
Rasterfilter sollten ausgewählte Optionen benutzen, die durch die Rasterseitenkopfzeilen gesetzt wurden, da jene die tatsächlichen Optionen für eine angegebene Seite wiedergeben. Auf der Befehlszeile angegebene Optionen legen die Vorgabewerte für den ganzen Druckauftrag, die auf seitenweiser Basis überschrieben werden können, fest.
Nachrichten, die an die Standard-Fehlerausgabe gesandt werden, werden im Allgemeinen im Attribut »printer-state-message« des Druckers und der aktuellen ErrorLog-Datei gespeichert. Jede Zeile beginnt mit einem Standard-Präfix:
Die folgenden Umgebungsvariablen sind vom CUPS-Server beim Ausführen von Filtern gesetzt:
Während die Filterschnittstelle mit den Schnittstellenskripten von System V kompatibel ist, unterstützt CUPS nicht die System-V-Schnittstellenskripte.
CUPS-Druckertreiber und -Backends sind veraltet und werden in einer zukünftigen Funktionsveröffentlichung von CUPS nicht mehr unterstützt. Drucker, die IPP nicht unterstützen, können mittels Anwendungen wie ippeveprinter(1) unterstützt werden.
CUPS-Filter sind nicht für die direkte Ausführung durch Benutzer gedacht. Abgesehen von Problemen der veralteten System-V-Schnittstelle (argv[0] ist der Druckername) erwarten CUPS-Filter auch bestimmte Umgebungsvariablen und Dateideskriptoren und laufen typischerweise auch in einer Benutzersitzung, die (unter macOS) zusätzlichen Beschränkungen unterliegt, die die Ausführung betreffen. Sofern Sie kein Entwickler sind und nicht wissen, was Sie tun, führen Sie keine Filter direkt aus. Verwenden Sie stattdessen das Programm cupsfilter(8), um die angemessenen Filter für die von Ihnen benötigten Umwandlungen auszuführen.
backend(7), cups(1), cups-files.conf(5),
cupsd(8), cupsfilter(8),
CUPS-Online-Hilfe (http://localhost:631/help)
Copyright © 2021-2023 by OpenPrinting.
CUPS | 2021-02-28 |