Le système d'impression CUPS

Gazette Linux n°90 — Mai 2003

Alan Ward

Article paru dans le n°90 de la Gazette Linux de mai 2003.

Traduction française par Joëlle Cornavin .

Relecture de la traduction française par Encolpe Degoute .

Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières
1. Comment fonctionne-t-il ?
2. Détection dynamique de l'imprimante
3. Groupement d'imprimantes
3.1. Exemple n°1
3.2. Exemple n°2
4. Intégration avec Windows
5. Imprimantes réseau
6. Configuration

Le système d'impression CUPS correspond à ce que signifie son nom : Common Unix Printing System. Son but est d'offrir une interface commune d'impression au travers d'un réseau local, en gommant les différences entre le système d'impression de chaque ordinateur. Bien que je ne sois pas sûr qu'un tel système soit réellement nécessaire dans un environnement uniquement Linux où le standard Berkeley LPD prévoit cette fonctionnalité, CUPS fournit une interactivité avec des imprimantes SMB et Windows. CUPS permet également la détection dynamique des imprimantes et leur groupement.

CUPS est placé sous licence GPL par une société appelée Easy Software Products®. Elle propose CUPS, ainsi que des services commerciaux et une assistance.

Vous pouvez l'obtenir sur le site de CUPS ou sous forme de paquetage RPM pour les distributions majeures (Mandrake, RedHat et SuSE).


1. Comment fonctionne-t-il ?

On peut considérer que CUPS est le successeur du système d'impression LPD. Il remplace la commande lpr elle-même et les pilotes d'imprimante LPD par ses propres versions. Néanmoins, il ressemble beaucoup à LPD en ce sens qu'il repose sur PostScript en tant que langage sous-jacent pour la description des pages. Les programmes Linux (et Unix) ne verront pas la différence entre CUPS et LPD.

Il contient une liste de pilotes d'imprimantes qui regroupe la plupart des imprimantes sur port parallèle, sur port USB et même sur port série. Notez que la connexion série d'une imprimante avec un câble null-modem série est lente et plus difficile à configurer qu'un câble parallèle, mais cela suffit pour une imprimante matricielle, pour l'impression en série ou de copies multiples. C'est aussi un moyen facile de construire un serveur d'impression à partir d'un parc de matériel ancien. Un conseil pour les écoles !


2. Détection dynamique de l'imprimante

CUPS a une caractéristique des systèmes Windows qui est n'est pas très courante dans le monde Unix : il diffuse les imprimantes disponibles sur l'ordinateur local vers tous les autres ordinateurs du réseau. De cette manière, chaque ordinateur du segment IP local peut savoir en temps réel quelles sont les imprimantes disponibles et quel est leur état.

Naturellement, ce comportement est — contrairement à Windows — configurable. Vous pouvez indiquer à CUPS (dans le fichier de configuration cupsd.conf) s'il est possible d'effectuer la diffusion et où, et spécifier à quelle fréquence les informations seront rafraîchies.


3. Groupement d'imprimantes

CUPS appelle « classe » un groupe d'imprimantes qui apparaît comme une seule imprimante aux yeux des programmmes utilisateur. Par exemple, vous pourriez créer un groupe appelé ImprimantesCouleur, comprenant toutes vos imprimantes couleur. L'utilisateur pourrait alors demander à son programme d'imprimer sur ImprimantesCouleur, et la sortie aurait lieu sur une de ces imprimantes. Celle dont il s'agirait dépend des droits utilisateur ou qui est actuellement disponible.

Le fait qu'une imprimante soit membre d'un groupe ne signifie pas en soi que les utilisateurs ne peuvent pas se servir de cette imprimante directement. Néanmoins, au niveau du contrôle d'accès de CUPS, vous pouvez faire refuser des travaux à des imprimantes — alors que les groupes les acceptent. Le résultat final est que les utilisateurs peuvent faire appel aux groupes d'impression, non aux imprimantes. Cela dépend un peu de la politique sur l'utilisation des imprimantes que vous projetez d'implémenter.


3.1. Exemple n°1

J'ai un atelier comportant cinq imprimantes sous Linux, toutes dotées de CUPS. Quand je change l'une d'entre elles :

  • Je retire l'ancienne imprimante sous CUPS.

  • Je mets en place la nouvelle imprimante

via l'interface web de CUPS en moins de 30 secondes. C'est là toute la configuration requise — les autres ordinateurs auront leurs routes d'impression par défaut mises à jour en 30 autres secondes. Moins d'une minute pour le changement complet : moins de temps qu'il n'en faut à une imprimante laser pour chauffer.


3.2. Exemple n°2

Je souhaiterais ajouter au réseau de mon école :

  • Une classe d'imprimantes laser N/B, sur laquelle tout le monde peut imprimer ;

  • Une classe d'imprimantes couleur rapide, sur laquelle tout le monde peut imprimer, mais avec des restrictions sur le volume ;

  • Une classe d'imprimantes couleur de précision, dont je superviserais le déblocage.

