Wie füge ich einen gefälschten Dummy-Nulldrucker in CUPS hinzu?


12

Ich schreibe eine Software, die mehrere Drucker unterstützt. Um es zu testen, muss ich meinem CUPS-Server mehrere Drucker hinzufügen. Wie kann ich das machen?

Ich möchte ein paar gefälschte Drucker hinzufügen, die die Jobs direkt an / dev / null senden. Auf diese Weise kann ich die Liste "Abgeschlossene Aufträge" in der CUPS-Oberfläche anzeigen und feststellen, ob meine Software für jeden Auftrag den richtigen Drucker verwendet.


ist nicht das richtige "lpadmin -p lp0 -E -v / dev / null -m raw"
Ashika Umanga Umagiliya

Antworten:


11

Eine Lösung ist die Installation von cups-pdf . Es wird ein virtueller Drucker hinzugefügt, der PDF-Dateien schreibt. Im Internet finden Sie verschiedene Tutorials zur Installation und Konfiguration. Seit ich Gentoo benutze, habe ich das Gentoo-Wiki gelesen , in dem auch das Sabayon-Wiki erwähnt wird .

Der virtuelle Drucker cup-pdf enthält eine Konfigurationsdatei, in die /etc/cups/cups-pdf.confstandardmäßig alle PDF-Dateien geschrieben werden /var/spool/cups-pdf/${USER}.

(NB: Unter Ubuntu schreibt es in ~ / PDF /)

Es gibt jedoch einige Einschränkungen:

  • Da es nur eine Konfigurationsdatei gibt, werden mehrere PDF-Drucker im selben Verzeichnis gespeichert.

  • Es ist unmöglich, "Rohdaten" zu drucken (z. B. mit lpr -o raw). Selbst das Senden einer PDF-Datei als Rohjob funktioniert nicht. Rohdruckaufträge erzeugen eine leere PDF-Datei mit nur einer leeren Seite.

Trotz dieser Einschränkungen funktioniert es perfekt für meine Bedürfnisse.


Fußnote: Wenn der Benutzer Gnome verwendet oder über eine GTK + -Anwendung druckt, befindet sich im Druckdialog bereits ein Pseudodrucker "In Datei drucken". Warum sollte der Benutzer dennoch einen virtuellen PDF-Drucker hinzufügen wollen? Hier einige Gründe:

  • Dieses "In Datei drucken" ist spezifisch für GTK + und nicht für Nicht-GTK + -Anwendungen verfügbar. (Vielleicht hat KDE eine ähnliche Funktion, aber ich bin mir nicht sicher)
  • Es ermöglicht das Generieren einer PDF-Datei aus Flash-Anwendungen, die zum Drucken entwickelt wurden. Zum Beispiel das PocketMod .
  • Durch Hinzufügen eines virtuellen Druckers zu CUPS können Sie das Drucken mithilfe von Shell-Skripten oder anderer Software testen, die direkt mit CUPS kommuniziert. Dies ist besonders nützlich für Entwickler beim Testen ihrer Anwendungen.
  • Es ist möglich, diesen virtuellen Drucker für das lokale Netzwerk "freizugeben". Nicht gerade nützlich, aber möglich.
  • Es ist möglich, einen Nachbearbeitungsbefehl anzuhängen, der direkt nach dem Speichern der PDF-Datei ausgeführt wird.

10

Das Cups Forum hat eine vollständigere / genauere Antwort auf diese Frage.

Die Antwort ist, dass der Geräte-URI auf die Datei / dev / null gesetzt werden sollte

Also in meinem Ubuntu-Setup:

  • Geräte-URI: Datei: / dev / null
  • Marke und Modell: Lokaler Rohdrucker

Welches funktioniert bei mir perfekt.

Ich habe das Cups-Forum erneut durchsucht und Folgendes gefunden:

Befehlszeilen-Nulldrucker-Setup im Cups-Forum

In Ihrer cups.conf:

FileDevice yes

Drucker einrichten

lpadmin -p nowhere -E -v file:/dev/null

Drucker testen

who |lp -d nowhere

Ich schaue gerade auf meinen Ausdruck: feine Details, lebendige Farben, die einfach von der Seite auf mich springen. ... hey waitaminute ....
Andrew Russell

