backend - Programme de transmission de CUPS
backend
backend travail identifiant titre
nombre_copies options [
fichier ]
#include <cups/cups.h>
const char *cupsBackendDeviceURI(char **argv);
void cupsBackendReport(const char *schéma_périph,
const char *uri_périph,
const char *marque_et_modéle_périph,
const char *info_périph,
const char *id_périph,
const char *emplacement_périph);
ssize_t cupsBackChannelWrite(const char *tampon,
size_t octets, double délai);
int cupsSideChannelRead(cups_sc_command_t *commande,
cups_sc_status_t *état, char *données,
int *taille_données, double délai);
int cupsSideChannelWrite(cups_sc_command_t commande,
cups_sc_status_t état, const char *données,
int *taille_données, double délai);
Les programmes de transmission de CUPS sont des filtres particuliers (consultez
filter(7)) qui sont utilisés pour envoyer les données
à imprimer et découvrir les différents
périphériques d'impression du système.
Comme les filtres, ils doivent être capables de lire depuis un nom de
fichier fourni sur la ligne de commande ou depuis l'entrée standard, en
copiant l'entrée standard vers un fichier temporaire, si
nécessaire, pour l'interface physique.
Le nom de la commande (
argv[0]) est défini à la valeur de
l'URI du périphérique de l'imprimante de destination. Toute
information d'identification est retirée de
argv[0], les
développeurs des programmes de transmission devraient utiliser la
variable d'environnement
DEVICE_URI pour obtenir les informations
d'identification quand cela est nécessaire. La fonction
cupsBackendDeviceURI() peut être utilisée pour
récupérer la valeur correcte de l'URI du
périphérique.
Les données en retour du périphérique doivent être
envoyées au filtre des travaux en utilisant la fonction
cupsBackChannelWrite.
Les programmes de transmission ont la charge de lire les requêtes des
canaux auxiliaires en utilisant la fonction
cupsSideChannelRead() et en
répondant avec la fonction
cupsSideChannelWrite(). La constante
CUPS_SC_FD précise le descripteur de fichier qui sera
observé pour de nouvelles requêtes.
Quand il est exécuté sans paramètre, le programme de
transmission doit afficher sur la sortie standard les
périphériques et schémas qu'il gère ou qu'il
annonce. La sortie consiste en zéro ou plus de lignes de la forme
suivante :
classe_périphérique schéma "Unknown" "info_périphérique"
classe_périphérique URI_périphérique "marque_et_modèle_périphérique" "info_périphérique"
classe_périphérique URI_périphérique "marque_et_modèle_périphérique" "info_périphérique" "id_périphérique"
classe_périphérique URI_périphérique "marque_et_modèle_périphérique" "info_périphérique" "id_périphérique" "emplacement_périphérique"
La fonction
cupsBackendReport() peut être utilisée pour
créer ces lignes et gérer les caractères de protection
nécessaires dans les différentes chaînes.
Le champ
classe_périphérique peut prendre une de ces
valeurs :
- direct
- L'URI du périphérique se réfère
à un accès direct au périphérique, sans
option, comme pour un périphérique sur port
parallèle, USB ou SCSI.
- file
- L'URI du périphérique se réfère
à un fichier sur le disque.
- network
- L'URI du périphérique se réfère
à un périphérique réseau et respecte les
formes générales des URI réseau.
- serial
- L'URI du périphérique se réfère
à un périphérique série avec une vitesse
configurable et d'autres options. Si l'URI du périphérique
contient la vitesse, elle représente la vitesse maximale
gérée par le périphérique.
Le champ
schéma fournit le schéma d'URI géré
par le programme de transmission. Les programmes de transmission ne doivent
utiliser cette forme que s'ils gèrent tout URI utilisant ce
schéma. Le champ
uri_périphérique indique l'URI
complet à utiliser pour la communication avec le
périphérique.
Le champ
marque_et_modèle_périphérique
précise la marque et le modèle du périphérique,
par exemple « Exemple Foojet 2000 ». Si la marque
et le modèle ne sont pas connus, vous devez indiquer
« Inconnu ».
Le champ
info_périphérique ajoute des informations à
propos du périphérique. Généralement cela comprend
la marque et le modèle avec le numéro de port ou l'adresse
réseau, par exemple « Exemple Foojet 2000
USB n°1 ».
Le champ optionnel
id_périphérique indique l'identifiant
IEEE-1284 du périphérique qui est utilisé pour
sélectionner le pilote correspondant.
Le champ optionnel
emplacement_périphérique indique
l'emplacement physique du périphérique qui est utilisé la
plupart du temps pour pré-remplir l'emplacement du
périphérique lors de l'ajout d'une imprimante.
Les programmes de transmission sans droit de lecture et d'exécution pour
tout le monde sont exécutés en tant que superutilisateur. Sinon,
le programme de transmission est exécuté en utilisant un compte
non privilégié, habituellement
« lp ».
Les codes de retour suivants sont définis pour les programmes de
transmission :
- CUPS_BACKEND_OK
- Le fichier à imprimer a été transmis
avec succès au périphérique ou au serveur
distant.
- CUPS_BACKEND_FAILED
-
Le fichier à imprimer n'a pas été transmis avec
succès au périphérique ou au serveur distant.
L'ordonnanceur réagira en annulant le travail, réessayant
l'impression ou en stoppant la file d'impression en fonction de
l'état de l'attribut printer-error-policy.
- CUPS_BACKEND_AUTH_REQUIRED
- Le fichier à imprimer n'a pas été
transmis avec succès parce que des données d'identification
valables sont nécessaires. L'ordonnanceur réagira en
suspendant le travail et en ajoutant le mot clé
« cups-held-for-authentication » à
l'attribut de description de tâche
« job-reasons ».
- CUPS_BACKEND_HOLD
- Le fichier à imprimer n'a pas été
transmis avec succès parce qu'il ne peut pas être
imprimé à ce moment. L'ordonnanceur conservera le travail
d'impression.
- CUPS_BACKEND_STOP
- Le fichier à imprimer n'a pas été
transmis avec succès parce qu'il ne peut pas être
imprimé à ce moment. L'ordonnanceur stoppera la file
d'impression.
- CUPS_BACKEND_CANCEL
- Le fichier à imprimer n'a pas été
transmis avec succès parce qu'un attribut n'est pas
géré ou le travail a été annulé
à l'imprimante. L'ordonnanceur répond à cela en
annulant le travail d'impression.
- CUPS_BACKEND_RETRY
- Le fichier à imprimer n'a pas été
transmis avec succès à cause d'un incident temporaire.
L'ordonnanceur tentera de relancer la tâche plus tard
— les autres tâches pourraient imprimer avant
celle-là.
- CUPS_BACKEND_RETRY_CURRENT
- Le fichier à imprimer n'a pas été
transmis avec succès à cause d'un incident temporaire.
L'ordonnanceur tentera de relancer la tâche immédiatement en
empêchant d'autres tâches intermédiaires.
Tous les autres codes de retour sont réservés.
En plus des variables d’environnement listées dans
cups(1)
et
filter(7), les programmes peuvent attendre la variable
d’environnement suivante :
- DEVICE_URI
- L'URI du périphérique associé à
l'imprimante.
/etc/cups/cups-files.conf
Les programmes de transmission de CUPS ne sont généralement pas
conçus pour être lancés directement par l'utilisateur.
À côté du problème lié à l'adresse
URI du périphérique (
argv[0] et la variable
d'environnement
DEVICE_URI contiennent l'adresse URI du
périphérique), les programmes de transmission de CUPS attendent
également des variables d'environnement et descripteurs de fichier
spécifiques, et sont généralement lancés dans une
session utilisateur qui (sous macOS) possède des restrictions
supplémentaires et affecte la façon dont ils fonctionnent. Les
programmes de transmission peuvent également être
installés avec des droits limités (0500 ou 0700) qui informent
l'ordonnanceur de les lancer avec les droits du superutilisateur au lieu d'un
utilisateur système non privilégié (comme
« lp »).
À moins que vous ne soyez développeur, ou que vous sachiez ce que
vous faites, veuillez ne pas lancer les programmes de transmission
directement. À la place vous pouvez utiliser les programmes
lp(1) ou
lpr(1) pour envoyer un travail d'impression ou le
programme
lpinfo(8) pour demander quelles imprimantes disponibles en
utilisant le programme de transmission. La seule exception est le programme de
transmission SNMP — voir
snmpbackend(8) pour plus
d'information.
Les pilotes et les programmes de transmission de CUPS sont devenus
obsolètes et ne seront plus entretenus dans une prochaine publication
de CUPS. Les imprimantes qui ne gèrent pas IPP peuvent être
gérées en utilisant des applications telles que
ippeveprinter(1).
cups(1),
cups-files.conf(5),
cups-snmp(8),
cupsd(8),
filter(7),
lp(1),
lpinfo(8),
lpr(1),
Aide en ligne de CUPS : <URL:
http://localhost:631/help>
Copyright © 2021-2022 par OpenPrinting.