Ceci est une ancienne révision du document !


Version : 2022.01

Dernière mise-à-jour : 2022/06/06 08:59

LDF509 - Gestion des Impressions

Contenu du Module

  • LDF509 - Gestion des Impressions
    • Contenu du Module
    • Présentation de Cups
      • Protocoles
      • Paquets
      • Daemon
      • Le fichier /etc/cups/cupsd.conf
      • Filtres
      • Backends
      • Journaux
      • Imprimantes
    • LAB #1 - Administration de Cups
      • 1.1 - La Commande lpstat
      • 1.2 - La Commande lpadmin
      • 1.3 - Les Commandes cupsaccept et cupsenable
      • 1.4 - Classe d'imprimantes
      • 1.5 - Le fichier /etc/cups/printers.conf
      • 1.6 - Le fichier /etc/cups/classes.conf
      • 1.7 - La Commande cancel
      • 1.8 - La Commande lpmove
      • 1.9 - L'interface Web

Présentation de Cups

Le logiciel Common Unix Printing System est un système de gestion des impressions conçu pour Unix.

Protocoles

Cups utilise le protocole IPP sur les ports udp/631 et tcp/631.

Ce protocole :

  • est une extension du protocole HTTP
  • permet d'administrer CUPS via un navigateur web
  • permet de décrire les spools d'impression par simple URL

Cups peut aussi utiliser les deux protocoles suivants :

  • tcp/515 - Protocole BSD
  • tcp/9100 - Protocole JeTDirect pour les imprimantes réseau HP

Daemon

cupsd est le daemon principal du système CUPS. Quand cupsd traite une impression, il transmet les données à un filtre en fonction du modèle d'imprimante. Après traitement par le filtre, cupsd transmet le résultat à un backend qui se charge de l'impression. Les échanges entre cupsd et ces programmes se font via des répertoires de spools et des tubes.

Le Fichier /etc/cups/cupsd.conf

Le fichier de configuration de CUPS est /etc/cups/cupsd.conf. Dans ce fichier on peut trouver :

  • le port d'ecoute d'IPP
  • les comptes utilisateur et groupe sous lesquels s'exécute le serveur
  • le niveau de journalisation
  • la configuration du serveur Browse, c'est-à-dire de découverte des imprimantes réseaux
  • les ACL d'accès au spools
  • les ACL d'accès à l'administration du serveur.
root@debian11:~# more /etc/cups/cupsd.conf
#
# Configuration file for the CUPS scheduler.  See "man cupsd.conf" for a
# complete description of this file.
#

# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...
LogLevel warn
PageLogFormat

# Specifies the maximum size of the log files before they are rotated.  The value "0" disables log rotation.
MaxLogSize 0

# Default error policy for printers
ErrorPolicy retry-job

# Only listen for connections from the local machine.
Listen localhost:631
Listen /run/cups/cups.sock

# Show shared printers on the local network.
Browsing On
BrowseLocalProtocols dnssd

# Default authentication type, when authentication is required...
DefaultAuthType Basic

# Web interface setting...
WebInterface Yes

# Restrict access to the server...
<Location />
--More--(12%)

Filtres

Les filtres disponibles au système CUPS se trouvent dans le répertoire /usr/lib/cups/filter :

root@debian11:~# ls /usr/lib/cups/filter
bannertopdf     commandtopclx  gstoraster     imagetoubrl         pdftops        rastertolabel  svgtopdf          texttops      xfigtopdf
brftoembosser   commandtops    gziptoany      imageubrltoindexv3  pdftoraster    rastertopclm   sys5ippprinter    texttotext
brftopagedbrf   emftopdf       imagetobrf     imageubrltoindexv4  pstops         rastertopclx   textbrftoindexv3  vectortobrf
cgmtopdf        foomatic-rip   imagetopdf     mupdftoraster       rastertoepson  rastertopdf    textbrftoindexv4  vectortopdf
cmxtopdf        gstopdf        imagetops      musicxmltobrf       rastertoescpx  rastertops     texttobrf         vectortoubrl
commandtoescpx  gstopxl        imagetoraster  pdftopdf            rastertohp     rastertopwg    texttopdf         wmftopdf

Backends

Les Backends disponibles au système CUPS se trouvent dans le répertoire /usr/lib/cups/backend :

root@debian11:~# ls /usr/lib/cups/backend
beh  cups-brf  dnssd  driverless  driverless-fax  http  https  implicitclass  ipp  ipps  lpd  mdns  parallel  serial  snmp  socket  usb

