--- categories: print title: Howto CUPS ... * Documentation : [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 : 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 Order allow,deny Allow from 192.0.32.0/24 ~~~ Il faut ensuite ajouter `Allow from 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 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 ~~~ ### 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 Et il est parfois nécessaire d'ajouter le binaire _sicgsfilter_ téléchargeable en 32 bits sur ou en 64 bits sur 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: 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 ~~~