Druckerschnittstellenscripts erstellen

Wenn Sie einen Drucker haben, der nicht durch Hinzufügen eines Eintrags zur terminfo -Datenbank unterstützt wird, oder wenn Ihre Druckanforderungen nicht von den standard oder anderen Schnittstellenscripts unterstützt werden, die in der Datei /etc/lp/model bereitgestellt werden, können Sie ein eigenes Druckerschnittstellenscript erstellen.

Gehen Sie wie folgt vor, um ein angepasstes Schnittstellenscript zu erstellen:

  1. Ändern Sie das Schnittstellenscript standard (oder eines der anderen Scripts in /etc/lp/model). Beispiel:
    	
    	cd /etc/lp/model
    	
    	cp standard okidatanew
    	
  2. Stellen Sie sicher, dass das angepasste Schnittstellenscript die richtigen Stty -Modi (Terminalmerkmale wie Baudrate oder Ausgabeoptionen) festlegt. Suchen Sie nach dem Abschnitt, der mit dieser Zeile beginnt:
      ## Initialize the printer port
  3. Ändern Sie den Code im Schnittstellenscript standard . Sie legt sowohl die Standardmodi als auch die angepassten Modi fest, die vom Druckservice oder vom Benutzer mit einer Zeile ähnlich der folgenden angegeben werden:
    stty mode options 0<&1

    Diese Befehlszeile übernimmt die Standardeingabe für den Befehl stty vom Druckeranschluss. Das folgende Beispiel für den Befehl stty setzt die Baudrate auf 1200bps und legt einige der Optionsmodi fest:

    stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1
  4. Legen Sie das Druckeranschlussmerkmal für die Hardwareablaufsteuerung fest. Das standard -Schnittstellenscript legt keine Hardwareablaufsteuerung fest; es wird entsprechend Ihrer Computerhardware festgelegt. Der Code für das Schnittstellenscript standard gibt an, wo diese und andere Druckeranschlussmerkmale festgelegt werden sollen. Suchen Sie nach dem Abschnitt, der mit dieser Zeile beginnt:
      # Here you may want to add other port initialization code.
  5. Da verschiedene Drucker unterschiedliche Spaltenzahlen haben, stellen Sie sicher, dass der Header und der Trailer für Ihr Schnittstellenscript dem Drucker entsprechen. Das Schnittstellenscript standard druckt ein Banner, das auf eine Seite mit 80 Spalten passt (mit Ausnahme des Benutzertitels, der möglicherweise länger ist). Suchen Sie den Abschnitt im Code für das standard -Schnittstellenscript, der mit der folgenden Zeile beginnt:
      ## Print the banner page
  6. Wenn einige Anwendungen mit bestimmten Druckern ausgeführt werden, kann es erforderlich sein, dass Sie den Seitenumbruch inaktivieren. Wenn Sie den Seitenumbruch inaktivieren müssen, können Sie das Standardschnittstellenprogramm (/usr/lib/lp/model/standard) in der folgenden Zeile ändern:
      if [ -n "${FF}" -a "no" = "${nofilebreak}" ]

    Ändern Sie die Nein in Ja , um den Seitenumbruch zu inaktivieren.

  7. Geben Sie an, dass das Script der angepassten Schnittstelle alle benutzerbezogenen Fehlernachrichten in der Standardausgabe oder in der Standardfehlerausgabe ausgeben soll. Der Druckservice gibt Standardausgabefehler auf der Seite aus und sendet Standardfehler an den Benutzer.
  8. Gibt an, dass das Schnittstellenscript nach Abschluss des Druckvorgangs mit einem Code beendet wird, der den Status des Druckjobs angibt. Die Tabelle "Exit-Codes", Service-Exit-Codes drucken, beschreibt, wie der Druckservice Exit-Codes interpretiert.
Eine Möglichkeit, den Administrator auf einen Druckerfehler hinzuweisen, besteht darin, den Vorgang mit dem Code 129 zu beenden. Wenn das Schnittstellenscript beendet wird, druckt der Druckservice den Druckjob leider von Anfang an erneut, nachdem der Fehler behoben wurde. Um einen Alert an den Administrator zu senden, ohne den gesamten Job erneut zu drucken, geben Sie an, dass das Schnittstellenscript eine Fehlernachricht an den Druckservice sendet, aber warten, bis der Fehler behoben ist. Wenn der Fehler behoben ist, setzt das Schnittstellenscript das Drucken des Jobs fort. Wenn der Job das Drucken beendet, kann das Schnittstellenscript mit null beendet werden, als wäre der Fehler nie aufgetreten. Ein weiterer Vorteil ist, dass das Schnittstellenscript erkennen kann, wenn der Fehler automatisch behoben wird, sodass der Administrator den Drucker nicht erneut aktivieren muss.

Verwenden Sie den Befehl lp.tell , um anzugeben, dass Fehlernachrichten an den Druckdienst gesendet werden. Der standard -Druckerschnittstellencode ruft den Befehl lp.tell mit der Shellvariablen LPTELL auf. Das Programm lp.tell sendet seine Standardeingabe an den Druckservice. Der Druckservice leitet die Nachricht als Alert an den Administrator weiter. Wenn die Standardeingabe leer ist, löst lp.tell keinen Alert aus. Untersuchen Sie den Code, der unmittelbar auf diese Kommentare im Schnittstellenscript standard folgt, um ein Beispiel für die Verwendung des Programms lp.tell (LPTELL) zu finden:

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

Mit dem speziellen Exit-Code 129 oder lp.tellmuss das Schnittstellenscript den Drucker selbst nicht inaktivieren. Ihr Schnittstellenscript kann den Drucker direkt inaktivieren, aber dadurch wird der Fehleralertmechanismus überschrieben. Alerts werden nur gesendet, wenn der Druckservice feststellt, dass ein Fehler am Drucker aufgetreten ist, und der spezielle Exit-Code und das lp.tell -Programm die wichtigsten Erkennungstools sind.

Wenn der Druckservice das Drucken einer Datei zu einem beliebigen Zeitpunkt unterbrechen muss, wird das Schnittstellenscript mit einem Signal 15 beendet (weitere Informationen finden Sie in den Abschnitten zum Befehl signal und zum Befehl kill ).

Wenn das Schnittstellenscript beim Empfang eines anderen Signals stoppt, geht der Druckservice davon aus, dass zukünftige Druckjobs nicht betroffen sind, und verwendet den Drucker weiterhin. Der Druckservice benachrichtigt die Person, die den Druckjob übergeben hat, dass der Job nicht erfolgreich beendet wurde.

Die Signale SIGHUP, ANMELDUNG, SIGQUIund SIGPIP (Trapnummern 1, 2, 3 und 13) werden ignoriert, wenn die Schnittstelle aufgerufen wird. Das Script der standard -Schnittstelle ändert dies, um diese Signale zu geeigneten Zeiten abzufangen, interpretiert diese Signale so, dass der Drucker ein Problem hat, und gibt einen Fehler aus.