---
categories: print
title: Howto CUPS
...

* Documentation : <http://cups.org/documentation.php>

[CUPS](http://cups.org/) signifie **Common Unix Printing System**, c'est un serveur d'impression pour Linux/Unix. Il est souvent utilisé sur des postes de travail sous Linux, mais aussi sur des serveurs pour centraliser l'accès aux imprimantes et permettre des droits d'accès, des quotas, etc.

## Installation

~~~
# apt install cups smbclient ttf-liberation ttf-mscorefonts-installer

# systemctl status cups
● cups.service - CUPS Scheduler
   Loaded: loaded (/lib/systemd/system/cups.service; enabled; vendor preset: enabled)
     Docs: man:cupsd(8)
 Main PID: 26996 (cupsd)
    Tasks: 1 (limit: 4915)
   Memory: 3.1M
      CPU: 197ms
   CGroup: /system.slice/cups.service
           └─26996 /usr/sbin/cupsd -l
~~~


## Utilisation basique

Lister les imprimantes :

~~~
# lpstat -t
scheduler is running
system default destination: HP_Color_LaserJet_CP2025dn
device for HP_Color_LaserJet_CP2025dn: socket://192.168.4.56
HP_Color_LaserJet_CP2025dn accepting requests since mer. 13 juin 2018 21:21:54 CEST
printer HP_Color_LaserJet_CP2025dn is idle.  enabled since mer. 13 juin 2018 21:21:54 CEST
~~~

Impression en ligne de commande :

~~~
$ export PRINTER=HP_Color_LaserJet_CP2025dn
$ echo test | lp
request id is HP_Color_LaserJet_CP2025dn-3 (0 file(s))
$ lp foo.ps 
request id is HP_Color_LaserJet_CP2025dn-4 (1 file(s))
~~~


## Configuration

Fichiers de configuration :

~~~
/etc/cups/
├── cupsd.conf
├── cupsd.conf.pre16-bak
├── cups-files.conf
├── interfaces
├── ppd
├── raw.convs
├── raw.types
├── snmp.conf
└── ssl
    ├── server.crt -> /etc/ssl/certs/ssl-cert-snakeoil.pem
    └── server.key -> /etc/ssl/private/ssl-cert-snakeoil.key
~~~

La configuration principale se trouve dans le fichier `/etc/cups/cupsd.conf`.

On peut tester la configuration avec la commande :

~~~
# cupsd -t
"/etc/cups/cups-files.conf" is OK.
"/etc/cups/cupsd.conf" is OK.
~~~


## Administration

CUPS a une interface web d'administration accessible sur le port TCP/631 : <http://127.0.0.1:631>

Cette interface permet de gérer les imprimantes (génération du fichier `/etc/cups/printers.conf`),
visualiser des informations (logs, jobs…) et agir sur les jobs d'impression (annulation, etc.)

### Droits d'accès à l'interface web

Par défaut, l'interface est restreinte sur _localhost_

Pour autoriser son accès depuis des machines distantes, il faut ajuster les directives suivantes dans `/etc/cups/cupsd.conf` :

~~~
Listen *:631

<Location />
  Order allow,deny
  Require ip 192.0.32.0/24
</Location>

~~~

Il faut ensuite ajouter `Require ip 192.0.32.0/24` pour les sections et actions souhaitées.

Pour les sections et actions critiques, une authentification supplémentaire est nécessaire.
Cela se base sur les utilisateurs Unix, pour autoriser un utilisateur on l'ajoutera dans le groupe `lpadmin` :

~~~
# adduser jdoe lpadmin
~~~

### Fichiers PPD (PostScript Printer Description)

Les fichiers PPD décrivent les fonctionnalités de l'imprimante. Suivant les paquets installés, un certain nombre de modèles
d'imprimantes sera disponible sur le système. On pourra aussi en ajouter dans le répertoire `/usr/local/share/ppd/`.
Mais également lors de l'ajout d'une imprimante, on pourra tout simplement en uploader ; les fichiers PPD uploadés
se trouvent dans le répertoire `/etc/cups/ppd/`.


## Gestion des imprimantes

CUPS gère plusieurs backends d'impression : _ipp://_, _socket://_, _smb://_ etc.

### Ajout d'une imprimante

Le plus simple est d'ajouter une imprimante via l'interface : "Adding Printers and Classes" et "Add Printer".
Il faudra principalement choisir le backend et le fichier PPD.

Cela va générer une entrée dans le fichier `/etc/cups/printers.conf`, exemple :

~~~
# Printer configuration file for CUPS v2.2.1
# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING
<Printer HP_Color_LaserJet_CP2025dn>
UUID urn:uuid:642ee499-755a-3e0b-4774-b97b2b535bc8
Info HP Color LaserJet CP2025dn
Location
MakeModel HP Color LaserJet 2550 Series
DeviceURI socket://192.0.32.56
State Idle
StateTime 1528918429
ConfigTime 1528917550
Type 8425548
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
Attribute marker-colors \#000000,#00FFFF,#FF00FF,#FFFF00
Attribute marker-levels 53,97,37,87
Attribute marker-names Black Cartridge HP CC530A,Cyan Cartridge HP CC531A,Magenta Cartridge HP CC533A,Yellow Cartridge HP CC532A
Attribute marker-types toner,toner,toner,toner
Attribute marker-change-time 1528918429
</Printer>
~~~

### Imprimantes HP

La plupart du temps, les imprimantes HP utilisent le protocole _JetDirect_ pour lequel on peut utiliser le backend _socket://_

On peut installer des drivers supplémentaires via :

~~~
# apt install hpijs hpijs-ppds hplip hplip-data
~~~

### Imprimantes CANON

Les fichiers PPD peuvent être souvent trouvés sur <http://software.canon-europe.com/index.asp>

Et il est parfois nécessaire d'ajouter le binaire _sicgsfilter_ téléchargeable en 32 bits
sur <http://fr.software.canon-europe.com/software/0040160.asp> ou en 64 bits sur
<http://fr.software.canon-europe.com/software/0040165.asp>

On le placera dans `/usr/local/bin/` et on évitera ainsi une erreur "/usr/lib/cups/filter/foomatic-rip failed" :

~~~
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer command: /bin/cat - | sicgsfilter -MPS -NP  -A1 -uanonymous -V"Test Page" -n1
D [02/Jun/2011:23:23:13 +0200] [Job 14496]
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Closing renderer
D [02/Jun/2011:23:23:13 +0200] [Job 14496] JCL: <job data>
D [02/Jun/2011:23:23:13 +0200] [Job 14496]
D [02/Jun/2011:23:23:13 +0200] [Job 14496] sh: sicgsfilter: command not found
D [02/Jun/2011:23:23:13 +0200] [Job 14496] /bin/cat: write error: Broken pipe
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer return value: 127
D [02/Jun/2011:23:23:13 +0200] [Job 14496] renderer received signal: 127
D [02/Jun/2011:23:23:13 +0200] [Job 14496] tail process done writing data to STDOUT
D [02/Jun/2011:23:23:13 +0200] [Job 14496] KID4 finished
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Process dying with "The renderer command line returned an unrecognized error code 127.", exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] error: Illegal seek (29)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] The renderer command line returned an unrecognized error code 127.
D [02/Jun/2011:23:23:13 +0200] [Job 14496] KID3 exited with status 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Renderer exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Renderer process finished
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Killing process 5546 (KID3)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Process dying with "Error closing renderer", exit stat: 1
D [02/Jun/2011:23:23:13 +0200] [Job 14496] error: Illegal seek (29)
D [02/Jun/2011:23:23:13 +0200] [Job 14496] Error closing renderer
E [02/Jun/2011:23:23:13 +0200] PID 5541 (/usr/lib/cups/filter/foomatic-rip) stopped with status 1!
~~~

