(Courriels de diversion: <bornant@evacuer-cailleront.com> <regneriez@remblayes-populariserions.com> <endormantes@malin-hivernal.com> <manigance@puisees-quantitatives.com> <poiriers@feuillette-gazouillement.com> <concepts@departirais-sous-station.com> <fauches@provocante-perequations.com> <caillait@embraiera-sous-commissions.com> <numerote@reservait-heleras.com> <aveulies@fumets-pions.com> )


>>>>> "jn" == jnicole@voila fr <jnicole@voila.fr> writes:
  jn> je recherche pour un exposé les différents moyens de mettre des
  jn> quotas d'impression sur une imprimantes en réseau.

ça parait simple comme besoin, mais les quotas d'impression sont
difficiles à implanter.

Premièrement, la plupart des imprimantes en réseau parlent le
protocole LPD, donc un utilisateur qui souhaite outrepasser les quotas
pourrait soumettre des jobs directement à l'imprimante plutôt que de
passer par le spooler. (Souvent les imprimantes parlent mal LPD; par
exemple elles n'implémentent pas les commandes permettant d'annuler
des jobs d'impression).

Ensuite vient le problème de compter le nombre de pages qu'a imprimer
un utilisateur. Il est facile de compter le nombre de jobs qu'il a
soumis -- avec un lpd classique il suffit d'utiliser l'entrée 'if'
dans /etc/printcap, puis faire appel à pac(8) -- mais ça ne sert pas à
grand chose si on souhaite différencier le coût d'impression d'un
livre de celui d'une seule feuille.

Dans le monde Windows, une application qui souhaite imprimer fait des
affichages dans une fenêtre spéciale, et le driver d'impression
transforme ces commandes dans le langage de l'imprimante qu'il pilote. 
Dans le monde Unix c'est plus basique: une application envoie un
fichier texte au spooler, qui généralement le balance directement à
l'imprimante, qui sait traiter du texte ou du Postscript.

Au niveau du spooleur, on peut facilement calculer le nombre de pages
qu'utilisera un job au format texte, mais pour du Postscript c'est une
autre histoire. Postscript est un langage de programmation, et on ne
peut pas déterminer statiquement combien de pages générera un job
(équivalent au problème d'arrêt d'une machine de Turing).

Une solution possible est d'utiliser un filtre if qui lance
ghostscript sur le fichier en lui demandant de calculer le nombre de
pages, un truc comme

,----
| #!/bin/sh
| #
| # pagecount [postscript_file...]
| (
| cat $*
| echo "currentdevice /PageCount gsgetdeviceprop == flush"
| ) | gs -q -sDEVICE=bit -sOutputFile=/dev/null -
`----

C'est assez couteux en CPU, et un utilisateur astucieux peut
contourner le comptage en redéfinissant l'opérateur Postscript
/PageCount.

Une seconde solution est d'utiliser les moyens d'accounting intégrés à
la plupart des imprimantes haut de gamme, auxquelles on accède par
SNMP ou par des protocoles propriétaires. 


<URL:http://www.cups.org/>
<URL:http://www.linuxprinting.org/>

-- 
Eric Marsden                          <URL:http://www.laas.fr/~emarsden/>

---------------------------------------------------------------------
Aide sur la liste: <URL:mailto:linux-31-help@savage.iut-blagnac.fr>Le CULTe sur le web: <URL:http://www.CULTe.org/>