Verwenden eines Shell-Skripts als virtueller Drucker


10

Ich habe ein Shell-Skript, das eine PDF-Datei als Argument verwendet und sie mit zusätzlichen druckerspezifischen Optionen druckt. Wie kann ich dieses Skript als virtuellen Drucker hinzufügen, der über die GUI ausgewählt werden kann?

Das Shell-Skript ist ein manuelles Duplex-Skript, das eine PDF-Datei erstellt, gerade Seiten druckt, einen Benutzer mithilfe von Zenity auffordert, die Seiten umzublättern, und dann die ungeraden Seiten druckt.

Mein aktueller Workflow ist:

  1. Datei -> Drucken -> In Datei speichern -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Gibt es eine Möglichkeit, es so zu machen:

  1. Datei -> Drucken -> my_script_as_virtual_printer

Hinweis: Dies ist unter Linux Mint 13 Zimt. Ich habe es versucht, gnome-manual-duplexaber es funktioniert nicht für mich.


Der GUI-Dialog, über den ich in eine PDF-Datei drucken kann Standard GTK Druckdialog

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0

Antworten:


2

Ich habe das noch nie versucht, aber es gibt ein Tool namens, tea4cupsdas so klingt, als könnten Sie einen Prehook in Ihr Skript implementieren, der den Druck ausführt. Sie könnten dann diesen Druck abbrechen lassen und nicht über Tassen zu einem echten Drucker gehen, sodass Ihr Skript stattdessen den Druck ausführen kann.

Auszug

Die Möglichkeiten sind endlos :

  • Senden Sie denselben Auftrag gleichzeitig an mehrere Drucker, was mit CUPS nicht möglich ist.
  • Automatisieren Sie die PDF-Archivierung aller Druckaufträge.
  • Doppelte Druckaufträge verbieten (ein einfaches Beispiel finden Sie in der Beispielkonfigurationsdatei)
  • Erstellen Sie in 15 Minuten eine Druckbuchhaltungslösung (JA, DAS IST WIRKLICH)
  • etc...

Tea4cups bietet folgende Möglichkeiten:

Tea4CUPS bietet drei Möglichkeiten zum Starten von Befehlen:

  • Filter: Ein Filter kann die Eingabedaten ändern, bevor sie an den Drucker gesendet oder den unten definierten Pre- und Post-Hooks zur Verfügung gestellt werden. Derzeit kann ein einzelner Filter pro Druckwarteschlange definiert werden.
  • Prehooks: Diese werden garantiert gestartet, bevor der Druckauftrag an den realen Drucker gesendet wird. Jeder Prehook, der -1 beendet, kann den Druckauftrag abbrechen. Für eine bestimmte Druckwarteschlange können beliebig viele Prehooks definiert werden.
  • Posthooks: Diese werden garantiert gestartet, nachdem der Druckauftrag an den realen Drucker gesendet wurde, es sei denn, der Auftrag wurde zuvor durch einen Prehook abgebrochen. Für eine bestimmte Druckwarteschlange können beliebig viele Posthooks definiert werden.

1

Wie kann ich dieses Skript als virtuellen Drucker hinzufügen, der über die GUI ausgewählt werden kann?

Um einen virtuellen Drucker anzuzeigen, bearbeiten Sie einfach Ihren /etc/printcap. Dies ist nicht sehr einfach, da die Syntax von PRINTCAP gewöhnungsbedürftig ist.

Ein Beispiel dafür finden Sie hier PDF Service mit Samba :

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

Hier wird das /usr/bin/smbprintSkript als Druckfilter verwendet. Der Drucker selbst ist /dev/null.

Möglicherweise müssen Sie installieren cups-bsd, aber es ist oft die Standardkonfiguration.


Beachten Sie, dass dies printcapdie Konfigurationsdatei für BSD lpr oder lprNG ist, nicht für CUPS, die heutzutage de facto der Standard ist, und der Standard für Mint.
Gilles 'SO - hör auf böse zu sein'

Daher habe ich das cups-bsdPaket erwähnt, das auch auf Mint verfügbar ist, standardmäßig installiert ist und auch gut unterstützt wird. cups-bsdist nicht lprng! Es ist nur ein Wrapper, der die Funktionalität des BSD-Drucks für Tassen bietet, um Anwendungen zu unterstützen, die lprzum Drucken verwendet werden (dh xpdf).

0

Spät zur Party, aber ich wollte das Gleiche tun und fand keine andere Lösung.

Ich werde hier schreiben, wie ich es gelöst habe, vielleicht finden andere die Lösung nützlich.

  • machte einen Filter für Tassen, um die zu druckende Datei zu fangen
  • machte ein Backend, um die Datei zu drucken
  • machte einen schönen und einfachen Installer.

Der Quellcode befindet sich auf github: https://github.com/dentys03/manual_duplex_linux

Es sollte auf jedem HP Drucker funktionieren. Leicht für andere Drucker geeignet, denke ich.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.