La liste des backends reconnus par CUPS peut être obtenue en saisissant la commande suivante :

root@debian11:~# lpinfo -v
file cups-brf:/
network beh
network ipps
network http
network socket
network lpd
network https
network ipp

Il y a un type de backend par liaison locale d'imprimante (usb, série, parallèle). Il peut y avoir aussi un backend par type de protocole réseau :

Backend Description
IPP Client IPP
LPD Client LPD
SMB Client SMB
Socket Client JetDirect sur port tcp/9100
Pap/cap Client AppleTalk

Journaux

Les journaux de CUPS se trouvent dans /var/log/cups :

root@debian11:~# ls -l /var/log/cups
total 36
-rw-r----- 1 root adm 415 Jun  6 09:58 access_log
-rw-r----- 1 root adm 649 Jun  6 00:00 access_log.1
-rw-r----- 1 root adm 201 Jun  5 00:00 access_log.2.gz
-rw-r----- 1 root adm 201 Jun  4 00:00 access_log.3.gz
-rw-r----- 1 root adm 200 Jun  3 00:00 access_log.4.gz
-rw-r----- 1 root adm 200 Jun  2 00:00 access_log.5.gz
-rw-r----- 1 root adm 205 Jun  1 00:00 access_log.6.gz
-rw-r----- 1 root adm 203 May 31 00:00 access_log.7.gz
-rw-r----- 1 root adm 172 Jun  6 09:58 error_log

Imprimantes

La commande suivante liste les imprimantes connues de CUPS :

root@debian11:~# lpinfo -m | more
drv:///sample.drv/dymo.ppd DYMO Label Printer
drv:///sample.drv/epson9.ppd Epson 9-Pin Series
drv:///sample.drv/epson24.ppd Epson 24-Pin Series
lsb/usr/cupsfilters/Fuji_Xerox-DocuPrint_CM305_df-PDF.ppd Fuji Xerox DocuPrint CM305 df PDF
drv:///generic-brf.drv/gen-brf.ppd Generic Braille embosser, 1.0
drv:///cupsfilters.drv/pwgrast.ppd Generic IPP Everywhere Printer
drv:///sample.drv/generpcl.ppd Generic PCL Laser Printer
lsb/usr/cupsfilters/Generic-PDF_Printer-PDF.ppd Generic PDF Printer
drv:///sample.drv/generic.ppd Generic PostScript Printer
drv:///cupsfilters.drv/textonly.ppd Generic Text-Only Printer
drv:///generic-ubrl.drv/gen-ubrl.ppd Generic UBRL generator, 1.0
lsb/usr/cupsfilters/HP-Color_LaserJet_CM3530_MFP-PDF.ppd HP Color LaserJet CM3530 MFP PDF
lsb/usr/cupsfilters/pxlcolor.ppd HP Color LaserJet Series PCL 6 CUPS
drv:///cupsfilters.drv/dsgnjt600pcl.ppd HP DesignJet 600 pcl, 1.0
drv:///cupsfilters.drv/dsgnjt750cpcl.ppd HP DesignJet 750c pcl, 1.0
drv:///cupsfilters.drv/dsgnjt1050cpcl.ppd HP DesignJet 1050c pcl, 1.0
drv:///cupsfilters.drv/dsgnjt4000pcl.ppd HP DesignJet 4000 pcl, 1.0
drv:///cupsfilters.drv/dsgnjtt790pcl.ppd HP DesignJet T790 pcl, 1.0
drv:///cupsfilters.drv/dsgnjtt1100pcl.ppd HP DesignJet T1100 pcl, 1.0
drv:///sample.drv/deskjet.ppd HP DeskJet Series
drv:///sample.drv/laserjet.ppd HP LaserJet Series PCL 4/5
lsb/usr/cupsfilters/pxlmono.ppd HP LaserJet Series PCL 6 CUPS
drv:///indexv3.drv/i4waves3.ppd Index 4-Waves PRO, 1.0
drv:///indexv3.drv/i4x4pro3.ppd Index 4x4 PRO V3, 1.0
drv:///indexv3.drv/ibasicd3.ppd Index Basic-D V3, 1.0
drv:///indexv4.drv/ibasicd4.ppd Index Basic-D V4/V5, 1.0
drv:///indexv3.drv/ibasics3.ppd Index Basic-S V3, 1.0
drv:///indexv4.drv/ibasics4.ppd Index Basic-S V4/V5, 1.0
drv:///indexv4.drv/ibrlbox4.ppd Index Braille Box V4/V5, 1.0
drv:///indexv3.drv/ieveres3.ppd Index Everest-D V3, 1.0
drv:///indexv4.drv/ieveres4.ppd Index Everest-D V4/V5, 1.0
drv:///sample.drv/intelbar.ppd Intellitech IntelliBar Label Printer, 2.3
--More--

