backend - CUPS Backend-Übertragungsschnittstellen
backend
backend Auftrag Benutzer Titel Anzahl-Kopien
Optionen [
Dateiname ]
#include <cups/cups.h>
const char *cupsBackendDeviceURI(char **argv);
void cupsBackendReport(const char *device_scheme,
const char *device_uri,
const char *device_make_and_model,
const char *device_info,
const char *device_id,
const char *device_location);
ssize_t cupsBackChannelWrite(const char *buffer,
size_t bytes, double timeout);
int cupsSideChannelRead(cups_sc_command_t *command,
cups_sc_status_t *status, char *data,
int *datalen, double timeout);
int cupsSideChannelWrite(cups_sc_command_t command,
cups_sc_status_t status, const char *data,
int datalen, double timeout);
Backends sind eine besondere Art von
filter(7), die verwendet werden, um
Daten zu verschiedenen Geräten auf dem System zu senden und
entsprechende Geräte zu ermitteln.
Wie Filter müssen Backends in der Lage sein, aus Dateinamen auf der
Befehlszeile oder von der Standardeingabe zu lesen, die Standardeingabe in
eine temporäre Datei zu kopieren, wie dies von der physischen
Schnittstelle gefordert wird.
Der Befehlsname (
argv[0]) wird auf die Geräte-URI des
Zieldruckers gesetzt. Jede Authentifizierungsinformation wird aus
argv[0] entfernt, daher wird Backend-Entwicklern empfohlen, die
Umgebungsvariable
DEVICE_URI zu verwenden, wenn immer
Authentifizierungsinformationen benötigt werden. Die Funktion
cupsBackendDeviceURI() kann zum Ermitteln der korrekten
Geräte-URI verwandt werden.
Rückgeleitete Daten vom Gerät sollten an die Filter für die
Aufträge mittels der Funktion
cupsBackChannelWrite
weitergeleitet werden.
Backends sind dafür verantwortlich, mittels der Funktion
cupsSideChannelRead() Seitenkanalanfragen zu lesen und mit der Funktion
cupsSideChannelWrite() zu antworten. Die Konstante
CUPS_SC_FD
definiert den Dateideskriptor, der für eingehende Anfragen
überwacht werden sollte.
Beim Aufruf ohne Argumente sollte das Backend die Geräte und
unterstützten oder beworbenen Schemata auf der Standardausgabe
aufführen. Die Ausgabe besteht aus null oder mehr Zeilen, die in einer
der folgenden Formen vorliegen:
device-class scheme "Unknown" "device-info"
device-class device-uri "device-make-and-model" "device-info"
device-class device-uri "device-make-and-model" "device-info" "device-id"
device-class device-uri "device-make-and-model" "device-info" "device-id" "device-location"
Die Funktion
cupsBackendReport() kann dazu verwandt werden, um diese
Zeilen zu erzeugen und in den verschiedenen Zeichenketten alle notwendigen
Zeichen zu maskieren.
Das Feld
device-class enthält einen der folgenden Werte:
- direct
- Die Geräte-URI bezieht sich auf spezielle
Geräte mit direktem Zugriff ohne Optionen, wie z.B. Parallelport-,
USB- oder SCSI-Geräte.
- file
- Die Geräte-URI bezieht sich auf eine Datei auf dem
Speichermedium.
- network
- Die Geräte-URI bezieht sich auf ein vernetztes
Gerät und folgt der allgemeinen Form für vernetzte
URIs.
- serial
- Die Geräte-URI bezieht sich auf ein serielles
Gerät mit einer konfigurierbaren Baudrate und anderen Optionen.
Falls die Geräte-URI einen Baud-Wert enthält,
repräsentiert er die maximale vom Gerät unterstützte
Baudrate.
Das Feld
scheme stellt das vom Backend unterstützte URI-Schema
bereit. Backends sollten diese Form nur verwenden, wenn das Backend irgendeine
dem Schema folgende URI unterstützt. Das Feld
device-uri legt
die komplette URI, die bei der Kommunikation mit dem Gerät verwandt
werden soll, fest.
Das Feld
device-make-and-model legt die Marke und das Modell des
Gerätes, z.B. »Beispiel Foojet 2000«, fest. Falls die
Marke und das Modell nicht bekannt ist, müssen Sie
»Unknown« melden.
Das Feld
device-info legt zusätzliche Informationen über
das Gerät fest. Typischerweise enthält es die Marke und das
Modell zusammen mit der Port-Nummer oder der Netz-Adresse, z.B.
»Beispiel Foojet 2000 USB #1«.
Das optionale Feld
device-id legt die
IEEE-1284-Geräte-ID-Zeichenkette für das Gerät, die zur
Auswahl des passenden Treibers verwandt wird, fest.
Das optionale Feld
device-location legt den physischen Standort des
Geräts fest. Es wird oft dazu verwandt, die Drucker-Standort-Attribute
vorab zu belegen, wenn ein Drucker hinzugefügt wird.
Backends, denen die Lese- und Ausführungsrechte für
»world« (andere) fehlen, werden als Benutzer
»root« ausgeführt. Andernfalls läuft das Backend
unter einem unprivilegierten Benutzerkonto, typischerweise »lp«.
Die nachfolgenden Exit-Codes sind für Backends definiert:
- CUPS_BACKEND_OK
- Die Druckdatei wurde erfolgreich an das Gerät oder
den fernen Server übertragen.
- CUPS_BACKEND_FAILED
-
Die Druckdatei wurde nicht erfolgreich zum Gerät oder fernen Server
übertragen. Der Auftragsplaner (Scheduler) wird daraufhin den
Auftrag abbrechen, den Auftrag erneut versuchen oder die Warteschlange
anhalten, abhängig vom Zustand des Attributs
printer-error-policy.
- CUPS_BACKEND_AUTH_REQUIRED
- Die Druckdatei wurde nicht erfolgreich übertragen,
da gültige Authentifizierungsinformationen benötigt werden.
Der Auftragsplaner wird darauf durch Halten des Auftrags reagieren und das
Schlüsselwort »cups-held-for-authentication« zu dem
Auftragsbeschreibungsattribut »job-reasons«
hinzufügen.
- CUPS_BACKEND_HOLD
- Die Druckdatei wurde nicht erfolgreich übertragen,
da sie derzeit nicht gedruckt werden kann. Der Auftragsplaner wird darauf
durch Halten des Auftrags reagieren.
- CUPS_BACKEND_STOP
- Die Druckdatei wurde nicht erfolgreich übertragen,
da sie derzeit nicht gedruckt werden kann. Der Auftragsplaner wird durch
Anhalten der Warteschlange darauf reagieren.
- CUPS_BACKEND_CANCEL
- Die Druckdatei wurde nicht erfolgreich übertragen,
da eine oder mehrere der Attribute nicht unterstützt werden oder
der Auftrag am Drucker abgebrochen wurde. Der Auftragsplaner wird durch
Abbruch des Auftrages darauf reagieren.
- CUPS_BACKEND_RETRY
- Die Druckdatei wurde aufgrund eines temporären
Problems nicht erfolgreich übertragen. Der Auftragsplaner wird den
Auftrag zu einem zukünftigen Zeitpunkt erneut versuchen - andere
Aufträge können vor diesem gedruckt werden.
- CUPS_BACKEND_RETRY_CURRENT
- Die Druckdatei wurde aufgrund eines temporären
Problems nicht erfolgreich übertragen. Der Auftragsplaner wird den
Auftrag sofort erneut versuchen, ohne andere Aufträge dazwischen zu
erlauben.
Alle anderen Exit-Codes sind reserviert.
Zusätzlich zu den in
cups(1) und
filter(7)
aufgeführten Umgebungsvariablen können CUPS-Backends die
folgenden Umgebungsvariablen erwarten:
- DEVICE_URI
- Die mit dem Drucker verbundene Geräte-URI.
/etc/cups/cups-files.conf
CUPS-Backends wurden im Allgemeinen nicht dafür entwickelt, um vom
Benutzer direkt aufgerufen zu werden. Neben der Geräte-URI (
argv[0] und der Umgebungsvariablen
DEVICE_URI, die die
Geräte-URI enthält) erwarten die CUPS-Backends 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.
Backends können auch mit eingeschränkten Rechten installiert
werden (0500 oder 0700), die dem Auftragsplaner mitteilen, sie als Benutzer
»root« statt des unprivilegierten Benutzers (typischerweise
»lp«) auszuführen.
Sofern Sie kein Entwickler sind und nicht wissen, was Sie tun, führen Sie
kein Backend direkt aus. Verwenden Sie stattdessen die Programme
lp(1)
oder
lpr(1), um Druckaufträge zu übersenden oder das
Programm
lpinfo(8), um verfügbare Drucker über ein
Backend abzufragen. Die einzige Ausnahme ist das SNMP-Backend - lesen Sie
cups-snmp(8) für weitere Informationen.
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(1),
cups-files.conf(5),
cups-snmp(8),
cupsd(8),
filter(7),
lp(1),
lpinfo(8),
lpr(1),
CUPS-Online-Hilfe (http://localhost:631/help)
Copyright © 2021-2022 by OpenPrinting.