Création de scripts d'interface d'imprimante

Si vous disposez d'une imprimante qui n'est pas prise en charge par l'ajout d'une entrée à la base de données terminfo ou si vos besoins d'impression ne sont pas pris en charge par le standard ou d'autres scripts d'interface fournis dans le fichier /etc/lp/model , vous pouvez créer votre propre script d'interface d'imprimante.

Pour créer un script d'interface personnalisé, procédez comme suit:

  1. Modifiez le script d'interface standard (ou l'un des autres scripts de /etc/lp/model). Par exemple :
    	
    	cd /etc/lp/model
    	
    	cp standard okidatanew
    	
  2. Assurez-vous que le script d'interface personnalisé définit les modes Stty appropriés (caractéristiques de terminal telles que le débit en bauds ou les options de sortie). Recherchez la section commençant par cette ligne:
      ## Initialize the printer port
  3. Modifiez le code dans le script d'interface standard . Il définit à la fois les modes par défaut et les modes ajustés fournis par le service d'impression ou l'utilisateur avec une ligne similaire à la suivante:
    stty mode options 0<&1

    Cette ligne de commande utilise l'entrée standard pour la commande stty à partir du port de l'imprimante. Par exemple, l'exemple de commande stty suivant définit le débit en bauds sur 1200bps et définit certains des modes d'option:

    stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1
  4. Définissez la caractéristique de port de l'imprimante de contrôle de flux matériel. Le script d'interface standard ne définit pas le contrôle de flux matériel ; il est défini en fonction de votre matériel informatique. Le code du script d'interface standard indique où définir cette caractéristique et d'autres caractéristiques de port d'imprimante. Recherchez la section commençant par cette ligne:
      # Here you may want to add other port initialization code.
  5. Etant donné que les différentes imprimantes ont un nombre de colonnes différent, assurez-vous que l'en-tête et la remorque correspondant à votre script d'interface correspondent à votre imprimante. Le script d'interface standard imprime une bannière qui s'adapte à une page de 80 colonnes (à l'exception du titre de l'utilisateur, qui peut être plus long). Recherchez la section du code du script d'interface standard qui commence par cette ligne:
      ## Print the banner page
  6. Certaines applications, lorsqu'elles sont exécutées avec certaines imprimantes, peuvent nécessiter l'arrêt de la rupture de page. Si vous devez désactiver la rupture de page, vous pouvez modifier le programme d'interface standard (/usr/lib/lp/model/standard) à la ligne suivante:
      if [ -n "${FF}" -a "no" = "${nofilebreak}" ]

    Remplacez Non par Oui pour désactiver la rupture de page.

  7. Indiquez que le script d'interface personnalisé imprime tous les messages d'erreur liés à l'utilisateur à la sortie standard ou à la sortie d'erreur standard. Le service d'impression imprime les erreurs de sortie standard sur la page et envoie l'erreur standard à l'utilisateur.
  8. Lorsque l'impression est terminée, le script d'interface se ferme avec un code indiquant le statut du travail d'impression. La table des codes de sortie, Imprimer les codes de sortie du service, décrit comment le service d'impression interprète les codes de sortie.
Une façon d'alerter l'administrateur sur une erreur imprimante est de sortir avec un code de 129. Malheureusement, si le script d'interface se ferme, le service d'impression réimprime le travail d'impression depuis le début une fois la panne autorisée. Pour envoyer une alerte à l'administrateur sans réimprimer l'intégralité du travail, indiquez que le script d'interface envoie un message d'erreur au service d'impression, mais attendez que la panne soit claire. Lorsque l'erreur s'efface, le script d'interface reprend l'impression du travail. Lorsque le travail termine l'impression, le script d'interface peut sortir avec zéro comme si la faute ne s'est jamais produite. Un avantage supplémentaire est que le script d'interface peut détecter le moment où l'erreur est effacé automatiquement afin que l'administrateur n'ait pas à réactiver l'imprimante.

Pour indiquer que les messages d'erreur doivent être envoyés au service d'impression, utilisez la commande lp.tell . Le code d'interface de l'imprimante standard appelle la commande lp.tell avec la variable shell LPTELL . Le programme lp.tell envoie son entrée standard au service d'impression. Le service d'impression transmet le message en tant qu'alerte à l'administrateur. Si son entrée standard est vide, lp.tell ne lance pas d'alerte. Examinez le code immédiatement après ces commentaires dans le script d'interface standard pour un exemple d'utilisation du programme lp.tell (LPTELL):

# Here's where we set up the $LPTELL program to capture
        # fault messages.
        #
        # Here's where we print the file.

Avec le code d'exit spécial 129 ou lp.tell, le script d'interface n'a pas besoin de désactiver l'imprimante elle-même. Votre script d'interface peut désactiver directement l'imprimante, mais cela remplace le mécanisme d'alerte aux pannes. Les alertes sont envoyées uniquement si le service d'impression détecte que l'imprimante est défaillante et que le code d'exit spécial et le programme lp.tell sont ses principaux outils de détection.

Si le service d'impression doit interrompre l'impression d'un fichier à tout moment, il arrête le script d'interface avec un signal 15 (voir la commande signal et la commande kill pour plus d'informations).

Si le script d'interface s'arrête à partir de la réception d'un autre signal, le service d'impression suppose que les travaux d'impression futurs ne sont pas affectés et continuent d'utiliser l'imprimante. Le service d'impression informe la personne qui a soumis le travail d'impression que le travail n'a pas abouti.

Les signaux RESSERRER, SIGINT, SIGQUIet SIGPIP (numéros d'alerte 1, 2, 3 et 13) sont ignorés lorsque l'interface est appelée. Le script d'interface standard le modifie pour intercepter ces signaux aux moments appropriés, interprète ces signaux comme signifiant que l'imprimante a un problème et émet une erreur.