### Imprimantes partagées par Windows

Pour accéder à des imprimantes partagées par Windows, il faut installer le paquet `smbclient` qui contient notamment le binaire `smbpool` pour activer le backend _smb://_ :

~~~
# apt install smbclient
~~~

On peut ensuite utiliser ce genre d'entrées dans `/etc/cups/printers.conf` :

~~~
DeviceURI smb://DOMAIN\user:PASSWORD@192.0.32.57/HPLaserJet
DeviceURI smb://192.0.32.58/printer
~~~

## Logs

Par défaut, les logs d'accès se trouvent dans `/var/log/cups/access_log`
et les logs d'erreurs dans `/var/log/cups/error_log`.

### Mode debug

Pour avoir un mode debug, on placera dans le fichier `/etc/cups/cupsd.conf` :

~~~
LogLevel debug
~~~

puis, après avoir reloadé le démon CUPS, on aura un maximum d'informations dans `/var/log/cups/error_log`.


## FAQ

### Détection automatique d'imprimantes partagées

Par défaut CUPS tente de découvrir les imprimantes partagées par d'autres systèmes sur le réseau, et les affiche dans sa liste, avec une URI=/dev/null. Pour ne pas avoir ce comportement, décocher la case « Afficher les imprimantes partagées par d'autres systèmes » dans « Administration du serveur » dans l'interface d'admin, puis supprimer le cache :

~~~
# /etc/init.d/cups stop && rm /var/cache/cups/remote.cache && /etc/init.d/cups start
~~~

### Imprimer une page de test en CLI

Imprimer la page de test de CUPS avec lp, avec le nom de l'imprimante _foo_ :

~~~
$ lp -d foo /usr/share/cups/data/testprint
~~~