LAB #1 - Administration de Cups

Le serveur CUPS est administré en ligne de commande par l'utilisation d'une ou de plusieurs des commandes suivantes :

Commande Description
lpadmin Principale commande d'administration pour ajouter, supprimer et modifier des files d'attente
accept Autorise le dépôt de requêtes dans un spool
reject Interdit le dépôt de requêtes dans un spool
cupsenable Autorise le traitement des requêtes dans un spool
cupsdisable Interdit le traitement des requêtes dans un spool
lpstat Liste des travaux en attente
cancel Supprime des requêtes
lpmove Déplace des travaux en attente d'un spool à un autre
lpinfo Affiche la liste des filtres ou backends disponibles
lppasswd Gère les comptes et les mots de passe pour l'accès web

1.1 - La Commande lpstat

Pour consulter la liste des files d'attente, il convient d'utiliser donc la commande lpstat :

root@debian11:~# lpstat -t
scheduler is running
no system default destination
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.

1.2 - La Commande lpadmin

Créez maintenant une file d'attente sans pilote. Les imprimantes sans pilote utilisent le mode raw :

root@debian11:~# lpadmin -p imp1 -v socket://localhost:12000 -m raw
lpadmin: Raw queues are deprecated and will stop working in a future version of CUPS.

Les options de cette commande sont les suivantes :

