
Ich habe ein Shell-Skript, das eine PDF-Datei als Argument verwendet und diese 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 verwendet, die geraden Seiten druckt, mithilfe von Zenity eine Benutzeraufforderung zum Umblättern der Seiten ausgibt und anschließend die ungeraden Seiten druckt.
Mein aktueller Arbeitsablauf ist:
- Datei -> Drucken -> In Datei speichern -> tmp.pdf
my_duplex_script tmp.pdf
rm tmp.pdf
Gibt es eine Möglichkeit, es so zu machen:
- Datei -> Drucken -> mein_Skript_als_virtueller_Drucker
Hinweis: Dies ist auf Linux Mint 13 Cinnamon. Ich habe es versucht gnome-manual-duplex
, aber es funktioniert bei mir nicht.
Der GUI-Dialog, aus dem ich in eine PDF-Datei drucken kann
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
Antwort1
Ich habe das noch nie ausprobiert, aber es gibt ein Tool namenstea4cups
das klingt, als könnten Sie einen Prehook in Ihr Skript implementieren, der den Druckvorgang übernimmt. Sie könnten diesen Druckvorgang dann abbrechen und nicht über CUPS an einen echten Drucker senden, sodass Ihr Skript den Druckvorgang übernimmt.
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 Druckabrechnungslösung (JA, DAS IST ERNST)
- usw...
Tea4cups bietet die folgenden Annehmlichkeiten:
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 pro Druckwarteschlange ein einzelner Filter definiert werden.
- Prehooks: Diese werden garantiert gestartet, bevor der Druckauftrag an den eigentlichen Drucker gesendet wird. Jeder Prehook, der mit -1 endet, 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 echten 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.
Antwort2
Wie kann ich dieses Skript als virtuellen Drucker hinzufügen, der über die GUI ausgewählt werden kann?
Um einen virtuellen Drucker hinzuzufügen, bearbeiten Sie einfach Ihre /etc/printcap
. Das ist nicht ganz einfach, da die Syntax von DRUCKKAPPEgewöhnungsbedürftig.
Ein Beispiel dafür finden Sie hierPDF 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 /usr/bin/smbprint
wird das Skript als Druckfilter verwendet. Der Drucker selbst ist /dev/null
.
Möglicherweise müssen Sie installieren cups-bsd
, aber das ist oft die Standardkonfiguration.
Antwort3
Ich kam zu spät zur Party, wollte aber dasselbe tun und habe keine andere Lösung gefunden.
Ich werde hier schreiben, wie ich es gelöst habe, vielleicht finden andere die Lösung nützlich.
- einen Filter für CUPS erstellt, um die zu druckende Datei zu erfassen
- ein Backend zum Drucken der Datei erstellt
- hat ein schönes und einfaches Installationsprogramm erstellt.
Der Quellcode ist auf GitHub: https://github.com/dentys03/manual_duplex_linux
Es sollte auf jedem HP-Drucker funktionieren. Ich schätze, es lässt sich leicht für andere Drucker anpassen.