La plupart de ces imprimantes s'affranchissent des ordinateurs Windows et seraient directement disponibles pour d'autres ordinateurs sous Windows. Cependant, en les mettant à disposition via CUPS sur une passerelle/un routeur centralisé(e) :

  • J'offre un moyen de centraliser les imprimantes : les utilisateurs n'ont plus à chercher qu'une imprimante dans un seul emplacement ;

  • J'offre un moyen d'imprimer sur un autre segment ethernet, sans permettre que le trafic de diffusion normal de Windows passe et encombre la bande passante du réseau ;

  • Je m'assure que l'impression en cours de l'enseignant depuis sa salle de classe au troisième étage de l'autre bâtiment n'est pas bloquée parce que l'imprimante du département située au rez-de-chaussée n'a plus de papier : son travail d'impression est redirigé vers l'imprimante qui est en attente.


4. Intégration avec Windows

Pour utiliser une imprimante Windows sous Linux, ou le contraire, vous devrez avoir un serveur Samba opérationnel. Configurez-le et testez-le avant de continuer (en tant qu'utilsateur normal, essayez de voir votre répertoire personnel sur la machine Linux depuis un ordinateur Windows). N'oubliez pas d'activer le chiffrement des mots de passe dans /etc/samba/smb.conf si vous êtes sous Windows 98 ou une version plus récente.

CUPS peut utiliser des imprimantes partagées depuis des ordinateurs sous Windows et des imprimantes réseau, grâce au protocole SMB. Il suffit de configurer une imprimante Windows à l'aide de Samba. Pour l'essentiel, tout ce que vous avez à indiquer à CUPS est l'adresse de l'imprimante, comme smb://serveur/imprimante.

Windows peut employer une imprimante CUPS partagée par Samba. Procédez normalement pour partager vos imprimantes avec Samba, c'est-à-dire ne faites rien : vos imprimantes sont généralement partagées par défaut. Si ce n'est pas le cas, modifiez smb.conf pour créer le partage nécessaire. Toutes les options de partage de Samba sont applicables, car Samba considère une imprimante CUPS de la même manière qu'une imprimante LPD.


5. Imprimantes réseau

Les imprimantes réseau — c'est-à-dire une imprimante dotée d'une interface réseau, qui n'a pas besoin d'un ordinateur hôte pour être rendue disponible sur le réseau — peut utiliser n'importe lequel de ces protocoles :

Dans les deux premiers cas, procédez comme avec une imprimante hébergée par un ordinateur. Dans le troisième, vous êtes probablement dans une impasse. Cela m'est arrivé avec une Lexmark® ; j'ai fini par la partager depuis une machine Windows.


6. Configuration

Il y a deux manières de configurer CUPS. L'une consiste à modifier le fichier de configuration /etc/cups/cupsd.conf, l'autre est une interface de type web classique à laquelle vous pouvez accéder sur le port 631. Elle est très similaire à la configuration de type web de nombreuses imprimantes réseau et devrait être intuitive pour tous.

Vous ne pouvez généralement accéder à l'interface que depuis l'interface localhost, non depuis les autres ordinateurs. Cependant, vous pouvez régler ce comportement en changeant les lignes suivantes dans le fichier de configuration cupsd.conf et en redémarrant CUPS :


<Location />                   # cet emplacement est l'écran principal
Order Deny, Allow
Deny From All
Allow From 127.0.0.1           # autoriser la configuration depuis l'hôte local 
Allow From 192.168.1.*         # autoriser la configuration depuis n'importe quelle machine
                               # sur le sous-réseau 192.168.1.0/24
Allow From mybox.mydomain      # ceci est mon bureau sur un autre segment
</Location>

Vous pouvez également spécifier un par un quels sont les éléments de menu (appelés Locations en vocabulaire CUPS) accessibles depuis n'importe quelle adresse IP donnée. Cela ne signifie pas que d'autres ordinateurs ne pourront pas se connecter au serveur — simplement qu'ils ne pouront pas accéder à son contenu.

Si votre machine Linux fonctionne à la fois comme serveur d'impression et comme passerelle entre deux ou plusieurs segments IP, vous pouvez également spécifier sur quelles interfaces réseau elle devra écouter les requêtes :


Listen 127.0.0.1:631            # Devrait toujours être là
Listen servername:631           # Ajoutez le nom de votre serveur ici
Listen 192.168.1.1:631          # Vous pouvez également utiliser votre adresse IP 

Dans l'exemple ci-dessus, l'interface web sera visible via mon interface eth0 ayant pour adresse IP 192.168.1.1, mais non au travers de l'interface eth1 ayant pour adresse IP 172.16.0.1.

Bien que l'identification de l'utilisateur soit requise pour l'authentification du nom de connexion/du mot de passe de base, notez que vous pouvez faire appel à SSL pour vous connecter à l'interface web au travers du protocole sécurisé https. Ce comportement est également assez facile à configurer dans le fichier cupsd.conf.

L'interface web offre un système d'aide complet et une documentation exhaustive sur ce qu'est CUPS et la manière de le configurer.

Alan enseigne l'informatique à Andorre, au lycée et à l'université. Ses loisirs comprennent la photographie (numérique et traditionnelle), le trekking, le rock et la collection de processeurs.