Page suivante Page précédente Table des matières
12. L'impression à distance
Une des caractéristiques de
lpdest qu'il supporte l'impression sur des imprimantes rattachées à d'autres machines que la vôtre. Avec, en plus, une combinaison de filtres soignée, vous aurez un système d'impression transparent, réparti et performant.
12.1 Vers un hôte Unix/lpd
Pour que des machines distantes puissent utiliser l'imprimante attachée à votre machine, le nom de ces machines doit être référencé soit dans le fichier
/etc/hosts.lpd, soit dans le fichier/etc/hosts.equiv. Ce sont des fichiers textes normaux, dans lesquels on indique un nom de machine par ligne.
Il est préférable de déclarer les machines dans
/etc/hosts.lpdqui est spécialement réservé à l'impression, le fichier/etc/hosts.equivdonnant des droits plus étendus.
Vous pouvez restreindre les droits d'accès distants par groupe ou par utilisateur. Les groupes autorisés sont indiqués grâce au paramètre
:rg=:du fichierprintcap:rg=adminrestreint l'utilisation aux utilisateurs du groupeadmin. Le paramètre booléen:rs=:du même fichier restreint l'accès aux utilisateurs ayant un compte sur votre machine.
Avec lpd
Pour imprimer vers une autre machine, vous devez créer une entrée
printcaptelle que:
# REMOTE djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :rm=machine.out.there.com:\ :rp=printername:\ :lp=/dev/null:\ :sh:Vous noterez qu'il doit bien exister un répertoire de spool local géré par votre
lpdlocal. Les fichiers soumis y seront copiés puis envoyés vers la machine distante.
Avec rlpr
Vous pouvez utiliser
rlprpour soumettre une impression directement à la machine distante sans passer par un démon local et toute sa configuration. C'est particulièrement intéressant lorsque vous imprimer rarement et vers différentes imprimantes.
rlprs'appuie sur TCP/IP. Il n'est pas nécessaires que les imprimantes soient connues explicitement. N'ayant pas besoin de fichier printcap, il est plus facile à gérer. Il est compatible aveclpr.
12.2 Imprimer vers une imprimante attachée à Windows 95, NT, LanManager ou Samba.
Il existe un mini-document (
Printing to Windows HOWTO) qui décrit ceci très bien.
Il est possible de rediriger une file
lpdvers un service d'impression SMB grâce au programmesmbclient(http://www.picante.com/~gtaylor/pht/man/smbclient.html). Samba contient un script (smbprint) qui fait cela. Vous devez mettre un fichier de configuration pour l'imprimante en question dans le répertoire de spool et décrire le programmesmbprinten tant que filtre dans/etc/printcap:
lp|remote-smbprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/sbin/smbprint:Vous pouvez également utiliser le programme
smbclientpour soumettre un fichier directement à un service d'impression SMB sans impliquerlpd. Lisez la documentation de tous ces programmes pour plus d'information.
12.3 Vers une imprimante NetWare
La suite logicielle
ncpfscontient un utilitaire appelénprintqui fournit les mêmes fonctionnalités que smbprint pour NetWare. Vous pouvez l'obtenir surftp://sunsite.unc.edu/pub/Linux/system/filesystems/ncpfs/. Avecncpfsvous pouvez monter des volumes du serveur NetWare sous Linux. Vous pouvez également soumettre des travaux d'impression vers NetWare ou mettre des travaux d'impression de NetWare en file sur votre système Linux. Vous devez disposer d'un noyaux 1.2.x ou 1.3.54 et ultérieur.ncpfsNE fonctionne PAS avec un noyau 1.3.x (x < 54).
Pour que
nprintfonctionne vialpd, vous devez écrire un shell-script pour diriger stdin sur l'imprimante NetWare. Vous l'installerez comme un filtre (if) d'une file d'impressionlpd. Vous obtiendrez :
sub2|remote-NWprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/sub2:\ :if=/var/spool/lpd/nprint-script:le script
nprint-scriptressemble à quelque chose comme :
#! /bin/sh # Essayez en premier le compte invite (guest)sans mot de passe! /usr/local/bin/nprint -S net -U name -P passwd -q printq-name -
12.4 Vers une imprimante EtherTalk
Le paquetage logiciel
netatalkcontient l'équivalent denprintetsmbclient. Référez-vous auNetatalk-HOWTOdans lequel est bien décrite la procédure d'impression vers et depuis un réseau Apple.
12.5 Vers une imprimante HP ou autre imprimante Ethernet
Certaines imprimantes (HP et autres) sont fournies avec une interface Ethernet que vous pouvez directement adresser pour soumettre vos travaux d'impression. Conformez-vous au manuel du constructeur. En général, ces imprimantes font ``tourner'' un
lpdet fournissent une ou plusieurs files vers lesquelles vous pouvez imprimer. Une imprimante HP, par exemple, pourra fonctionner avec une entréeprintcaptelle que:
lj-5|remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :rm=printer.name.com:rp=raw:Les imprimantes LaserJet HP avec une interface JetDirect ont en général deux files incorporées; l'une ``raw'' accepte le PCL (et peut-être le PostScript), l'autre ``text'' accepte l'ascii pur (et s'arrange pour résoudre d'elle-même les problèmes d'effets d'escalier).
Dans un environnement dans lequel plusieurs imprimantes ne supportent pas le PostScript, il peut être bon de configurer un serveur d'impression dédié vers lequel toutes les machines enverront leurs travaux et sur lequel GhostScript tournera.
12.6 Vers d'anciennes HP
Certaines anciennes imprimantes HP ne supportent qu'un protocole mal foutu s'appuyant sur des connexions TCP, notamment les premièrs modèles à base de cartes JetDirect (et quelques JetDirectEx). Pour imprimer vers de telles imprimantes, vous devez ouvrir une connexion TCP vers un port dédié (9100) et envoyer votre impression vers cette connexion. Voici le script Perl correspondant :
#!/usr/bin/perl # Thanks to Dan McLaughlin for writing the original version of this # script (And to Jim W. Jones for sitting next to Dan when writing me # for help ;) $fileName = @ARGV[0]; open(IN,"$fileName") || die "Can't open file $fileName"; $dpi300 = "\x1B*t300R"; $dosCr = "\x1B&k3G"; $ends = "\x0A"; $port = 9100 unless $port; $them = "bach.sr.hp.com" unless $them; $AF_INET = 2; $SOCK_STREAM = 1; $SIG{'INT'} = 'dokill'; $sockaddr = 'S n a4 x8'; chop($hostname = `hostname`); ($name,$aliases,$proto) = getprotobyname('tcp'); ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =~ /^\d+$/;; ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($hostname); ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them); $this = pack($sockaddr, $AF_INET, 0, $thisaddr); $that = pack($sockaddr, $AF_INET, $port, $thataddr); if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) { # print "socket ok\n"; } else { die $!; } # Give the socket an address. if (bind(S, $this)) { # print "bind ok\n"; } else { die $!; } # Call up the server. if (connect(S,$that)) { # print "connect ok\n"; } else { die $!; } # Set socket to be command buffered. select(S); $| = 1; select(STDOUT); # print S "@PJL ECHO Hi $hostname! $ends"; # print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends"; # print S $dpi300; # Avoid deadlock by forking. if($child = fork) { print S $dosCr; print S $TimesNewR; while (<IN>) { print S; } sleep 3; do dokill(); } else { while(<S>) { print; } } sub dokill { kill 9,$child if $child; }
12.7 Les filtres d'entrée pour des imprimantes distantes
Une des bizarreries de
lpdest que le filtre d'entrée (if) n'est pas exécuté pour des imprimantes distantes. Si vous devez absolument passer par un filtre, il vous faudra utiliser deux files, la première redirigeant vers la deuxième. Par exemple :
lj-5:remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :if=/usr/lib/lpd/filter-lj-5: lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\ :rp=raw:sd=/var/spool/lpd/lj-5-raw:et le filtre
filter-lj-5(exemple):
#!/bin/sh gs <options> -q -dSAFER -sOutputFile=- - | \ lpr -Plj-5-remote -U$5L'option
-Une fonctionne que silprest lancé en tant que démon. Elle positionne correctement le nom du soumissionnaire du travail dans la deuxième queue. Il serait d'ailleurs mieux d'utiliser une méthode plus sûre pour récupérer ce nom car ce n'est pas toujours le 5ème paramètre.
12.8 Imprimer depuis Windows
L'impression depuis un client Windows vers un serveur Unix est directement supporté par
SMBen utilisant le paquetageSAMBA(qui supporte également le partage de fichiers du système de fichiers Linux vers les clients Windows).
Samba est fourni avec une documentation complète. Vous pouvez soit installer un filtre magique sur Linux et imprimer du PostScript soit installer un pilote d'imprimante spécifique sous Windows et décrire une file sans filtre. En s'appuyant sur les pilotes Windows, vous pourrez obtenir de meilleurs résultats, mais c'est un peu plus compliqué à administrer si vous avez plusieurs stations sous Windows. Donc essayez d'abord la première solution.
12.9 Depuis Netware
Il y a des services NetWare disponibles pour Linux, mais je n'ai aucune idée si vous pouvez offrir des services d'impression depuis des client Netware. Des informations sont les bienvenues.
12.10 Depuis un Apple
Netatalk permet d'imprimer depuis une station Apple sur EtherTalk. Voir le
Netatalk HOWTO(http://thehamptons.com/anders/netatalk) pour de plus amples renseignements.
12.11 Imprimer vers un fax
Utiliser un modem/fax
Si vous disposez d'un modem/fax, vous pouvez configurer votre système pour envoyer ou recevoir des fax aux formats PostScript, dvi, ascii, etc... Vous pourrez même faire en sorte que votre courrier électronique soit faxé!
Les modems/Fax supportent les commandes de classe 1 ou 2. Les modems de classe 1 ont un sous-ensemble de fonctionnalités d'un fax disons traditionnel (donc, le logiciel doit faire le reste... et le coût de traitement est parfois critique!)
La classe 1 correspond au standard EIA 578. Les modems de classe 2 répondent au sandard EIA 592. Vous trouverez dans la documentation de votre modem à quelle classe il appartient. Ne confondez pas classe et groupe. Le groupe est généralement le groupe III.
Les logiciels de fax tournant sous Linux doivent savoir convertir les données reçues en un format compatible avec le groupe III pour la transmission. Comme d'habitude Ghostscript sait faire ! Le pilote
tiffg3génère des messages fax encodés au formatg3/tiff. Vous devrez compiler et intégrer le pilote si ce n'est déjà fait.
Un des logiciels les plus complets sur le sujet,
HylaFaxest disponible sur :
ftp.sgi.com:/sgi/fax/?????.src.tar.ZIl supporte toutes sortes de choses comme les multiples modems et la diffusion.
mgetty + sendfaxest un couple de logiciels, contenant ungettypour Linux et les modems fax ainsi qu'un logiciel d'envoi de fax assez simple. Ce paquetage se trouve à:
sunsite.unc.edu:/pub/Linux/system/serial/getty/mgetty+sendfax-1.0.0.tar.gzEnfin,
efaxmérite d'être mentionné. C'est un excellent choix pour Linux. Il supporte les classes 1 et 2.
sunsite.unc.edu:/pub/Linux/apps/serialcomm/fax/efax08a.tar.gz(Répertoire dans lequel on trouvera également
vfax10.tar.z,qfax1.3.tar.gz,xfax.v1.07s.tar.gz)
Utiliser le service d'impression distant
C'est un service expérimental vous permettant d'envoyer un courrier électronique que vous souhaitez imprimer sur un fax distant. Des formats tels que PostScript sont supportés. Bien que la couverture géographique de ce service soit très faible, il est très prometteur. Pour plus d'information, référez-vous au site Web ``Remote Printing WWW Site'' (
http://www.tpc.int/).
Page suivante Page précédente Table des matières