Vielen Dank. Ich brauchte einen Dummy-Drucker in meiner virtuellen Maschine, um einige Anweisungen zu scannen. :)
Njallam

Vielen Dank. Das hat auch funktioniert wine.
Tinti

7

Sie können einen Drucker, die Ausgänge schaffen /dev/nullmit lpadmin:

$ sudo lpadmin -p myprinter -E -v file:///dev/null

Dies wird geschrieben /etc/cups/printers.conf, aber Sie können Drucker auch anzeigen mit lpstat:

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

Beachten Sie, dass Sie FileDevice möglicherweise in /etc/cups/cupsd.conf unter alten Linux-Distributionen aktivieren müssen .

Verwenden Sie Folgendes, um Ihren neuen Drucker zum Standard zu machen lpoptions:

$ sudo lpoptions -d myprinter

Wie entferne ich es?
Richard

@ Richard Use lpadmin -x myprinteroder das Webinterface.
Torkel Bjørnson-Langen

2

Eine der besten Lösungen ist die Verwendung ippserver. Es kommt mit CUPSv2.2.2und höher. Alternativ können Sie das Projekt hier herunterladen : IPP-Beispielimplementierungen .

Gemäß der Beschreibung auf der Handbuchseite :

ippserver ist ein einfacher IPP-Server (Internet Printing Protocol), der den Spezifikationen IPP Everywhere und IPP Shared Infrastructure Extensions (INFRA) entspricht. Es kann als eigenständiger Druckserver und / oder als sehr grundlegender Infrastrukturserver zwischen Standard-IPP-Clients und IPP-Proxys gemäß der INFRA-Spezifikation verwendet werden.

Um es zu verwenden, müssen Sie es nur ausführen ippserver "My cool printer"und es wird ein virtueller Drucker mit dem Namen My cool printerfür Sie erstellt. Es läuft wie ein Webserver und überwacht bestimmte Ports.

Wenn Sie mehrere Drucker benötigen, können Sie den Server über mehrere Ports ausführen ippserver "My other cool printer" -p 8888.

Sie können sogar Druckerattribute mithilfe einer Attributdatei angeben. Beispielsweise unterstützt Ihr Drucker standardmäßig Drucke in hoher Qualität. Sie können der Attributdatei das folgende Attribut hinzufügen:

ATTR enum print-quality-default high

und führen Sie den Server aus mit:

ippserver "My high quality cool printer" -a attributes-file.txt

Verweise:

  1. PWG IPP-Beispiel
  2. CUPS ipptoolfile Manpage

1

Entnommen aus http://inai.de/linux/adm_virtualprinter :

Virtueller Drucker in CUPS

/dev/nullEs gibt viele Möglichkeiten , einen Drucker in CUPS zu erstellen, der die Daten nirgendwo (wie ) sendet . Diese Seite verwendet die socket:// Methode.

Richten Sie zuerst xinetd ein

Was wir brauchen, ist der TCP Discard-Dienst auf Port 9. Xinetd hat ihn eingebaut, also können wir ihn einfach verwenden. Stellen Sie sicher, dass die folgende Definition normalerweise in den Konfigurationsdateien von xinetd verfügbar ist /etc/xinetd.d/discard. Es sollte einen Dienst wie den folgenden enthalten:

    Service verwerfen
        Typ = INTERN
        id = Discard-Stream
        socket_type = stream
        Protokoll = TCP
        Benutzer = root
        warten = nein
        deaktivieren = nein
        FLAGS = IPv6 IPv4 
Führen Sie rcxinetd reloaddiese Option aus, um die Konfigurationsdateien erneut zu lesen und den neuen discardDienst zu aktivieren . Oder verwenden Sie, rcxinetd startwenn xinetd noch nicht aktiv war.

CUPS-Drucker

Gehen Sie nun zum CUPS-Web-Frontend und fügen Sie einen neuen Drucker hinzu. Verwenden Sie socket://localhost:9/als Ziel als Drucker etwas, das gut aussieht, z. B. "HP 2500C Foomatic / pcl3". Das ist alles dazu.

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.