Options Description
-p Le nom de la file
-v L'imprimante physique ou réseau sous forme URL
-m Le modèle à utiliser (un fichier ayant une extension ppd qui identifie l'imprimante)

Les types de URL possible sont :

URL Description
file:/chemin/fichier Impression dans un fichier
http://serveur:631/ipp/port1 Impression via http
lpd://serveur/queue Impression via LPD
ipp://serveur:631/printers/queue Impression via IPP
smb://workgroup/serveur/nompartage Impression via SMB
socket://serveur Impression via JetDirect
serial:/dev/ttyS0?baud=1200+bits=8+parity=none+flow=none Impression via port série
parallel:/dev/lp0 Impression via port parallèle

Vérifiez la création de la file d'attente :

root@debian11:~# lpstat -t
scheduler is running
no system default destination
device for imp1: socket://localhost:12000
imp1 not accepting requests since Mon 06 Jun 2022 10:01:43 AM CEST -
        reason unknown
printer imp1 disabled since Mon 06 Jun 2022 10:01:43 AM CEST -
        reason unknown

1.3 - Les Commandes accept, cupsenable

Il est maintenant possible d'activer l'imprimante grâce aux commandes accept et cupsenable :

root@debian11:~# cupsaccept imp1

root@debian11:~# lpstat -t
scheduler is running
no system default destination
device for imp1: socket://localhost:12000
imp1 accepting requests since Mon 06 Jun 2022 10:01:43 AM CEST
printer imp1 disabled since Mon 06 Jun 2022 10:01:43 AM CEST -
        reason unknown

root@debian11:~# cupsenable imp1

root@debian11:~# lpstat -t
scheduler is running
no system default destination
device for imp1: socket://localhost:12000
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST

Important : Notez que les deux commandes cupsaccept et cupsenable ont leurs opposées : cupsreject et cupsdisable.

Pour nommer une imprimante en tant que la destination par défaut, il convient d'utiliser la commande lpadmin avec l'option -d :

root@debian11:~# lpadmin -d imp1

root@debian11:~# lpstat -t
scheduler is running
system default destination: imp1
device for imp1: socket://localhost:12000
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST

Vous allez maintenant créer une file d'attente dans CUPS pour une imprimante HP Color LaserJet Series PCL 6 utilisant le fichier pxlcolor.ppd, appelée Imprimante1 et étant connectée au port parallèle.

Sous Debian 11, pour créer la file d'attente physique associée à cette imprimante, il convient de saisir les commandes suivantes :

root@debian11:~# mknod /dev/lp0 c 6 0 

root@debian11:~# ls -l /dev/lp0
crw-r--r-- 1 root root 6, 0 Jun  6 10:22 /dev/lp0

root@debian11:~# chgrp lp /dev/lp0

root@debian11:~# chmod 660 /dev/lp0

root@debian11:~# ls -l /dev/lp0
crw-rw---- 1 root lp 6, 0 Jun  6 10:22 /dev/lp0

Créez maintenant la file d'attente dans CUPS :

root@debian11:~# lpadmin -p Imprimante1 -E -v parallel:/dev/lp0 -i /usr/share/ppd/cupsfilters/pxlcolor.ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.

root@debian11:~# lpstat -t
scheduler is running
system default destination: imp1
device for imp1: socket://localhost:12000
device for Imprimante1: parallel:/dev/lp0
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
Imprimante1 accepting requests since Mon 06 Jun 2022 10:37:26 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST
printer Imprimante1 is idle.  enabled since Mon 06 Jun 2022 10:37:26 AM CEST

Important : Notez que l'option -E permet de combiner les options cupsaccept et cupsenable de la commande lpadmin.

Testez maintenant votre imprimante fictive :

root@debian11:~# echo "Test Printer File" > /tmp/test.print

root@debian11:~# lpadmin -d Imprimante1

root@debian11:~# lpstat -t
scheduler is running
system default destination: Imprimante1
device for imp1: socket://localhost:12000
device for Imprimante1: parallel:/dev/lp0
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
Imprimante1 accepting requests since Mon 06 Jun 2022 10:37:26 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST
printer Imprimante1 is idle.  enabled since Mon 06 Jun 2022 10:37:26 AM CEST

root@debian11:~# lp /tmp/test.print
request id is Imprimante1-1 (1 file(s))

Important : Notez que l'impression a eu lieu et la requête s'appelle Imprimante1-1.

Créez maintenant une deuxième file d'attente Imprimante2 et saisissez la commande lpstat -t. Vous devez obtenir un résultat similaire à celui-ci :

root@debian11:~# lpadmin -p Imprimante2 -E -v parallel:/dev/lp1 -i /usr/share/ppd/cupsfilters/pxlcolor.ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.

root@debian11:~# lpstat -t
scheduler is running
system default destination: Imprimante1
device for imp1: socket://localhost:12000
device for Imprimante1: parallel:/dev/lp0
device for Imprimante2: parallel:/dev/lp1
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
Imprimante1 accepting requests since Mon 06 Jun 2022 10:39:32 AM CEST
Imprimante2 accepting requests since Mon 06 Jun 2022 10:41:06 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST
printer Imprimante1 now printing Imprimante1-1.  enabled since Mon 06 Jun 2022 10:39:32 AM CEST
        Printer not connected; will retry in 30 seconds.
printer Imprimante2 is idle.  enabled since Mon 06 Jun 2022 10:41:06 AM CEST
Imprimante1-1           root              1024   Mon 06 Jun 2022 10:39:32 AM CEST

1.4 - Classe d'imprimantes

Une classe est un ensemble ordonné d'imprimantes. Les requêtes envoyées à la classe sont imprimées sur la première imprimante disponible.

Pour créer une classe il convient d'utiliser la commande lpadmin avec l'option -c suivie par le nom de la classe à créer :

root@debian11:~# lpadmin -p Imprimante1 -c classe1
root@debian11:~# lpadmin -p Imprimante2 -c classe1

Vérifiez la création de la classe :

root@debian11:~# lpstat -t
scheduler is running
system default destination: Imprimante1
members of class classe1:
        Imprimante1
        Imprimante2
device for classe1: ///dev/null
device for imp1: socket://localhost:12000
device for Imprimante1: parallel:/dev/lp0
device for Imprimante2: parallel:/dev/lp1
classe1 not accepting requests since Mon 06 Jun 2022 10:43:24 AM CEST -
        reason unknown
imp1 accepting requests since Mon 06 Jun 2022 10:03:48 AM CEST
Imprimante1 accepting requests since Mon 06 Jun 2022 10:39:32 AM CEST
Imprimante2 accepting requests since Mon 06 Jun 2022 10:41:06 AM CEST
printer classe1 disabled since Mon 06 Jun 2022 10:43:24 AM CEST -
        reason unknown
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:03:48 AM CEST
printer Imprimante1 now printing Imprimante1-1.  enabled since Mon 06 Jun 2022 10:39:32 AM CEST
        Printer not connected; will retry in 30 seconds.
printer Imprimante2 is idle.  enabled since Mon 06 Jun 2022 10:41:06 AM CEST
Imprimante1-1           root              1024   Mon 06 Jun 2022 10:39:32 AM CEST

1.5 - Le fichier /etc/cups/printers.conf

La configuration globale des files d'attente se trouve dans le fichier /etc/cups/printers.conf :

root@debian11:~# cat /etc/cups/printers.conf
# Printer configuration file for CUPS v2.3.3op2
# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
NextPrinterId 9
<Printer imp1>
PrinterId 1
UUID urn:uuid:8322102e-e029-325b-42eb-ed63c7904196
Info imp1
DeviceURI socket://localhost:12000
State Idle
StateTime 1654502628
ConfigTime 1654502503
Type 4
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>
<DefaultPrinter Imprimante1>
PrinterId 7
UUID urn:uuid:ba7e38f7-0547-387e-6189-7bb341799a36
Info Imprimante1
MakeModel HP Color LaserJet Series PCL 6 CUPS
DeviceURI parallel:/dev/lp0
State Idle
StateTime 1654504772
ConfigTime 1654504646
Type 8400972
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</DefaultPrinter>
<Printer Imprimante2>
PrinterId 8
UUID urn:uuid:751df4ab-afb6-3fce-4a26-80d0f2d131bd
Info Imprimante2
MakeModel HP Color LaserJet Series PCL 6 CUPS
DeviceURI parallel:/dev/lp1
State Idle
StateTime 1654504866
ConfigTime 1654504866
Type 8400972
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>

1.6 - Le fichier /etc/cups/classes.conf

La configuration globale des classes se trouve dans le fichier /etc/cups/classes.conf :

root@debian11:~# cat /etc/cups/classes.conf
# Class configuration file for CUPS v2.3.3op2
# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<Class classe1>
PrinterId 9
UUID urn:uuid:f0d54c11-d472-380d-70ba-1da156d82965
Info classe1
State Stopped
StateTime 1654505004
Accepting No
Shared Yes
JobSheets none none
Printer Imprimante1
Printer Imprimante2
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-current-job
</Class>

1.7 - La Commande cancel

Pour annuler l'impression il convient d'utiliser la commande cancel:

root@debian11:~# lpstat
Imprimante1-1           root              1024   Mon 06 Jun 2022 10:39:32 AM CEST

root@debian11:~# cancel Imprimante1-1

root@debian11:~# lpstat
root@debian11:~#

1.8 - La Commande lpmove

La commande lpmove permet de déplacer tous les jobs d'une file à une autre.

Déclarez l'imprimante imp1 comme étant l'imprimante par défault :

root@debian11:~# lpadmin -d imp1

Créez ensuite une nouvelle impression :

root@debian11:~# lp /tmp/test.print
request id is imp1-2 (1 file(s))
root@debian11:~# lpstat
imp1-2                  root              1024   Mon 06 Jun 2022 10:47:39 AM CEST

Déplacer ce job vers la classe1 :

root@debian11:~# lpmove imp1 classe1
root@debian11:~# lpstat
classe1-2               root              1024   Mon 06 Jun 2022 10:47:39 AM CEST

Pour retirer une file d'une classe, il convient d'utiliser la commande lpadmin :

root@debian11:~# lpadmin -p Imprimante1 -r classe1

root@debian11:~# lpadmin -p Imprimante2 -r classe1

root@debian11:~# lpstat -t
scheduler is running
system default destination: imp1
device for imp1: socket://localhost:12000
device for Imprimante1: parallel:/dev/lp0
device for Imprimante2: parallel:/dev/lp1
imp1 accepting requests since Mon 06 Jun 2022 10:50:11 AM CEST
Imprimante1 accepting requests since Mon 06 Jun 2022 10:46:34 AM CEST
Imprimante2 accepting requests since Mon 06 Jun 2022 10:41:06 AM CEST
printer imp1 is idle.  enabled since Mon 06 Jun 2022 10:50:11 AM CEST
printer Imprimante1 is idle.  enabled since Mon 06 Jun 2022 10:46:34 AM CEST
printer Imprimante2 is idle.  enabled since Mon 06 Jun 2022 10:41:06 AM CEST

Important : Notez que la classe est automatiquement supprimée quand elle est vide.

Pour supprimer les files créées il convient de nouveau à utiliser la commande lpadmin :

root@debian11:~# lpadmin -x Imprimante1

root@debian11:~# lpadmin -x Imprimante2

root@debian11:~# lpadmin -x Imp1

root@debian11:~# lpstat -t
scheduler is running
no system default destination
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.
lpstat: No destinations added.

1.9 - L'interface Web

CUPS peut également être administré en utilisant l'interface Web sur le port 631/tcp.


Copyright © 2022 Hugh Norris.

Menu